Mar*_*son 4 webhooks jenkins gitlab jenkins-pipeline
我让 GitLab Community Edition 8.15.2 使用 webhook 成功触发 Jenkins 2.32.1 中的管道项目。我希望 gitlab 推送触发带有参数的构建,但当它通过时参数值为空,因此构建失败。
gitlab webhook 如下所示:
http://jenkins.server:8080/project/project-a/buildWithParameters?MYPARAM=foo
在我的管道项目中,我回显参数值
echo "MYPARAM: ${MYPARAM}"
并且它没有设置任何内容。关于我哪里出错了有什么想法吗?
更新
我在管道中使用的实际代码是:
node {
try {
echo "VM_HOST: ${VM_HOST}"
echo "VM_NAME: ${VM_NAME}"
stage('checkout') {
deleteDir()
git 'http://git-server/project/automated-build.git'
}
stage('build') {
bat 'powershell -nologo -file Remove-MyVM.ps1 -VMHostName %VM_HOST% -VMName "%VM_NAME%" -Verbose'
}
...
}
}
Run Code Online (Sandbox Code Playgroud)
该参数VM_HOST有默认值,但VM_NAME没有。在 Jenkins 的控制台输出中我可以看到:
[Pipeline] echo
VM_HOST: HyperVHost
[Pipeline] echo
VM_NAME:
Run Code Online (Sandbox Code Playgroud)
我已经为此苦苦挣扎了好几个星期。我曾经让它工作过一次,但直到今天我才让它再次工作。当然,解决方案是显而易见的……
对于每个管道作业,我自动勾选了以下框:
当更改推送到 GitLab 时进行构建。GitLab CI 服务网址: http://jenkins.dev:8080/project /MyProject
然后我从 GitLab 使用 webhook 来触发上述内容。像你一样,我尝试添加/buildWithParameters并尝试了许多其他不起作用的事情。
问题是,我勾选了错误的复选框!由于我从 GitLab webhook 触发构建,因此根本不需要选中上面的复选框(当 a... 时构建)。需要检查的是:
触发器远程构建(例如,从脚本)
该复选框为您提供了一个新的 URL:
使用以下 URL 远程触发构建:JENKINS_URL/job/MyProject/build?token=TOKEN_NAME 或 /buildWithParameters?token=TOKEN_NAME
就像我附带的所有文档一样,正如您所看到的,URL 现在不再以 开头/project,而是/job以!
因此,请勾选该框并相应地更改您的 URL:
http://jenkins.server:8080/**job**/project-a/buildWithParameters?token=TOKEN_NAME&MYPARAM=foo
我至少想提一下令牌:在 GitLab webhook 中,有一个单独的“令牌”字段,其中指出:
使用此令牌来验证收到的有效负载。它将与 X-Gitlab-Token HTTP 标头中的请求一起发送。
因此,此处提供的令牌将作为 HTTP 标头随请求一起发送。这是可以在 Jenkins 设置中全局提供的令牌。勾选该框时必须在 Jenkins 作业中提供的令牌Use the following URL to trigger build remotely必须作为 GET 参数在 URL 中发送,就像示例所示。
最后一点:就我个人而言,我从来没有完全做到这一点,因为我没有摆脱 Jenkins CSRF 保护。禁用它会给我另一个错误。但是,希望上述内容能够解决您和其他人的问题。