我有一个关于 DevOps 中 Pipline 触发器的问题。 我和我的团队正在使用 Azure DevOps 来开发软件。 我们使用分支特定触发器,仅在主分支中启动管道。 YAML 文件中的其他分支将被忽略。
我的问题的第一部分是,我们不知道如何通过 Git 工具中的提交消息触发管道。 例如:“我们在与 Master 分支不同的分支中工作 --> 没有管道正在运行。但是我们希望仅触发此分支中的管道进行一次特定测试。我们的方法是在触发管道的提交文本。”
我的第二个问题是,是否可以在一个 YAML 文件中的不同分支中运行不同的阶段。 这里又是一个例子:“在我们不同的分支中,我们只想在每次推送时运行我们的单元测试。在我们的主分支中,我们想要运行我们的单元测试,然后,我们想要构建我们的应用程序。
到目前为止,我们在每次推送时都会启动管道并每次都会构建一个新图像。但我们不希望这样,因为有些插入不起作用,而我们只是插入它。我们想要决定管道何时运行以及哪个阶段运行。
希望您能理解我的问题。如有其他问题,请在此发表评论。 谢谢
最佳答案
问题1:
您可以考虑使用tag triggers去做这个。这是一个例子:
trigger:
branches:
include:
- master
tags:
include:
- test.*
然后,当在 master 分支上工作或提交标签为 test.*
时,将触发管道。
问题2:
您可以使用条件。这是一个例子:
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
将条件添加到您的阶段,然后该阶段将仅由master
分支触发。
问题3:
So far, we started the pipeline at every push and build a new image everytime. But we dont want that, because some pushes aren't working and we just push it.
您可以skip CI for individual commits .
Just include
[skip ci]
in the commit message or description of the HEAD commit and Azure Pipelines will skip running CI.
更新1:
对于问题1,test.*
表示以test.
开头的标签,例如test.1
、 test.0.1
,等等。您可以将 test.*
更改为您想要的任何内容。
对于您遇到的问题,您无法直接创建名为test.*
的标签,因为标签名称中不能包含*
。
为了避免混淆,需要为提交创建一个标签来触发标签CI,而不是直接写在提交文本中。
想法
insert a specific command in the commit text to trigger the pipeline.
我认为目前不支持,标签触发器是一种替代方案。
点击this document有关 git 标签的详细信息。
更新2:
通过master
分支或1620-to-PipelineTrigger
分支触发阶段:
condition: or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), eq(variables['Build.SourceBranch'], 'refs/heads/1620-to-PipelineTrigger'))
每个阶段只能设置一个条件,但您可以使用 and
、or
和 () 创建更复杂的条件
.
点击this document获取有关条件的更多详细信息和示例。
关于azure - 使用提交触发器在 YAML 文件中触发 Azure Devops Pipeline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67197315/