使用提交触发器在YAML文件中触发Azure Devops管道

使用提交触发器在YAML文件中触发Azure Devops管道,azure,azure-devops,yaml,azure-pipelines,Azure,Azure Devops,Yaml,Azure Pipelines,我有一个关于Devops中管道触发器的问题。 我和我的团队正在使用Azure Devops开发一个软件。 我们使用一个特定于分支的触发器,只在主分支中启动管道。YAML文件中的其他分支将被忽略 我问题的第一部分是,我们不知道如何在Git工具中通过提交消息触发管道。 例如:“我们在与主分支-->不同的分支中工作,没有任何管道正在运行。但我们只想为特定测试触发此分支中的管道一次。我们的方法是在提交文本中插入特定命令以触发管道。” 我的第二个问题是,是否可以在一个YAML文件的不同分支中运行不同的阶段

我有一个关于Devops中管道触发器的问题。 我和我的团队正在使用Azure Devops开发一个软件。 我们使用一个特定于分支的触发器,只在主分支中启动管道。YAML文件中的其他分支将被忽略

我问题的第一部分是,我们不知道如何在Git工具中通过提交消息触发管道。 例如:“我们在与主分支-->不同的分支中工作,没有任何管道正在运行。但我们只想为特定测试触发此分支中的管道一次。我们的方法是在提交文本中插入特定命令以触发管道。”

我的第二个问题是,是否可以在一个YAML文件的不同分支中运行不同的阶段。 这里又是一个例子:“在我们的不同分支中,我们只希望每次推送都运行单元测试。在我们的主分支中,我们希望运行单元测试,然后,我们希望构建我们的应用程序

到目前为止,我们在每次推送时都启动了管道,并在每次推送时都构建一个新的映像。但我们不希望这样,因为有些推送不起作用,我们只是推送它。我们想确定管道何时运行,哪个阶段运行

我希望你能理解我的问题。更多问题,请在这里评论。 谢谢

问题1:

<>你可以考虑使用这个方法。下面是一个例子:

trigger:
  branches:
    include:
    - master
  tags:
    include:
    - test.*
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
然后,在处理主分支时将触发管道,或者提交标记为
test.*

问题2:

您可以使用条件。以下是一个示例:

trigger:
  branches:
    include:
    - master
  tags:
    include:
    - test.*
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
将条件添加到stage中,然后stage将仅由
主分支触发

问题3:

到目前为止,我们每推一次都会启动管道,每次都会建立一个新的形象。但我们不希望这样,因为有些推不起作用,我们只是推它

你可以

只需将
[skip ci]
包含在提交消息或对 HEAD commit和Azure管道将跳过运行CI

更新1:

对于问题1,
test.
表示以
test.
开头的标记,例如
test.1
test.0.1
,等等。您可以将
test.
更改为任何您想要的内容

对于遇到的问题,您不能直接创建名为
test.*
的标记,因为标记名不能包含
*

为了避免混淆,您需要为提交创建一个标记来触发标记CI,而不是直接在提交文本中写入它

想法

在提交文本中插入特定命令以触发管道

我认为目前不支持,标记触发器是一种替代方案

单击以获取有关git标记的详细信息

更新2:

通过
master
分支或
1620到PipelineTrigger
分支触发阶段:

condition: or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), eq(variables['Build.SourceBranch'], 'refs/heads/1620-to-PipelineTrigger'))
每个阶段只能设置一个条件,但可以使用
()
创建更复杂的条件


单击以获取有关条件的详细信息和示例。

谢谢,标记触发器现在工作正常!对于条件,我还有另一个问题:我使用您的注释条件:and(successed(),eq(变量['Build.SourceBranch'],'refs/heads/master'))在除主分支外的每个分支中跳过此阶段。现在我的示例:我的分支名为1620 to PipelineTrigger Now我想在一个阶段中包括此分支。如何更改条件以适合我的特定分支名?@Luismari1请检查我的更新2!:)嗨,有更新!它现在完全工作,抱歉我的late答案。我还有一个关于标记触发的小问题:有没有办法在条件中实现标记触发?我现在有了两个条件,用于阶段应该工作的两个分支。但是当我想在另一个分支中运行阶段时,which不是两个条件之一,我想将注释实现为标记或作为提交。有没有一种可能的方法可以做到这一点?也许我应该创建一个不同的阶段,其中条件是(1/2)”,如果它不是我的两个分支之一(master,stable,…),那么变量应该设置为true。这是真的,我可以稍后再查。我希望的阶段是我们的构建脚本。在master/stable中,阶段应该始终构建,在我的其他分支(不是这两个分支)中,应该有一个opt-In模式。通常没有构建,但当我激活它时,然后构建。这是我的意图:'condition:or(变量['build.SourceBranch'],'refs/remotes/origin/master'),eq(变量['build.SourceBranch'],'refs/tags/BuildAndInstall'),eq(startsWith(变量['build.SourceBranch'],'refs/tags/BuildAndInstall'))'因此,我有两个分支条件,第三个触发器是我的标记触发器。在本例中,我的触发器被称为'BuildAndInstall'。您知道,如果它起作用了吗?:)您好,这个问题有更新吗?请让我知道我的答案是否能帮助您,并随时发表评论。:)只是提醒一下。