防止Jenkins作业使用git commit启动其他作业

时间:2019-09-30 18:39:00

标签: git jenkins jenkins-pipeline pipeline jenkins-groovy

我正在尝试创建一个Jenkins管道,该管道在较高级别上执行以下步骤:

  1. 发送构建通知
  2. 运行皮棉测试
  3. 运行CI测试
  4. 更新几个文件中的版本信息
  5. 使用git将更新提交到文件,创建标签并将更改推送到原始位置
  6. 将项目中的文件上传到另一个系统
  7. 发送通知

我希望在对特定分支进行提交时执行此管道。我现在正在工作,但是问题是,当作业在构建过程中提交新更改时(在上面的步骤5中),它启动了一个新构建并实质上进入了无限循环。

我知道现在这是设计使然,但是是否有办法阻止新的构建作业执行?我可以在Jenkins管道中做一些事情来防止新提交启动新的Jenkins作业,还是需要整个工作流程的重做?

1 个答案:

答案 0 :(得分:0)

您可以使用generic-webhook-plugin

例如,只要开发人员向分支机构提交某些内容,Jenkins中的GitHub webhooks就会触发构建,在每个webhook中,我们都有以下信息

git repository name
branch which was changed
commit id
commit message
commit author
etc ...

避免循环

  • 将Jenkins提交ID保存到文件并将文件添加到git ignore
  • 使用通用Webhook触发器从推送读取远程提交ID
  • 比较本地文件提交ID和远程提交ID
  • 如果相同,则表示来自Jenkins的提交,如果不是,则表示不是来自Jenkins的提交。

以下代码段可能会有所帮助或相应地进行更改,因此不会产生外观

#!/bin/bash
webhook_commit_id=$commit
commit_by_jenkins=commit_by_jenkins.txt
if [ ! -f $commit_by_jenkins ]
then
    echo "creating local file name commit_by_jenkins.txt, please add this file to git ignore"
    touch commit_by_jenkins.txt
fi
jenkins_commit=`cat commit_by_jenkins.txt`
if [ "${webhook_commit_id}" == "${jenkins_commit}" ]; then 
    echo "commit by jekins server, ignoring commit"
else
      echo "commiting code from jenkins servver"
      git add -A && git commit -m "commit by jenkins server" && git rev-parse HEAD > commit_by_jenkins.txt
fi