2015-09-30 115 views
1

我花了几天的时间尝试不同的方法来在接受合并请求时获取Jenkins触发器。不幸的是,我无法在我们的系统上得到任何东西。我尝试过不同的插件,从Jenkins的一面触发GitLab,但他们似乎也不工作。添加参数化的字符串并将标记添加到URL的末尾,我已经尝试过所有 - 可能不正确的顺序,我不确定。如何触发Jenkins在接受GitLab合并请求后启动构建

我想要一个很好的配置,告诉我我需要设置哪些设置以及使用哪些插件。我已经上传了大部分webhook和合并请求插件的插件,但没有一个真正起作用。

然后,接下来的问题是如何调试从GitLab传递给Jenkins的内容?你看看系统日志吗?这里似乎有很多东西,并且与/var/log/Jenkins/jenkins.log文件相同。

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

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

+0

你使用的是GitLab社区版还是企业版?如果您使用的是Enterprise Edition,则可以按照以下文档进行操作: http://docs.gitlab.com/ee/integration/jenkins.html它具有关于配置Jenkins CI服务的说明。不幸的是,Community Edition没有这项服务。 –

回答

0

我知道这是一个老问题,但这里是我的设置使用declarative pipelines上GitLab CE 12年8月13日和詹金斯2.46.2这样做,和Gitlab插件1.4.5和Gitlab钩子插件1.4.2。这些步骤也可能适用于最新版本。

  • 两个单独的管道作业
    • 第一任务是专门为MR建立
    • 第二个是用于主分支/回购其中MR被合并到
  • 两种作业有生成触发器“生成当更改被推送到GitLab”启用
    • MR作业有foll由于事件已启用
      • 合并请求事件(和推动重建源和目标)
    • 主作业不仅具有推送事件触发有效
    • 评论(以及一些评论),但也有在高级选项来过滤分支(我只用主的名字)

然后,管道脚本这个样子 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中配置webhooks以进行回购。当您在GitLab一个网络挂接,它会要求提供以下信息:

  • 端点URL(这是在詹金斯任务中发现了下生成触发部分)
  • 活动(符合从詹金斯作业到事件这里)
  • SSL验证(取决于你和你的网络配置)

而且你应该做的事!