微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Azure Devops Release Pipeline 的 Azure 静态 Web 应用 (SWA) 步骤与 dotnet api

如何解决Azure Devops Release Pipeline 的 Azure 静态 Web 应用 (SWA) 步骤与 dotnet api

我尽可能地遵循持续交付的基本原则:“一次构建,随处部署。”

TL;DR

在 Azure Devops Release Pipeline 的 SWA 步骤中:有没有办法让 Oryx 不构建 api 或识别它是一个 dotnet 项目?

我更喜欢使用 Azure Devops 进行部署,而不是当今的任何其他产品,因为 Release Pipeline 易于使用,产品所有者或项目经理可以在不同环境中进行部署时进行批准和控制。此外,这些审批者只需获得“利益相关者”许可证,无需支付任何费用。即使 GitHub actions 拥有此功能,我仍然需要向用户颁发企业许可证。

我更希望有一个用于 Azure 静态 Web 应用 (SWA) 的工作流,就像我为其他所有工作一样:

  1. 代码推送到 GitHub 存储库中的“main”分支
  2. Azure Devops CI 管道开始构建
  3. 构建 Angular 前端代码并将其保存到目录 $(Build.ArtifactStagingDirectory)/web
  4. 构建 dotnet 函数后端代码并将其保存到目录 $(Build.ArtifactStagingDirectory)/api
  5. 发布可用于发布管道的构建工件
  6. 发布管道 (CD) SWA 步骤将获取工件并将它们部署到 Azure SWA 环境

我知道 Azure DevOps 中的 SWA 发布步骤仍在 0.X 版中,并且已经注意到它随着时间的推移而发展。让我描述一下我的经历以及它是如何演变的:

  1. 一个月前,由于 Azure SWA 令牌不可用,它无法工作
  2. 问题得到解决,我注意到它只能在 Linux 主机上运行(没什么大不了的)
  3. 运行 SWA 步骤的 docker 容器会出现以下错误

docker:来自守护进程的错误响应:OCI 运行时创建失败:安装无效 {Destination::/working_dir 类型:bind 来源:/var/lib/docker/volumes/3b6743ba34608e986186d5057ae6cd4ed36a773d5ca9c9f2cb5fa8894f 挂载目标:/var/lib/docker/volumes/3b6743ba34608e986186d5057ae6cd4ed36a773d5ca9c9f2cb5fa8894f /working_dir 不是绝对的:未知。

  1. 解决此问题,只需使用以下代码在 SWA 步骤之前添加 Bash 步骤:(此处感谢 Claire Novotny:https://github.com/microsoft/azure-pipelines-tasks/pull/14807#issuecomment-868593099
# Set this variable as the AzureStaticWebApp task is hard coded to read it.
echo '##vso[task.setvariable variable=BUILD_SOURCESDIRECTORY]$(System.DefaultWorkingDirectory)'
  1. 我认为最后一个问题是 Microsoft Oryx(发布管道中 SWA 步骤背后的构建引擎)想要构建 api 或识别 已编译的语言。无论我做什么,我都无法让 Oryx 识别出它是一个 dotnet 项目并且它认为节点:

Oryx 无法确定构建步骤。继续假设此文件夹中的资产已经构建。如果这是意外行为,请联系支持人员。

无法检测到函数语言。语言将认为节点。

这里有 Oryx 的文档:https://github.com/microsoft/Oryx/blob/master/doc/configuration.md#oryx-configuration 确实指出了 Oryx 可以被告知它是什么项目类型的可能性(在我的情况下是 dotnet),请参阅 PLATFORM_NAMEPLATFORM_VERSION 设置。我假设我将它放在发布管道中的“Api Build Command”字段中,看起来 Oryx 可以识别它,但仍然想要识别模式并认回到节点。 >

--platform dotnet --platform-version 3.1

我现在的解决方法是不在 CI 管道中构建 dotnet 函数应用程序,而是让 Oryx 在我每次需要将其作为 CD 管道的一部分部署到环境时构建它。这打破了我通过任何其他 Azure 资源部署实现的持续交付的“一次构建,随处部署”原则,我想知道如何让 Oryx 不构建它,而是重用已经构建和编译的工件。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。