Jenkins简单流水线未被Github推送触发。

12

在此输入图像描述我创建了一个名为“pipelinejob”的Jenkins流水线作业,其中包含以下脚本:

pipeline {
    agent any
    
    stages {
        
        stage ('Setup'){
            steps{
                //echo "${BRANCH_NAME}"
                echo "${env.BRANCH_NAME}"
                //echo "${GIT_BRANCH}"
                echo "${env.GIT_BRANCH}"
            }
        }
    }
}
  1. 在“常规”下,我选择了“GitHub 项目”,并在表单中插入了我的公司的 GitHub 链接:

https://github.mycompany.com/MYPROJECTNAME/MY_REPOSITORY_NAME/

  1. 在“构建触发器”下,我选中了“为 GITScm 轮询启用 GitHub 钩子触发器”

  2. 我创建了一个名为“simplejob”的简单任务,并按照 1) 和 2) 中的配置相同

  3. 在我的公司的 GitHub 上,我创建了一个名为“jenkins_url/jenkins/github-webhook/” 的 Webhook

  4. 我在“MY_REPOSITORY_NAME”中的“mybranch”提交了更改

  5. 我的简单任务“simplejob”被触发并成功构建

  6. 我的流水线任务“pipelinejob”没有被触发

  7. 在 Jenkins 日志中,我看到以下内容:

Sep 12, 2019 2:42:45 PM INFO org.jenkinsci.plugins.github.webhook.subscriber.DefaultPushGHEventSubscriber$1 run
Poked simplejob

关于我的"pipelinejob"没有任何消息。

请您指引我下一步需要检查什么?

P.S. 我已经手动成功执行了我的"pipelinejob"

4个回答

20

之前的解决方案都不适用于我,浪费了我两天的工作时间。 :-(
最终我在另一个论坛上找到了解决方案:
问题在于如果你使用存储在GitHub中的Jenkinsfile以及项目源代码,则必须在Jenkinsfile本身中配置此触发器,而不是在Jenkins或项目配置中。不要在Jenkins或项目配置中配置触发器,而是在Jenkinsfile中添加一个如下的triggers {} 块:

pipeline {
  agent any
  triggers {
    githubPush()
  }
  stages {
...
  }
}

然后...

  • 将您的Jenkinsfile推送到GitHub
  • 手动运行一次构建,让Jenkins知道您要使用此触发器。
    您会注意到,“GitHub挂钩触发GITScm轮询”复选框最后将被选中!
  • 重新启动Jenkins。

下一次推送应该最终会触发自动构建!


1
虽然我们在Jenkins文件中添加触发器后不需要手动构建,也不需要重新启动(至少在我的情况下),但这是一个有用的答案。 - Ajay Sharma
我有一个失败的工作,所以我不得不返回到一个简单的Jenkinsfile,首先让工作通过,不知道这是否是关键-通过的工作? - thoni56
我现在明白为什么我必须手动构建:这是因为我的项目分支源配置不正确:它被设置为一个git分支源。将其更改为github分支源后,情况开始变得更好了 :-) - Jean-François Larvoire
救了我的一天... 不需要重新启动就能工作。 - Nurhun
githubPush触发器在哪里有文档?我找不到它! - trebor

7
在你的流水线作业的左侧窗格中,单击GitHub Hook log。如果它显示'Polling has not run yet',则在 Jenkins 注册接收钩子之前,您需要手动触发流水线作业一次。
从此,该作业应自动触发 GitHub 推送事件。

谢谢您的评论Dibakar。我已经构建了两次作业,在GitHub日志中仍然显示“尚未运行轮询”。我已经附上了一张图片。 - Dim Malt
请确保您在定义源代码管理器(SCM)和构建分支时,在仓库URL的末尾不要遗漏.git,并且所指定的构建分支格式应为/refs/heads/<branch> - Dibakar Aditya
请查看我原帖中的第8点。Github的钩子已被Jenkins接收,但Jenkins只触发了我的“simplejob”,而没有触发我的“pipelinejob”。关于您的第二条评论,我也会添加.git,但是在管道作业中,关于要构建的分支没有选项。 - Dim Malt
必须放在 Pipeline script from SCM 下面。 - Dibakar Aditya
请问您能否详细说明一下吗? - Dim Malt
显示剩余5条评论

3
我找到了一个关于这个问题的答案,可以通过脚本化流水线文件来实现。我们需要在Jenkins文件中声明Github推送事件触发器,如下所示。
properties([pipelineTriggers([githubPush()])])

node {
        git url: 'https://github.com/sebin-vincent/Treasure_Hunt.git',branch: 'master'
        stage ('Compile Stage') {

            echo "compiling"
            echo "compilation completed"
        }

        stage ('Testing Stage') {

            echo "testing completed"
            echo "testing completed"
        }
        stage("Deploy") {

                echo "deployment completed"
                        }
            }
}

声明应位于第一行。

git url:应该触发流水线的URL。

branch:应该触发流水线的分支。当您将分支指定为master并更改其他分支(如develop或QA)时,不会触发流水线。

希望这能帮助寻找Jenkins脚本化管道相同问题答案的人 :-(。


1
忘了提到,我们需要通过手动构建来预热Jenkins,只有在第一次之后它才能执行自动触发。 - sebin vincent

-1

问题在于,每当您为由github-webhook触发的git push创建管道作业时,首先需要手动构建一次管道作业。如果成功构建,则Jenkins会在接收到钩子时将其注册以进行poke。从下一个git push开始,您的管道作业将自动触发。

注意:还要确保第一次手动构建的管道作业应该成功构建,否则Jenkins将不会poke它。如果构建失败,则永远无法再次触发作业。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接