我知道这是一个老问题,但这是我在 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 验证(取决于您和您的网络配置)
你应该完成了!