Git 如何检测Jenkins通过标签推送开始工作?

Git 如何检测Jenkins通过标签推送开始工作?,git,jenkins,Git,Jenkins,我正在用詹金斯制作CI/CD。Git存储库有一个Jenkins钩子,所以它会在每次推送时触发新的构建,其中包括标记 我的构建由标记触发,生成以下输出 commit notification 282aa9df9bc037df26f82d0aaf7d65e57b3c6c00 Building in workspace /var/jenkins_home/workspace/testproject > git rev-parse --is-inside-work-tree

我正在用詹金斯制作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)触发的,它是一个标记,但稍后,它被转换为commit 18dea36(2),从那时起,只有一个提交信息可供用户使用(例如:env变量)。这是一个有效的提交,但标记信息不再可用

我如何知道一个构建是由一个标记触发的,如何获取该标记信息并能够在管道中使用它

编辑:只是澄清一下-我正在寻找一个选项,可以让一个作业触发所有推送上的构建,但如果有标记,则会执行其他步骤(或抑制其他步骤)

我如何知道生成已由标记触发

只能由标记触发作业,如中所示


从这里开始,构建使用的任何提交都是从标记中获得的,这意味着您可以这样做。

仅使用Jenkins似乎不可用。有两种可能的解决办法

  • 源上的过滤器通知-Bitbucket、GitHub等可能仅在发生某些事件时,或在除某些事件以外的所有事件时,才能通知Jenkins。此类事件之一可能是标记创建
  • 如果上面不是一个选项,那么编写一个模拟Jenkins的过滤服务。Git服务器将向过滤服务发送通知,然后您可以根据自己的喜好对其进行过滤,并向real Jenkins发送(或不发送)通知
  • 前者微不足道,但并不总是可用。后者需要一点工作(但实际上没有那么多),并提供了很大的灵活性。

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

    buildingTag—一个简单的条件,用于检查管道是否正确 针对SCM中的标记运行,而不是针对分支或特定 提交引用


    谢谢你的回答,但我知道这一点。我会更新这个问题。我的意思是-获得一个作业,但在标记的情况下运行额外的步骤。@然后,我回答的第二部分应该是相关的:从提交中,您可以检查是否有标记。只有当您建议的,生成可以由标记推送触发时,它才是相关的。看看更新的问题-我需要始终触发构建。在这种情况下,在使用标记将新提交推送到master之后,Jenkins将触发两个构建。Git Descripte会让您知道这个提交上同时存在构建签出主提交和标记。你会如何区分?或者在提交推送时发布,但仅在标记推送时发送通知?现在,詹金斯确切地知道是哪个objectId启动了构建。如果詹金斯知道——我也想知道。