首页 > 解决方案 > 自动触发 Azure 发布管道

问题描述

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

构建管道

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

构建管道映像

发布管道

接下来,我创建了一个发布管道。在管道上,我添加了一个工件,将源类型设置为Build,然后选择了一个构建管道。我在工件上启用了持续部署触发器,并设置了一个构建分支过滤器refs/tags/v*因为我正在尝试从标签构建。

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

发布管道镜像

触发构建

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

我试过的

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

如果我手动运行构建管道,则发布管道会运行,但会因错误而失败

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

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

我希望发生的事情

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

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

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

任何帮助和提示表示赞赏。如果缺少任何信息,请告诉我。

编辑 - 解决方案

我想我误解了发布管道上的触发器的功能。

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

构建管道触发映像

这要归功于@JukkaK。

标签: angularazure-pipelinesazure-pipelines-release-pipelineazure-pipelines-build-task

解决方案


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

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/'))

然后根据标签触发发布


推荐阅读