接受GitLab合并请求后,如何触发Jenkins启动构建

时间:2015-09-30 20:27:44

标签: jenkins gitlab gitlab-7

我们花了几天时间尝试不同的方法来接受合并请求时触发Jenkins。不幸的是,我无法在我们的系统上工作。我尝试过Jenkins方面的不同插件来触发GitLab,但它们似乎也无法工作。添加参数化字符串并将令牌添加到URL的末尾,我已经尝试了所有这些 - 可能不正确,我不确定。

我想要一个很好的配置来告诉我我必须设置哪些设置以及使用哪些插件。我已经上传了大多数用于webhooks和合并请求插件的插件,但它们都没有真正起作用。

然后,接下来的问题是如何调试GitLab到Jenkins的内容?你看系统日志吗?那里似乎有很多东西,和/var/log/Jenkins/jenkins.log文件一样。

非常感谢任何帮助/建议。

GitLab版本:7.12.2 詹金斯版本:1.620

1 个答案:

答案 0 :(得分:0)

我知道这是一个老问题,但这是我使用declarative pipelines在GitLab CE 8.13.12和Jenkins 2.46.2上执行此操作的设置,以及Gitlab插件1.4.5和Gitlab Hook插件1.4.2 。这些步骤也可能适用于最新版本。

  • 两个单独的管道作业
    • 第一项工作专门针对MR构建
    • 第二个是主分支/回购,其中MR合并到
  • 两个作业都启用了构建触发器“在将更改推送到GitLab时构建”
    • MR作业启用了以下事件
      • 合并请求事件(并在推送到源和目标时重建)
      • 评论(和一些评论)
    • 主作业只启用了推送事件触发器,但也有高级选项来过滤分支(我只使用主人作为名称)

然后,管道脚本看起来像这样 MR

checkout ([
        $class: 'GitSCM',
       branches: [[name: "${env.gitlabSourceNamespace}/${env.gitlabSourceBranch}"]],
       extensions: [
         [$class: 'PruneStaleBranch'],
         [$class: 'CleanCheckout'],
         [
           $class: 'PreBuildMerge',
          options: [
         fastForwardMode: 'NO_FF',
            mergeRemote: env.gitlabTargetNamespace,
            mergeTarget: env.gitlabTargetBranch
          ]
         ]
       ],
       userRemoteConfigs: [
         [
           name: env.gitlabTargetNamespace,
          url: env.gitlabTargetRepoSshURL
         ],
         [
           name: env.gitlabSourceNamespace,
          url: env.gitlabSourceRepoSshURL
         ]
       ]
      ])

checkout([
        $class: 'GitSCM', 
        branches: [[name: '*/master']],
        extensions: [
         [$class: 'PruneStaleBranch'],
         [$class: 'CleanCheckout']],
        userRemoteConfigs: [[url: '<my-git-url>']]])

这给了我两份工作。 MR作业依赖于GitLab插件来定义要检出,合并和构建的源和目标存储库和分支。主作业只会构建主仓库。

最后一步是在GitLab中为repo配置webhook。当您在GitLab中制作webhook时,它会询问以下信息:

  • 端点URL(可在“构建触发器”部分的Jenkins作业中找到)
  • 事件(将Jenkins工作中的事件与此处匹配)
  • SSL验证(由您和您的网络配置决定)

你应该完成!