我有GitLab Community Edition 8.15.2使用webhook在Jenkins 2.32.1中成功触发管道项目。我希望gitlab push能够触发带参数的构建,但是当它出现时参数值为null,因此构建失败。
gitlab webhook看起来像:
constructor(props) {
super(props);
this.updateValue = this.updateValue.bind(this);
}
在我的管道项目中,我用
回显参数值 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
没有。在Jenkins的控制台输出中,我可以看到:
VM_NAME
答案 0 :(得分:1)
我几周来一直在努力解决这个问题。我曾经有过一次工作,但是我无法让它重新开始工作,直到今天。而解决方案显然是明显的......
我自动为每个管道作业勾选了以下框:
将更改推送到GitLab时构建。 GitLab CI服务URL: http://jenkins.dev:8080/project/MyProject
然后从GitLab我用webhook来触发上面的内容。
和你一样,我尝试添加/buildWithParameters
并尝试了许多其他无法解决的问题。
问题是,我勾选了错误的复选框! 由于我从GitLab webhook触发构建,因此根本不需要检查上面的复选框(构建时......)。 需要检查的是:
远程触发构建(例如,从脚本)
该复选框为您提供了一个新网址:
使用以下URL远程触发构建: JENKINS_URL / job / MyProject / build?token = TOKEN_NAME或 / buildWithParameters?标记= TOKEN_NAME
与我出现的所有文档一样,您可以看到,现在,网址不再以/project
开头,而是以 /job
开头!
所以勾选该框并相应地更改您的网址:
http://jenkins.server:8080/**job**/project-a/buildWithParameters?token=TOKEN_NAME&MYPARAM=foo
至少我想提及令牌: 在GitLab webhook中,有一个用于" token"的单独字段,其中说明:
使用此令牌验证收到的有效负载。它将与X-Gitlab-Token HTTP标头中的请求一起发送。
因此,提供的令牌将作为HTTP标头沿请求发送。
这是可以在Jenkins设置中全局提供的令牌。
当勾选方框Use the following URL to trigger build remotely
时,您必须在Jenkins作业中提供的令牌必须作为GET参数在URL中发送,就像示例所示。
最后的说明: 我个人从来没有完全开始工作,因为我没有得到Jenkins CSRF保护。禁用它会给我带来另一个错误。但是,希望上述内容确实为您和其他人解决了问题。
答案 1 :(得分:0)
GitLab插件不允许您传递任意参数。他们的项目中有一个open issue,值得推荐。
我费解的解决方案是将推触发器的期望值用作作业的默认参数。然后,我使用Parameterized Scheduler plugin在计划执行中使用其他值。
问题在于,由于默认参数适用于推钩,因此当手动运行该作业时,我的可用性很差。
答案 2 :(得分:0)
我在这里找到了解决方案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=Aju9ryHUu6t7W8wLSeCWtY2bWjzQduYNPyYourvalue
“hunter”是您在 Jenkins 中的用户名。 以下是您必须在独立于项目的 Jenkins 用户管理中创建的 Jenkins API 令牌。
最后一个令牌是您在“远程触发构建(例如,从脚本)”下的 jenkins 项目选项中指定的令牌
最后一件事是使用 ¶m=value 将您的参数和值添加到 url 中