如何从Gitlab push中使用Jenkins中的参数进行构建?

iyr7buue  于 2023-05-06  发布在  Jenkins
关注(0)|答案(4)|浏览(219)

我让GitLab Community Edition 8.15.2使用webhook成功触发了Jenkins 2.32.1中的管道项目。我希望gitlab push触发一个带有参数的构建,但当它通过时参数值为null,因此构建失败。
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'
        }
        ...
    }
}

参数VM_HOST有默认值,但VM_NAME没有。在Jenkins的控制台输出中,我可以看到:

[Pipeline] echo
VM_HOST: HyperVHost
[Pipeline] echo
VM_NAME:
ekqde3dh

ekqde3dh1#

我已经为此挣扎了好几个星期了。我让它工作过一次,但我不能让它再次工作,直到今天。当然,解决办法是显而易见的...
对于每个流水线作业,我自动勾选以下框:
当变更被推送到GitLab时进行构建。GitLab CI服务URL:http://jenkins.dev:8080/project/MyProject
然后在GitLab中,我使用webhook来触发上面的代码。像你一样,我尝试添加/buildWithParameters,并尝试了许多其他的东西,没有工作。
问题是,我勾错了复选框!因为我是从GitLab webhook触发构建的,所以根本不需要勾选上面的复选框(build when 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
最后我想提一下token:在GitLab webhook中,有一个单独的“token”字段,它声明:
使用此令牌验证接收到的有效负载。它将与X-Gitlab-Token HTTP头中的请求一起发送。
因此,这里提供的令牌将作为HTTP头随请求一起发送。这是可以在Jenkins设置中全局提供的令牌。在Jenkins作业中勾选框Use the following URL to trigger build remotely时必须提供的令牌必须在URL中作为GET参数发送,就像示例所示。

***最后一点:***就我个人而言,我从来没有完全做到这一点,因为我没有得到Jenkins CSRF的保护。禁用它会给我另一个错误。但是,希望上面的内容确实能为您和其他人解决问题。

wqsoz72f

wqsoz72f2#

GitLab插件不允许你传递任意参数。在他们的项目中,有一个open issue值得投票。
我的复杂解决方案是使用推送触发器的期望值作为作业的默认参数。然后,我使用Parameterized Scheduler plugin在调度执行中使用其他值。
问题是当我手动运行这个任务时,它的可用性很差,因为默认参数适合于push hook。

cdmah0mi

cdmah0mi3#

我在这里找到了解决方案https://www.jittagornp.me/blog/jenkins-gitlab-webhook/
我用Jenkins 2.263.1和GitLab Community Edition 13.6.1验证了它
您的webhook URL将类似于https://hunter:11a403302a4f01b9b4975c0ac27441a5cc@jenkinsservername.com/job/yourjenkinsproject/buildWithParameters?token=Aju9ryHUu6t7W8wLSeCWtY2bWjzQduYNPyY7B3gs&yourparam=yourvalue
“hunter”是你在Jenkins的用户名。以下是您必须在Jenkins用户管理中独立于项目创建的Jenkins API令牌。
最后一个Token是您在jenkins项目选项“Trigger builds remotely(e.g.,from scripts)”下指定的Token
最后一件事是使用&param=value将参数和值添加到url中

ifmq2ha2

ifmq2ha24#

100%您将能够覆盖GitLab中的参数值。
我也探索并试图找出解决方案,然后我做了大量的研究,最后我在youtube上找到了一个视频。看完这个之后,你还可以从Gitlab中覆盖Jenkins参数值。
以下是YouTube链接:https://youtu.be/TPNHaINU_lY
谢谢你,我以后:)

相关问题