正确配置Jenkins GitHub Pull Request Builder下游

时间:2016-08-03 14:23:05

标签: git github jenkins ghprb

我尝试创建两个Jenkins作业,这两个作业都利用GitHub Pull Request Builder plugin来运行多个状态检查,但是我无法从下游作业中获取状态检查以显示在我的GitHub项目中。

以下是我想要设置的总结CI流程:

  1. 针对我的git存储库打开拉取请求,触发上游作业以在Jenkins中运行
  2. 上游根据构建报告其状态,如果SUCCESS,则应通过构建后操作调用下游作业
  3. 下游运行并报告自己的状态检查
  4. 第3步是我遇到问题的地方。 下游正常运行,但不会发布状态。我的GitHub项目设置的分支部分下的状态甚至不可用。我不确定GHPRB初始创建状态检查的方式,但是在控制台输出中有对上下文消息的引用:

    14:58:23 Started by upstream project "upstream" build number 209
    14:58:23 originally caused by:
    14:58:23  GitHub pull request #114 of commit f1ff2819a5308f7819275e732cf44a2cc2ec31dc, no merge conflicts.
    14:58:23 [EnvInject] - Loading node environment variables.
    14:58:23 Building on master in workspace /store/jenkins/jobs/downstream/workspace
    14:58:23  > git rev-parse --is-inside-work-tree # timeout=10
    14:58:23 Fetching changes from the remote Git repository
    14:58:23  > git config remote.origin.url <removed for privacy> # timeout=10
    14:58:23 Fetching upstream changes from <removed for privacy>
    14:58:23  > git --version # timeout=10
    14:58:23  > git -c core.askpass=true fetch --tags --progress <removed for privacy> +refs/pull/*:refs/remotes/origin/pr/*
    14:58:24  > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
    14:58:24  > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
    14:58:24 Checking out Revision eac390c51a1b8b591bfe879421bd5fad0421a1ec (refs/remotes/origin/master)
    14:58:24  > git config core.sparsecheckout # timeout=10
    14:58:24  > git checkout -f eac390c51a1b8b591bfe879421bd5fad0421a1ec
    14:58:24 First time build. Skipping changelog.
    14:58:24 [build] $ /store/jenkins/tools/hudson.tasks.Ant_AntInstallation/ant_1.8.2/bin/ant -DghprbStatusUrl= "-DghprbSUCCESSMessage=Packaging organization successfully cleaned" -DghprbStartedStatus=Undeploying -DghprbAddTestResults=false "-DghprbCommitStatusContext=Cleaning Packaging" "-DghprbERRORMessage=An error occurred during undeployment" -DghprbUpstreamStatus=true "-DghprbTriggeredStatus=Preparing destructive changes" "-DghprbFAILUREMessage=Packaging organization failed to clean properly" -DghprbShowMatrixStatus=false
    

    以下是两个Jenkins工作的相关配置部分:

    上游工作

    源代码管理:Git

    • 姓名:origin
    • Refspec:+refs/pull/*:refs/remotes/origin/pr/*
    • 分支说明符:${sha1}

    构建触发器

    • GitHub Pull Request Builder
      • 使用github挂钩进行构建触发✔︎
      • 在下游版本上显示构建错误? ✔︎
      • 使用自定义上下文消息传递
      • 触发器设置

    构建后操作

    • 构建其他项目:Downstream

    下游工作

    源代码管理:Git

    • 姓名:origin
    • Refspec:+refs/pull/*:refs/remotes/origin/pr/*
    • 分支说明符:*/master

    构建触发器

    • GitHub Pull Request Builder
        使用自定义上下文消息传递
      • 触发器设置

    构建环境

    • 使用自定义上下文和消息设置GitHub提交状态(必须使用GHPRB触发器配置上游作业)✔︎
      • 自定义上下文消息传递字段反映了触发器设置部分下列出的内容(我怀疑这些都是必需的,但目前似乎都没有工作)

    我错过了什么? 应该注意我没有安装Jobs DSL插件,所以我无法利用the extension that GHPRB provides

1 个答案:

答案 0 :(得分:12)

经过广泛的试验和错误,this comment阐明了我的问题。

我的问题的关键是下游没有收到GHPRB提供的必需环境变量。即ghprbGhRepositoryghprbPullIdghprbActualCommitsha1

两个作业的正确配置如下:

上游工作

源代码管理:Git

  • 姓名:origin
  • Refspec:+refs/pull/*:refs/remotes/origin/pr/*
  • 分支说明符:${sha1}

构建触发器

  • GitHub Pull Request Builder
    • 使用github挂钩进行构建触发✔︎
    • 在下游版本上显示构建错误? ✔︎
    • 使用自定义上下文消息传递
    • 触发器设置

构建

  • Trigger/call builds on other projects
    • 要构建的项目:Downstream
    • 预定义参数:
      • ghprbGhRepository=${ghprbGhRepository}
      • ghprbPullId=${ghprbPullId}
      • ghprbActualCommit=${ghprbActualCommit}
      • sha1=${sha1}

下游工作

源代码管理:Git

  • 姓名:origin
  • Refspec:+refs/pull/*:refs/remotes/origin/pr/*
  • 分支说明符:${sha1}

构建环境

  • 使用自定义上下文和消息设置GitHub提交状态(必须使用GHPRB触发器配置上游作业)✔︎