如何在Gitlab推送中使用Jenkins中的参数构建?

时间:2017-01-08 14:50:25

标签: jenkins gitlab webhooks jenkins-pipeline

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

3 个答案:

答案 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 中