如何从GitHub拉取请求触发Jenkins 2.0管道作业

时间:2016-04-25 20:30:56

标签: github jenkins jenkins-pipeline jenkins-2

看起来GitHubPullRequestBuilder与Jenkins v2.0管道作业不兼容。

如何配置从GitHub拉取请求事件触发的管道作业?
关于这个主题的文档很少,我找不到任何这方面的例子。或者,最好在GitHub中创建一个Web挂钩来触发PR事件的管道作业?

4 个答案:

答案 0 :(得分:34)

我有类似的问题。这对我有用

预REQ

  • Jenkins ver。 2+(我使用的是Jenkins 2.60)
  • Github(或Githhub 企业)帐户
  • 你的github和Jenkins必须能够交谈 彼此。

在Github上

  1. 创建具有相关权限的github个人访问令牌(PAT)。
  2. 对于您的回购,请创建一个webhook
    • 网址为YourJenkinsURL/github-webhook/
    • 选择“让我选择个别活动”并选中“提取请求”
  3. Jenkinsfile 添加到repo的根文件夹中。出于测试目的,您可以将内容作为基本的hello世界,如下面的
  4.     pipeline {
            agent any
            stages {
                stage('Test') {
                    steps {
                        echo 'Hello World ...'
                    }
                }
            }
        }
    

    On Jenkins

    1. 安装 GitHub Pull Request Builder 插件。 (你还需要“Github”插件,但通常应该作为Jenkins ver 2 +的一部分安装)
    2. 詹金斯 - 证书
      • 将github个人访问令牌(PAT)添加为“秘密文本”凭证。
      • 将github用户名密码添加为'username-password'凭证。
    3. 管理Jenkins - 配置系统
      • Github - Github服务器:这是Github插件的一部分。添加一个github服务器。 'API网址'默认为https://api.github.com。如果您使用的是企业github,请使用/ api / v3替换为enterprise github url。对于凭证,请选择PAT选项。测试连接。检查“管理挂钩”。
      • GitHub Pull Request Builder:对于'GitHub Server API URL',使用Github Server部分中指定的相同URL。将“共享密钥”留空。对于凭据,请使用“用户名 - 密码”凭据。测试凭据以确保其正常工作。在我的设置中,选中了“自动管理webhooks”。
    4. 管道工作
      • 使用“管道”选项创建新项目。注意:这是vanilla Pipeline作业,而不是Multibranch Pipeline。
      • 一般部分:检查'Github项目' - 项目URL:输入您的github repo url
      • 构建触发器:检查'GitHub Pull Request Builder'
        • 对于'GitHub API凭据'选择您在'管理Jenkins - 配置系统'屏幕中为GitHub拉取请求构建器设置的选项
        • 对于管理员列表:添加您的用户名
        • 选中使用github挂钩进行构建触发
      • 管道:
        1. 从SCM中选择“管道脚本”。请注意,这假设您的仓库的根文件夹将包含“Jenkinsfile”
        2. SCM:选择'Git'
        3. 存储库 - 输入repo详细信息。对于凭据,请使用基于“用户名 - 密码”的凭据。
        4. 点击高级,然后将refspec添加为+refs/pull/*:refs/remotes/origin/pr/*
        5. 分支 - 应为${sha1}
        6. 脚本路径:默认为 Jenkinsfile ,保持原样。
        7. 轻量级结账 - 取消选中此项(https://github.com/jenkinsci/ghprb-plugin/issues/507
    5. 就是这样。你们都准备好了。在您的仓库的主分支上创建PR现在应该触发您的Jenkins管道作业

      一些观察

      • 从github重新发送PR的webhook有效负载不会触发管道但是打开新的PR甚至在github上重新打开已关闭的PR,触发管道作业
      • 在管道作业配置中,如果选择“管道脚本”并将管道脚本粘贴到那里,则作业不会触发!!!

答案 1 :(得分:2)

使用Pipeline和GitHub拉取请求最直接的方法是将脚本放在名为Jenkinsfile的存储库中,然后安装 GitHub Branch Source 插件。 Documentation

答案 2 :(得分:2)

简而言之,流程可以是这样的:

  1. 您将管道创建为代码并将其保存在项目根目录中名为Jenkinsfile的文件中。该代码应描述您的项目将如何构建。请参阅此处以获取示例:https://jenkins.io/doc/pipeline/examples/

  2. 然后您应该在Jenkins中创建一个新的“Multibranch Pipeline Project”项目。您应该对其进行设置,以便扫描步骤1的回购。

  3. 现在每当你在第1步回购时打开一个新的PR分支时,分支将被检出并将根据其中包含的Jenkinsfile指令构建。您可以根据需要设置更多条件以及何时构建。

  4. 注意:

    1. “Multibranch Pipeline Project”示例文档:https://jenkins.io/doc/book/pipeline-as-code/(向下滚动到Multibranch Pipeline Projects)

    2. 请记住,在赞美公关之后获取插件以建立公关不起作用。这里有一个讨论分析:https://github.com/jenkinsci/gitlab-plugin/issues/298有一些解决方法(在讨论中也有描述),但设置起来非常混乱。

答案 3 :(得分:0)

按照以下步骤在GitHub上生成的Pull请求上自动触发Jenkins作业

  1. 在GitHub上创建一个Web挂钩,即http:/// generic- webhook-trigger / invoke
  2. 内容类型:application / json
  3. 选择“拉取请求”作为事件现在完成github配置部分。

Jenkins工作配置

  1. 在Jenkins中下载通用Webhook触发器

  2. Jenkins上的Git Hub配置

Git Hub Configuration

7。在jenkins上选择通用Webhook触发器 8。Generic Webhook Trigger Configuration on Jenkins,然后按照步骤9

9。执行完第7步后,Jenkins作业将在PullRequest上触发 10,需要步骤8才能从Pull Request Payload中获取信息 11。Branch configuration inside Generic Webhook Trigger to get Branch details from Pull Request

谢谢