1

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

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

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

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

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

4

1 回答 1

0

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

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

然后,管道脚本看起来像这个 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 作业的 Build Triggers 部分下找到)
  • 事件(将 Jenkins 工作中的事件与此处匹配)
  • SSL 验证(取决于您和您的网络配置)

你应该完成了!

于 2017-12-14T18:12:24.100 回答