将标签推送到外部 git 不会触发 Azure Pipelines CI

Posted

技术标签:

【中文标题】将标签推送到外部 git 不会触发 Azure Pipelines CI【英文标题】:Azure Pipelines CI not triggered by pushing tags to external git 【发布时间】:2020-06-30 19:10:02 【问题描述】:

我在组织的本地 GitLab 服务器上有存储库,并且想要触发构建管道,然后将触发发布管道并发布到暂存/生产虚拟机。

我在 microsoft docs、SO 和大量博客上阅读了很多文章,您可以通过提供分支过滤器(如 refs/tags/v*)的标签来触发管道。 YAML 配置有额外的标签专用部分,但是作为“其他 git”连接的 git 存储库不支持 YAML。

而且那个标签触发器永远不会起作用。在我设置触发 UI 后,我只显示“v*”,因此它理解 refs/tags 具有特殊含义。我可以手动运行管道,指定确切的标签,比如refs/tags/v1.0-test,它可以工作。但永远不会自动启动。分支触发器可以正常工作。

我已经尝试过的:

refs/tags/v* 设置包含过滤器 - 不起作用 为refs/tags/exacttagname 设置包含过滤器 - 不起作用 为refs/tags/v* 设置一个过滤器,为master 设置另一个过滤器 - 仅对主控触发​​li> 设置包括refs/tags/v** 的过滤器并排除refs/heads/*refs/remotes/* 的过滤器 - 不起作用

我尝试推送提交,然后推送标签。尝试使用git push ---follow-tags 在一个请求中推送提交和标记。尝试为较旧的提交推送标签。这些都不起作用。

This issue 去年夏天在 azure 方面解决了同样的问题,但所有 cmets 都在 GitHub 集成方面。所以也许它仍然被“其他 git”或其他东西破坏了。

有什么帮助吗?

【问题讨论】:

【参考方案1】:

我测试并得到了相同的结果,其他 git 的标签触发器不起作用。您可以submit a feature request(单击建议功能并选择 Azure devops)为 Micrsoft 开发团队支持 gitlab 存储库的标记触发器。例如,请检查this thread。

作为解决方法,您目前可以使用多个代理作业来实现上述目标。

您可以在原始代理作业之前添加另一个代理作业以运行脚本任务,并在原始代理作业中添加对它的依赖。脚本任务将检查是否存在与当前提交关联的标签。如果标签退出,则脚本任务将通过,并且将运行以下代理作业。或者脚本任务失败,会跳过后面的代理作业。

具体步骤如下:

    添加具有单个 Powershell 任务的代理作业。检查下面的屏幕截图。

    在 powershell 任务中运行以下内联脚本以检查标签

    $tags = git describe --tags  $(Build.SourceVersion)     
    
    if($($tags) -notmatch 'v.')exit 1 #fail the task if the tag doesnot match v*
    

    在原来的代理作业中,将dependencies添加到上面的代理作业中。

    转到触发器选项卡并过滤所有分支。

【讨论】:

在创建功能请求时,我发现了existing one(但讨论本身是关于 Bitbucket repo)。也问了关于那里的支持的问题。 @LeviLu-MSFT 所以触发标签适用于 yaml 管道,但不适用于经典管道?

以上是关于将标签推送到外部 git 不会触发 Azure Pipelines CI的主要内容,如果未能解决你的问题,请参考以下文章

Azure Visual Studio 2019 无法推送到 Azure DevOps Git

如何从 Cake 构建任务将标签推送到 Bamboo 中的 Bitbucket Git 存储库?

将更改推送到特定分支时不会触发多分支管道

如何避免在codemagic中从git触发构建

推送到 git 存储库时避免自动工作项链接

是否可以在应用程序服务器上设置 git 客户端以自动进行版本控制并将配置文件推送到 Azure Repo?