我有 GitLab Community Edition 8.15.2 使用 webhook 在 Jenkins 2.32.1 中成功触发了管道项目。我希望 gitlab push 触发带有参数的构建,但是当它通过时参数值为空,因此构建失败。
gitlab 网络钩子(Hook)看起来像: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'
}
...
}
}
参数
VM_HOST
有一个默认值,但 VM_NAME
没有。在 Jenkins 的控制台输出中,我可以看到:[Pipeline] echo
VM_HOST: HyperVHost
[Pipeline] echo
VM_NAME:
最佳答案
我已经为此苦苦挣扎了几个星期。我让它工作过一次,但直到今天我才能让它再次工作。当然,解决方案非常明显......
我自动为每个管道作业勾选了以下框:
然后在 GitLab 中,我使用 webhook 来触发上述操作。
像你一样,我尝试添加 /buildWithParameters
并尝试了许多其他不起作用的东西。
问题是,我勾选了错误的复选框!
由于我从 GitLab webhook 触发构建,因此根本不必选中上述复选框(构建时...)。
需要检查的是:
该复选框为您提供了一个新 URL:
就像我随附的所有文档一样,正如您所看到的,URL 现在不再以 /project
开头,而是以 /job
开头!
所以 勾选那个框 并相应地更改您的 URL:http://jenkins.server:8080/**job**/project-a/buildWithParameters?token=TOKEN_NAME&MYPARAM=foo
至少我想提一下 token :
在 GitLab 网络钩子(Hook)中,有一个单独的“ token ”字段,它指出:
因此,那里提供的 token 将作为 HTTP header 随请求一起发送。
这是可以在 Jenkins 设置中全局提供的 token 。
勾选 Use the following URL to trigger build remotely
框时,您必须在 Jenkins 作业中提供的 token 必须作为 GET 参数在 URL 中发送,就像示例所示。
最后说明: 个人我从来没有让这个工作完全正常,因为我没有得到 Jenkins CSRF 保护。禁用它会给我另一个错误。但是,希望上述内容确实为您和其他人解决了问题。
关于jenkins - 如何从 Gitlab 推送在 Jenkins 中使用参数构建?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41533970/