【问题标题】:How to trigger Jenkins kick off a build after a GitLab merge request is accepted如何在 GitLab 合并请求被接受后触发 Jenkins 启动构建
【发布时间】:2015-09-30 20:27:44
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您使用的是 GitLab 社区版还是企业版?如果您使用的是企业版,则可以遵循以下文档:docs.gitlab.com/ee/integration/jenkins.html 它有关于配置 Jenkins CI 服务的说明。不幸的是,社区版没有这项服务。

标签: jenkins gitlab gitlab-7


【解决方案1】:

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

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

然后,管道脚本如下所示 先生

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 验证(取决于您和您的网络配置)

你应该完成了!

【讨论】:

    猜你喜欢
    • 2016-07-11
    • 2023-03-12
    • 2020-05-09
    • 2021-01-10
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    相关资源
    最近更新 更多