Python Azure Functions 和 Bitbucket 管道 - 如何压缩要求?

Python Azure Functions and Bitbucket Pipelines - how do I zip requirements?

我一直在尝试了解如何使用 Bitbucket 管道将我的 Python Function App 部署到 Azure。

我已经在网上阅读了一些答案,一旦我压缩了我的 python 应用程序,这似乎很简单。 使用此答案可以轻松完成:Azure Function and BitBucket build pipelines

script:
  - pipe: microsoft/azure-functions-deploy:1.0.2
    variables:
      AZURE_APP_ID: $AZURE_APP_ID
      AZURE_PASSWORD: $AZURE_PASSWORD
      AZURE_TENANT_ID: $AZURE_TENANT_ID
      FUNCTION_APP_NAME: '<string>'
      ZIP_FILE: '<string>'

但是,我这辈子都找不到 Azure Functions 期望 zip 文件采用的格式。

要求去哪儿了?更好的是 - 在此之前出现的管道规范创造了备受追捧的 ZIP_FILE?

谢谢!

最终找到了散落在不同地方的答案:

image: python:3.8

pipelines:
  branches:
    master:
    - step:
        name: Build function zip
        caches:
          - pip
        script:
          - apt-get update
          - apt-get install -y zip
          - pip install --target .python_packages/lib/site-packages -r requirements.txt
          - zip -r function.zip .
        artifacts:
          - function.zip
    - step:
        name: Deploy zip to Azure
        deployment: Production
        script:
          - pipe: microsoft/azure-functions-deploy:1.0.0
            variables:
              AZURE_APP_ID: $AZURE_APP_ID
              AZURE_PASSWORD: $AZURE_PASSWORD
              AZURE_TENANT_ID: $AZURE_TENANT_ID
              ZIP_FILE: 'function.zip'
              FUNCTION_APP_NAME: $FUNCTION_NAME

我试过这个解决方案并且也适用于我,但是有一个弃用问题。管道 microsoft/azure-functions-deploy 正在为 azure cli 使用已弃用的图像:microsoft/azure-cli, you can read this here。 所以你可以使用这个 pipe 的 atlassian 版本但是 python 对我不起作用因为在命令中:

az functionapp deployment source config-zip...

没有指定 --build-remote。

所以我的解决方案不是使用管道,而是使用 azure-cli 命令编写步骤:


- step:
    name: Deploy on Azure
    image: mcr.microsoft.com/azure-cli:latest
    script:
    - az login --service-principal --username ${AZURE_APP_ID} --password ${AZURE_PASSOWRD} --tenant ${AZURE_TENANT_ID}
    - az functionapp deployment source config-zip -g ${RESOURCE_GROUP_NAME} -n 'functioAppName' --src 'function.zip' --build-remote

这是一个适用于我的案例的步骤,另一个解决方案可以是编写一个使用 this

的步骤