坚持 CI/CD 部署 Linux 基于消费的 Azure 函数
Stuck with CI/CD deploy of Linux Consumption based Azure Function
我制作了一个 Azure 函数 (Python),托管了一个 Linux 消费计划。 App Engine 位于开发资源组中。我现在希望能够将它(以及后续更改)部署到暂存和生产资源组。关于许多不同方法的文档让我感到困惑,尤其是大多数部署方法(部署槽...)不适用于 Linux 消费计划,我没有用高级版。我考虑过设置版本控制,但我无法 link 我的 Azure Function 到 Azure DevOps 存储库(部署中心已禁用,灰色)。
你会怎么做?最好使用 Azure DevOps。
提前致谢
首先,您需要确保您有权访问相关订阅,包括资源组和函数应用。
建造
在 DevOps 上,对于包含存储库的项目,转到 Pipelines > Pipelines(以红色突出显示)。
在 top-right 角落,您应该能够看到并单击“New pipeline”。我将在这个答案中做一个“Azure Repos Git (YAML)”管道,所以你不妨一起去。如果您有任何其他特定偏好,那么只需确保相应地更改需要更改的内容即可。我们的目标基本上只是从我们的 build-process 发布一个工件,它又将被“发布管道”使用。
接下来,对于构建管道,选择“Azure Repos Git (YAML)”将提示您选择项目中的哪个存储库,该存储库将 1) 包含我们即将创建的 YAML 文件创建,以及 2) 具有可用于管道的源代码。无需赘述,也可以将所有 yaml-pipeline 文件放入其自己的存储库中,然后(通过资源)包含包含源代码的存储库。
下一步是“配置您的管道”。实际上有一个“Python Function App to Linux on Azure”模板可用。但是,它也包含部署阶段,我通常总是将所有与部署相关的内容放入我的“发布管道”。不过现在,我选择了“入门管道”。
实际上会弹出一个在线编辑器。在编辑器的顶部,您会看到存储库的名称和一个“azure-pipelines.yml”。单击“azure-pipelines.yml”重命名管道,以及 yaml-file 的名称,最终将出现在存储库的根目录中。
我已经提供了上述模板的一个版本,归结为必要的内容,并且可以使用 here。只需删除“启动管道”中已有的任何内容,并将 copy-paste pastebin 的内容放入管道中。
当你保存管道时,你可能想把它放在一个不同的分支而不是你的 master 分支(它会提示你这样做),然后创建一个 PR。当管道工作时接受 PR(您可以 运行 使用新创建的分支的管道)。当构建管道成功 运行s 且没有错误时,如果您导航到成功 运行 的概述(以红色突出显示),您应该能够看到已发布的工件。您可以单击并检查内容以检查它们是否符合预期。
发布
转到“版本”(以绿色突出显示,第一张图片)。从这里,您应该能够看到并单击“+ 新建”按钮。
它会立即提示您 select 您想要什么类型的工作。只需单击“空作业”即可开始。
首先选择要消耗的神器。单击左侧的“添加工件”框。从 drop-down 列表中找到您刚刚创建的管道。您可以配置要使用的版本(如果您有某些偏好),并为工件提供一个可以在整个发布管道中使用的别名。
接下来是设置你的舞台。您需要 3 个阶段:一个开发阶段,一个登台阶段,最后一个生产阶段。目前你应该有一个“第一阶段”。如果将鼠标悬停在舞台上方,您可以在框下方看到一个“+”符号。单击它以添加一个阶段。再次选择空作业。对新创建的舞台框重复此操作(悬停,单击 +,添加空作业)。
你现在应该有这样的东西:
让我们从配置阶段 1 开始。单击阶段(框本身),并将其命名为“开发”或您喜欢的名称。然后点击“1 job, 0 task”-link。单击“代理作业”框,并根据需要配置代理作业(确保代理下载您的工件,它可以在“工件下载”中配置)。
接下来,单击您刚刚配置的代理作业上的“+”号。根据提示,使用 search-bar 查找“Azure Functions”。请注意,有 3 个作业称为此。您想要 只是 的那个叫做“Azure Functions”。单击并配置新创建的作业。这里真的应该是straight-forward。在 linux 上选择函数应用程序,然后从列表中找到您的“开发”函数应用程序。默认情况下,“包或文件夹”应该类似于 $(System.DefaultWorkingDirectory)/**/*.zip
,它应该足够了,除非您对构建管道的工件进行了一些自定义。
你应该有这样的东西:
从“任务”下拉菜单(带有红色警告圆圈),您可以移至“第 2 阶段”(您当然会像对“阶段”一样重命名它“到“开发”)。由于您没有使用插槽,因此不幸的是,在两个不同的资源组中的 2 个功能应用程序之间无法进行交换 - 至少据我所知不是这样。因此您必须从“开发”阶段,您使用工件部署到暂存资源组中的函数应用程序。最后一个阶段“第 3 阶段”也是如此,您将部署到生产资源组中的函数应用程序。
分期和批准
我想,我们一直在等待什么。从带有阶段概览的图片中,您可以看到每个阶段在框的每一侧都有 2 个附加的“按钮”。带有闪电和用户图标(左)的情况,以及仅带有用户图标的情况。左边的是“pre-stage actions”,右边的是“post-stage actions”。在您的场景中,您可能希望为“Stage 2”/“Staging”和“Stage 3”/“Production”配置“pre-stage actions”。在这两种情况下,我都会添加“Pre-deployment 批准”,如下所示:
您可以添加特定的人或整个组。它将要求有人进入发布管道概述,然后批准下一阶段,然后再部署(或者更确切地说,该阶段在获得批准之前不会启动)。
哎呀,那是一个漫长的...我希望这消除了你的一些困惑,并且它对你有用。
我制作了一个 Azure 函数 (Python),托管了一个 Linux 消费计划。 App Engine 位于开发资源组中。我现在希望能够将它(以及后续更改)部署到暂存和生产资源组。关于许多不同方法的文档让我感到困惑,尤其是大多数部署方法(部署槽...)不适用于 Linux 消费计划,我没有用高级版。我考虑过设置版本控制,但我无法 link 我的 Azure Function 到 Azure DevOps 存储库(部署中心已禁用,灰色)。
你会怎么做?最好使用 Azure DevOps。
提前致谢
首先,您需要确保您有权访问相关订阅,包括资源组和函数应用。
建造
在 DevOps 上,对于包含存储库的项目,转到 Pipelines > Pipelines(以红色突出显示)。
在 top-right 角落,您应该能够看到并单击“New pipeline”。我将在这个答案中做一个“Azure Repos Git (YAML)”管道,所以你不妨一起去。如果您有任何其他特定偏好,那么只需确保相应地更改需要更改的内容即可。我们的目标基本上只是从我们的 build-process 发布一个工件,它又将被“发布管道”使用。
接下来,对于构建管道,选择“Azure Repos Git (YAML)”将提示您选择项目中的哪个存储库,该存储库将 1) 包含我们即将创建的 YAML 文件创建,以及 2) 具有可用于管道的源代码。无需赘述,也可以将所有 yaml-pipeline 文件放入其自己的存储库中,然后(通过资源)包含包含源代码的存储库。
下一步是“配置您的管道”。实际上有一个“Python Function App to Linux on Azure”模板可用。但是,它也包含部署阶段,我通常总是将所有与部署相关的内容放入我的“发布管道”。不过现在,我选择了“入门管道”。
实际上会弹出一个在线编辑器。在编辑器的顶部,您会看到存储库的名称和一个“azure-pipelines.yml”。单击“azure-pipelines.yml”重命名管道,以及 yaml-file 的名称,最终将出现在存储库的根目录中。
我已经提供了上述模板的一个版本,归结为必要的内容,并且可以使用 here。只需删除“启动管道”中已有的任何内容,并将 copy-paste pastebin 的内容放入管道中。
当你保存管道时,你可能想把它放在一个不同的分支而不是你的 master 分支(它会提示你这样做),然后创建一个 PR。当管道工作时接受 PR(您可以 运行 使用新创建的分支的管道)。当构建管道成功 运行s 且没有错误时,如果您导航到成功 运行 的概述(以红色突出显示),您应该能够看到已发布的工件。您可以单击并检查内容以检查它们是否符合预期。
发布
转到“版本”(以绿色突出显示,第一张图片)。从这里,您应该能够看到并单击“+ 新建”按钮。
它会立即提示您 select 您想要什么类型的工作。只需单击“空作业”即可开始。
首先选择要消耗的神器。单击左侧的“添加工件”框。从 drop-down 列表中找到您刚刚创建的管道。您可以配置要使用的版本(如果您有某些偏好),并为工件提供一个可以在整个发布管道中使用的别名。
接下来是设置你的舞台。您需要 3 个阶段:一个开发阶段,一个登台阶段,最后一个生产阶段。目前你应该有一个“第一阶段”。如果将鼠标悬停在舞台上方,您可以在框下方看到一个“+”符号。单击它以添加一个阶段。再次选择空作业。对新创建的舞台框重复此操作(悬停,单击 +,添加空作业)。
你现在应该有这样的东西:
让我们从配置阶段 1 开始。单击阶段(框本身),并将其命名为“开发”或您喜欢的名称。然后点击“1 job, 0 task”-link。单击“代理作业”框,并根据需要配置代理作业(确保代理下载您的工件,它可以在“工件下载”中配置)。
接下来,单击您刚刚配置的代理作业上的“+”号。根据提示,使用 search-bar 查找“Azure Functions”。请注意,有 3 个作业称为此。您想要 只是 的那个叫做“Azure Functions”。单击并配置新创建的作业。这里真的应该是straight-forward。在 linux 上选择函数应用程序,然后从列表中找到您的“开发”函数应用程序。默认情况下,“包或文件夹”应该类似于 $(System.DefaultWorkingDirectory)/**/*.zip
,它应该足够了,除非您对构建管道的工件进行了一些自定义。
你应该有这样的东西:
从“任务”下拉菜单(带有红色警告圆圈),您可以移至“第 2 阶段”(您当然会像对“阶段”一样重命名它“到“开发”)。由于您没有使用插槽,因此不幸的是,在两个不同的资源组中的 2 个功能应用程序之间无法进行交换 - 至少据我所知不是这样。因此您必须从“开发”阶段,您使用工件部署到暂存资源组中的函数应用程序。最后一个阶段“第 3 阶段”也是如此,您将部署到生产资源组中的函数应用程序。
分期和批准
我想,我们一直在等待什么。从带有阶段概览的图片中,您可以看到每个阶段在框的每一侧都有 2 个附加的“按钮”。带有闪电和用户图标(左)的情况,以及仅带有用户图标的情况。左边的是“pre-stage actions”,右边的是“post-stage actions”。在您的场景中,您可能希望为“Stage 2”/“Staging”和“Stage 3”/“Production”配置“pre-stage actions”。在这两种情况下,我都会添加“Pre-deployment 批准”,如下所示:
您可以添加特定的人或整个组。它将要求有人进入发布管道概述,然后批准下一阶段,然后再部署(或者更确切地说,该阶段在获得批准之前不会启动)。
哎呀,那是一个漫长的...我希望这消除了你的一些困惑,并且它对你有用。