如何检测Jenkins开始使用标签推送工作?

时间:2018-03-26 00:35:09

标签: git jenkins

我正在使用Jenkins作为CI / CD。 Git存储库有一个Jenkins钩子,因此它会在每次推送时触发新的构建,包括标记。

我的构建由标记触发,产生以下输出。

    commit notification 282aa9df9bc037df26f82d0aaf7d65e57b3c6c00
    Building in workspace /var/jenkins_home/workspace/testproject
    > git rev-parse --is-inside-work-tree # timeout=10
    Fetching changes from the remote Git repository
    > git config remote.origin.url ssh://GIT-HOST/PRJ/REPO.git # timeout=10
    Cleaning workspace
    > git rev-parse --verify HEAD # timeout=10
    Resetting working tree
    > git reset --hard # timeout=10
    > git clean -fdx # timeout=10
    Fetching upstream changes from ssh://GIT-HOST/PRJ/REPO.git
    > git --version # timeout=10
    > git fetch --tags --progress ssh://GIT-HOST/PRJ/REPO.git +refs/heads/*:refs/remotes/origin/*
(1) > git rev-parse 282aa9df9bc037df26f82d0aaf7d65e57b3c6c00^{commit} # timeout=10
(2) > git branch -a -v --no-abbrev --contains 18dea36c9ada06c1c176b8864bb28166e2bdac3f # timeout=10
    Checking out Revision 18dea36c9ada06c1c176b8864bb28166e2bdac3f (tagtag, origin/tagtag)
    > git checkout -f 18dea36c9ada06c1c176b8864bb28166e2bdac3f

正如您所看到的,构建由282aa9d(1)触发,这是一个标记,但稍后,它被转换为提交18dea36(2),从那时起只有一个提交信息可供用户使用(例如: env变量。)这是一个有效的提交,但标签信息不再可用。

我如何知道标记已触发构建,获取标记信息并能够在管道中使用它?

编辑:只是为了澄清 - 我正在寻找一个可以触发所有推送构建的作业的选项,但是如果标签确实执行了其他步骤(或者禁止其他步骤。)

3 个答案:

答案 0 :(得分:1)

似乎仅凭詹金斯无法使用。有两种可能的解决方案。

  1. 源过滤器通知-Bitbucket,GitHub等可能仅在某些事件或除某些事件之外的所有事件中才能通知Jenkins。标签创建就是这类事件之一。
  2. 如果以上都不是选项,请编写一个可以模仿詹金斯的过滤服务。 Git服务器会将通知发送到过滤服务,然后您可以根据需要过滤它,然后将通知发送(或不发送)到真正的Jenkins。

前者是微不足道的,但并不总是可用。后期需要一些工作(但实际上并不需要那么多),并且具有很大的灵活性。

答案 1 :(得分:0)

  

我如何知道标记触发了构建

您可以按标记触发的作业,例如this setup

从那里开始,构建使用的任何提交都是从标记中获取的,这意味着您可以find back the tag from the commit

答案 2 :(得分:0)

有一个新的“ when”参数:buildingTag。

  

buildingTag-一个简单的条件,仅检查管道是否为   针对SCM中的标签而不是分支或特定   提交参考。

https://jenkins.io/blog/2018/04/09/whats-in-declarative/