自动触发 Azure 发布管道

Automatically triggering an Azure release pipeline

我正在设置 Azure Pipelines 以构建和发布一个包含我们开发的一些库的 Angular 项目,但我在理解它的某些部分时遇到了一些问题,特别是触发发布构建和发布库的管道。我一直在阅读 this guide 以获取有关如何设置它的提示。

构建管道

目前 Angular 项目包含两个库。我已经创建了两个构建管道,分别安装库的依赖项、构建其中一个库、存档构建文件夹,并将存档发布到 $(Build.ArtifactStagingDirectory)。据我了解,这应该使其可用于构建管道。在构建管道中没有做任何其他事情。

Build pipeline image

发布渠道

接下来,我创建了一个发布管道。在管道上,我添加了一个工件,将源类型设置为 Build,并选择了一个构建管道。我在工件上启用了 Continuous deployment trigger,并设置了 refs/tags/v*build branch filter,因为我正在尝试从标签构建.

然后,在舞台上,我添加了一个 Extract files 任务,其中 目标文件夹 设置为 $(System.DefaultWorkingDirectory)\extracted。之后,我添加了一个 npm 任务,其中 Command 设置为 publish 并且 Working 文件夹包含 package.json 设置为 $(System.DefaultWorkingDirectory)\extracted,并将注册表设置为 Azure Artifacts 源。

Release pipeline image

触发构建

如上所述,如果我向存储库添加标签,发布管道不会触发。

我试过的

我尝试将发布管道中工件上的 CD 触发器更改为 master 分支并提交到该分支,但这也没有触发发布管道。

如果我 运行 手动构建管道,发布管道 运行s,但失败并显示错误

error enoent ENOENT: no such file or directory, open 'D:\a\r1\a\extracted\package.json'

但这似乎只是我对已发布存档的最终位置的误解。

我希望发生的事情

当我将版本标签添加到存储库时,运行 的发布管道。

对我来说最好的解决方案是,如果我可以在 Angular 项目中以不同的版本号发布两个库,但我不确定该怎么做,至少如果我使用标签则不会触发发布(标签将是 v0.0.1,因此如果一个库的版本为 0.0.3 而另一个库的版本为 0.0.1 则没有意义)。

第二好的选择是我可以同时发布这两个库并让它们保持相同的版本号。

感谢任何帮助和提示。如果缺少任何信息,请告诉我。

编辑 - 解决方案

我想我误解了发布管道上的触发器是如何工作的。

缺少的部分是在标签的构建管道上添加触发器。对于基于设计器的构建,我不清楚这是否可以完成,因为您只是在构建管道触发器的分支过滤器的下拉列表中显示了分支,但您可以简单地键入 refs/tags/v*Filter my branches 字段,然后按回车键(也如下图所示)。

Build pipeline trigger image

感谢@JukkaK。

对于构建,请参阅此博客底部的更新 post:

https://edsnider.net/2018/11/14/detecting-git-tag-pushes-in-azure-devops.html

不确定如果您无法使用基于 yaml 的构建,构建设计器将如何工作,但我会尝试一下简单的 "v*" 或 "refs/tags/*"。如果这些不适用于设计者,一种规避问题的方法可能是使用以下条件标记构建(可能使用 https://marketplace.visualstudio.com/items?itemName=colinsalmcorner.colinsalmcorner-buildtasks):

and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))

然后根据标签触发发布