【发布时间】:2020-09-17 02:12:25
【问题描述】:
我正在使用 NX 工具来管理具有多个应用程序的 monorepo,但我正在努力了解如何使用 Azure 进行部署和发布管道。
免责声明:我对 Azure 和 devops 很陌生。
我的理解是这样的: 我创建了一个管道(不是发布管道,如果有任何意义,只是一个“常规管道”)并插入一个 yml 到它。此外,管道链接到 Azure Repos 上的存储库,这意味着每次我推送到此存储库时,它都会触发管道并运行 yaml 命令。 在这个命令上,我运行 lint、测试和构建。
这是我能做到也能理解的,下面的就比较晦涩了:
如果我在我可以调节的 master 上合并/合并,则构建作业应该创建一个工件。 现在我可以创建一个发布管道,它将在何时触发它链接到的回购将创建一个工件。然后,此发布管道可以将此工件发送到应用服务,该服务是应用所在的插槽。
好的,但我使用的是 monorepo,这意味着构建将生成多个应用程序,并且这些应用程序中的每一个都应部署到正确的应用程序服务。
经过一番研究,I found that 的总体思路是为每个应用创建一个发布管道。这些发布管道都链接到同一个 monorepo,但它们有一个过滤器,它是一个构建标签。 build 标签是在使用 yml 文件构建应用程序时添加的。
所以这些基本上是我对这一切的理解。现在是问题:
- 什么是构建标签,它存在于哪里?它是否以某种方式与工件相关联?
- 我们的想法是为每个工件创建一个构建标签,对吗?
- 我未能创建构建标签,我该怎么做?
-
压缩和发布工件的正确方法是什么?
这是我正在使用的 yaml:
jobs:
- job: Lint
steps:
- task: NodeTool@0
inputs:
versionSpec: '12.x'
displayName: 'Install Node.js'
- task: Npm@1
displayName: 'Npm install'
- pwsh: 'npm run nx affected -- --target=lint --parallel --base=origin/master --maxParallel=4'
displayName: 'Running lint'
- job: Test
steps:
- task: NodeTool@0
inputs:
versionSpec: '12.x'
displayName: 'Install Node.js'
- task: Npm@1
displayName: 'npm install'
- pwsh: 'npm run nx affected -- --target=test --parallel --code-coverage --base=origin/master --maxParallel=4'
displayName: 'Running tests'
- job: Build
steps:
- task: NodeTool@0
inputs:
versionSpec: '12.x'
displayName: 'Install Node.js'
- task: Npm@1
displayName: 'npm install'
- pwsh: 'npm run nx affected -- --target=build --parallel --base=origin/master --prod'
displayName: 'Running build'
- pwsh: |
npm run nx affected:apps -- --base=HEAD~1 --head=HEAD | grep -E '( - )(\w|-|\d|_)+' | sed -E 's/ - /##vso[build.addbuildtag]/g'
displayName: 'Adding build tags'
运行此程序时,测试、lint 和构建都在工作,但我认为它没有添加构建标签,这是日志:
好像什么都没有发生...如何正确添加标签并触发发布管道?
我还找到了这个 sn-p 来压缩和发布工件,但我不知道我是否可以使用它,因为在 monorepo 中我们应该 - 我认为 - 创建多个工件。
5) 所以最后一个问题是:我怎样才能创建多个工件,这甚至是一件好事吗?
非常感谢您的帮助,我知道这是一个很长很无聊的帖子,帮助菜鸟可能很无聊,但我坚持这个很长一段时间......
【问题讨论】:
-
您好,您有机会尝试以下解决方案吗?效果如何?
-
嗨,对不起,尽管信息量很大,但我没有花时间回答这篇文章。我自己找到了很多来回的解决方案,它看起来很像你的解决方案,除了第一部分,在我的解决方案中,我使用 vso.addBuildTags 在 yaml 文件中动态添加标签。我想找到一种解决方案来归档和发布受影响的应用程序,而不必为 yaml 中的每个应用程序手动执行它,我想循环访问受影响的应用程序变量并使用该循环的索引来找到正确的路径以便存档和发布。但看起来不可能。
标签: azure-devops monorepo