Auryn
Auryn

Reputation: 1176

How to skip build/download dependencies on Azure DevOps pipeline on python

I am trying to deploy an application with azure devops to azure function. My libraries cannot be installed from azure, since it has no public access.

So i installed all the dependencies into the .zip.

But somehow the deployer still tries to install pip dependencies. How do I stop it from doing the pip install?

Here is my config:

trigger:
- main
variables:
  workingDirectory: '$(System.DefaultWorkingDirectory)'

steps:
  - task: UsePythonVersion@0
    displayName: 'Use Python 3.11'
    inputs:
      versionSpec: 3.11
  - bash: |
      pip install --target="./.python_packages/lib/site-packages" -r ./requirements.txt
    workingDirectory: $(workingDirectory)
    displayName: 'Install application dependencies'
  - task: ArchiveFiles@2
    displayName: 'Generate ZIP'
    inputs:
      rootFolderOrFile: '$(workingDirectory)'
      includeRootFolder: false
      archiveType: zip
      archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip

  - publish: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
    artifact: drop

  - task: AzureRmWebAppDeployment@4
    displayName: Azure Function App Deploy
    inputs:
      appType: 'functionAppLinux'
      deployToSlotOrASE: true
      DeploymentType: 'zipDeploy'
      packageForLinux: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
      runtimeStack: 'PYTHON|3.11'

Upvotes: 0

Views: 378

Answers (1)

SiddheshDesai
SiddheshDesai

Reputation: 8157

You can add SCM_DO_BUILD_DURING_DEPLOYMENT:true setting in your Azure Function App. As it avoids any module specific error and helps in remote build while zip deployment.

enter image description here

And if the dependencies are already installed, Remove the pip install step itself and perform the Deployment like below:-

trigger:
- main

variables:
  
  azureSubscription: 'xxxxxxx6611762'

  
  functionAppName: 'functionpython87'

  
  vmImageName: 'ubuntu-latest'

 
  workingDirectory: '$(System.DefaultWorkingDirectory)/'

stages:
- stage: Build
  displayName: Build stage

  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: $(vmImageName)

    steps:
    - bash: |
        if [ -f extensions.csproj ]
        then
            dotnet build extensions.csproj --runtime ubuntu.16.04-x64 --output ./bin
        fi
      workingDirectory: $(workingDirectory)
      displayName: 'Build extensions'

    - task: UsePythonVersion@0
      displayName: 'Use Python 3.10'
      inputs:
        versionSpec: 3.10 

    - task: ArchiveFiles@2
      displayName: 'Archive files'
      inputs:
        rootFolderOrFile: '$(workingDirectory)'
        includeRootFolder: false
        archiveType: zip
        archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
        replaceExistingArchive: true

    - publish: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
      artifact: drop

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  condition: succeeded()

  jobs:
  - deployment: Deploy
    displayName: Deploy
    environment: 'development'
    pool:
      vmImage: $(vmImageName)

    strategy:
      runOnce:
        deploy:

          steps:
          - task: AzureFunctionApp@1
            displayName: 'Azure functions app deploy'
            inputs:
              azureSubscription: '$(azureSubscription)'
              appType: functionAppLinux
              appName: $(functionAppName)
              package: '$(Pipeline.Workspace)/drop/$(Build.BuildId).zip'

Output:-

enter image description here

enter image description here

For Functions to be visible, Make sure you have the same settings as below:-

[
  {
    "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
    "value": "InstrumentationKey=68f4bced-7c86-45b1-a7b3-73d5fe9476ea;IngestionEndpoint=https://ukwest-0.in.applicationinsights.azure.com/;LiveEndpoint=https://ukwest.livediagnostics.monitor.azure.com/",
    "slotSetting": false
  },
  {
    "name": "AzureWebJobsStorage",
    "value": "DefaultEndpointsProtocol=https;AccountName=valleyrg78984ec;AccountKey=xxxxxOdUH2g==;EndpointSuffix=core.windows.net",
    "slotSetting": false
  },
  {
    "name": "FUNCTIONS_EXTENSION_VERSION",
    "value": "~4",
    "slotSetting": false
  },
  {
    "name": "FUNCTIONS_WORKER_RUNTIME",
    "value": "python",
    "slotSetting": false
  },
  {
    "name": "SCM_DO_BUILD_DURING_DEPLOYMENT",
    "value": "true",
    "slotSetting": false
  },
  {
    "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
    "value": "DefaultEndpointsProtocol=https;AccountName=valleyrg78984ec;AccountKey=xxxxxtOdUH2g==;EndpointSuffix=core.windows.net",
    "slotSetting": false
  },
  {
    "name": "WEBSITE_CONTENTSHARE",
    "value": "functionpython8781c8",
    "slotSetting": false
  },
  {
    "name": "WEBSITE_ENABLE_SYNC_UPDATE_SITE",
    "value": "false",
    "slotSetting": false
  },
  {
    "name": "WEBSITE_RUN_FROM_PACKAGE",
    "value": "https://valleyrg78984ec.blob.core.windows.net/azure-pipelines-deploy/package_1701270611011.zip?st=xxxxCC1%2BrN4g%3D",
    "slotSetting": false
  }
]

enter image description here

Upvotes: 1

Related Questions