Jenkins"远程构建触发器">"身份验证令牌"选项丢失

Mar*_*and 16 jenkins

我刚刚在Nginx的反向代理后面设置Jenkins(最新的 - 2.5),以便我可以通过HTTPS访问它.

它正在工作,但是我的Multibranch Pipeline作业不再在主配置中有"Trigger Builds Remotes"选项.我认为我没有改变任何其他配置.任何想法发生了什么以及如何取回它?

这就是我想要的:

我想要的屏幕截图

Mar*_*and 24

经过一段时间的搜索,我想我能够有信心地回答我自己的问题.

我相信答案在于安全设置.身份验证令牌的目的是允许未经授权的用户(开发人员)触发构建,而无需登录Jenkins(请参阅https://wiki.jenkins-ci.org/display/JENKINS/Authenticating+scripted+clientshttps: //wiki.jenkins-ci.org/display/JENKINS/Quick+and+Simple+Security).

因此,如果您使用基于Matrix的安全性(在"配置全局安全性">>授权下),则"远程触发器构建"选项将消失,因为假定您将使用Jenkins用户帐户对请求进行身份验证.

为此,您可以使用用户名/密码(甚至更好的用户名/ API令牌)发出HTTP请求:

curl -X POST "https://username:api-token@JENKINS_URL/job/Example/build"
Run Code Online (Sandbox Code Playgroud)


VaL*_*VaL 16

放弃

在阅读这个答案之前,你必须知道我只是在这个答案中积累了所有有用的信息,我已经在stackoverflow中找到了,所有的信息应该是那些做过实际研究的人.

我将链接的内容从此注释移动到stackoverflow只是为了保留deadlink.

信息

我的工作名称是Football.我还建议你创建一个专用的jenkins用户和密码,而不是admin:admin像我在这个例子中使用的那样.我的jenkins GUI URL http://192.168.99.20:8080就像我在流浪汉一样.

创造工作

  1. 登录jenkins http://192.168.99.20:8080地址.
  2. 创建一个名为"Football"的"自由风格"项目.
  3. 打开它的配置.
  4. 转到"构建触发器"部分.
  5. 勾选"触发器远程构建(例如,从脚本)"选项只是为了记下写在那里的文本并再次取消它.文字读Use the following URL to trigger build remotely: JENKINS_URL/job/Football/build?token=TOKEN_NAME or /buildWithParameters?token=TOKEN_NAME. Optionally append &cause=Cause+Text to provide text that will be included in the recorded build cause..
  6. 保存并退出.

获取API用户和令牌

  1. 登录jenkins http://192.168.99.20:8080地址.
  2. 点击页面右侧的用户名(我的是管理员).
  3. 选择"配置"选项,您可以选择该http://192.168.99.20:8080/user/admin/configure页面.
  4. 在"API令牌"部分中,单击"显示API令牌"按钮.
  5. 请注意稍后在curl命令中使用的"用户ID"和"API令牌".例如admin:85703fb68927f04968630e192e4927cb

获得面包屑

有关更多信息,请访问远程访问API页面.

$ wget -q --auth-no-challenge --user admin --password admin --output-document - 'http://192.168.99.20:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
Run Code Online (Sandbox Code Playgroud)

这会给你类似的东西Jenkins-Crumb:44e7033af70da95a47403c3bed5c10f8.如果没有crumb信息,运行curl命令将导致示例错误,如HTTP/1.1 403 ForbiddenError 403 No valid crumb was included in the request.

测试

$ curl -I -X POST http://admin:85703fb68927f04968630e192e4927cb@192.168.99.20:8080/job/Football/build -H "Jenkins-Crumb:44e7033af70da95a47403c3bed5c10f8"
HTTP/1.1 201 Created
Date: Fri, 02 Jun 2017 06:17:51 GMT
X-Content-Type-Options: nosniff
Location: http://192.168.99.20:8080/queue/item/17/
Content-Length: 0
Server: Jetty(9.2.z-SNAPSHOT)
Run Code Online (Sandbox Code Playgroud)

原始链接

除了上面的信息,我还发现了如何cli从这个答案中获得Jenkins-Crumb

CRUMB=$(curl -s 'http://USER:TOKEN@localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
Run Code Online (Sandbox Code Playgroud)


mir*_*los 5

有一个适用于 1.565.3 和更新版本的 Jenkins 插件,它可以绕过基于矩阵的身份验证来触发构建作业。我在Emil Dragu对JENKINS-17764(涵盖这个特定问题)的评论中发现了这一点:

安装Build Token Root Plugin,然后将 URL 的上半部分更改为下半部分(呈现为列表以使其更容易看到):

  • job/项目名称/build?token=测试
  • buildByToken/build?job=项目名称&token=测试

您仍然可以传递可选cause参数。