在 Azure Devops 中为基于 Python 的 Azure 函数设置发布管道的正确方法

Proper way to set up a release pipeline in Azure Devops for Python based Azure Function

我在 Azure Devops 中有一个有效的构建管道,它主要安装 Python3.6,设置虚拟环境 (.env),然后执行所有单元测试。然后,它使用复制操作作为最后一步,将所有文件(包括虚拟环境)移动到放置文件夹。

我的问题来自创建发布管道。我正在 运行 为发布管道创建一个 bash 脚本,该脚本主要安装 azure 函数命令工具,然后在调用 func azure 发布指令之前激活 python 虚拟环境。

我得到的错误指出设置已加密,我需要调用 func setting add 来添加设置,但是,当 运行 在本地时,脚本执行时没有任何错误。

有没有人在 Azure Devops 中有基于 python 的 Azure Functions 的工作发布管道,他们可以与我分享,这样我也许可以看到我做错了什么?

这是执行脚本的相关部分:

#!/usr/bin/env bash
FUNCTION_APP_NAME="secret"
FUNCTION_APP_FOLDER="evenMoreSecret"


# Install Azure Functions Core Tools
echo "--> Install Azure Functions Core Tools"
wget -q https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install azure-functions-core-tools -y

echo ">>>>>>>> Initialize Python Virtual Environment"
source .env/bin/activate

echo "--> Publish the function app to Azure Functions"
cd $FUNCTION_APP_FOLDER
func azure functionapp publish $FUNCTION_APP_NAME --build-native-deps

该脚本是使用 Azure CLI 执行的,使用与它所针对的 azure 帐户相关联的安全主体。

通常,对于 Azure DevOps,您会创建多个生成步骤,这些步骤会生成一些生成工件 - 这些在 azure-pipelines.yml 文件中定义。然后执行发布步骤以发布您创建的工件 - 这是在 UI 中创建的。这可能涉及部署到测试服务器,然后部署到生产服务器,或者您希望如何配置它。您所描述的是在一个 yaml 文件中执行构建和发布步骤,因为 func publish 本质上是在执行发布,而且似乎都在一个脚本中。

在 az cli 的下一个版本中,有一个名为 az functionapp devops-build 的新命令,它将使用单独的构建和发布步骤设置 DevOps 管道。然而,与此同时,我们创建了一系列 beta yaml 文件,我们希望您只需拖放这些文件即可在构建部分中执行构建和发布步骤(就像您正在做的那样)。

beta yaml 文件在这里: https://github.com/Azure/azure-functions-devops-build/wiki/Yaml-Samples

我必须声明它们尚未经过全面测试,也不受支持。

我会在解决问题后自己回答。 致@Oliver Dolk:我们​​不想作为构建管道的一部分发布。我唯一感兴趣的是设置一个虚拟环境,然后 运行 单元测试。

RELEASE 阶段是我们要部署从构建步骤复制过来的脚本的地方。然后,这些工件是发布到开发、测试和生产环境的基础。

我的脚本中遗漏了一个非常重要的步骤;创建一个 local.settings.json 文件,其中包含 functionapp 的加密设置。

为了解决这个问题,我只需要调用如下:

func azure functionapp fetch-app-settings $FUNCTION_APP_NAME

这会调用 azure functionApp,并将其设置检索到加密的 local.settings.json 中,然后在发布期间使用。

对于构建 YAML 脚本和执行部署的 bash 脚本的完整脚本参考,我将它们都放在匿名的 github 存储库中:

https://github.com/digitaldias/Python-Examples