我有 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/

10-14 19:36
查看更多