自动触发Azure发布管道

时间:2019-04-02 07:03:16

标签: angular azure-pipelines azure-pipelines-release-pipeline azure-pipelines-build-task

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

建立管道

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

Build pipeline image

发布管道

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

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

Release pipeline image

触发构建

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

我尝试过的

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

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

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*键入过滤我的分支字段,然后按Enter(也显示在下图中)。

Build pipeline trigger image

为此,请@JukkaK。

1 个答案:

答案 0 :(得分:0)

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

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

然后根据标签触发发布