如何通过curl禁用Jenkins工作?

rra*_*wat 15 post curl jenkins

我想通过向Jenkins发送一个帖子卷曲请求来禁用Jenkins作业.

我试过这样做:

  1. curl -X POST http://<server>:8080/<jobname>/disable
  2. curl -X POST http://<server>:8080/<jobname>/disable?token=<token>
  3. curl -u <username>:<token> POST http://<server>:8080/<jobname>/disable

但每次都失败了.我得到的错误是:

403请求中未包含有效的crumb

这个问题有一个很好的基于卷曲的解决方案吗?

ken*_*orb 15

没有有效的crumb意味着您的Jenkins安装已启用安全选项,可防止以标准方式发送请求以避免一键攻击.你也不能使用Jenkins CLI,因为它还没有用.

以下是使用的步骤curl(替换localhost为您的Jenkins地址):

  1. 请注意您的用户API令牌(来自/user/USER/configure).
  2. 得到你的面包屑:

    CRUMB=$(curl -s 'http://USER:TOKEN@localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
    
    Run Code Online (Sandbox Code Playgroud)
  3. 现在,您可以通过在标头中发送crumb来禁用作业:

    curl -X POST -H "$CRUMB" http://USER:TOKEN@localhost:8080/<jobname>/disable
    
    Run Code Online (Sandbox Code Playgroud)

    如果上述因某些原因无效,您可以尝试使用-u USER:TOKEN.

  • 效果很好!请注意,使用`curl -u user:pass http:// localhost:8080/...`可能更干净,而不是在URL本身中使用user/pass(取决于你如何编写脚本). (3认同)

Dav*_*her 9

碎屑错误表示您正在使用CSRF保护.您需要在请求中包含适当的crumb标头.可以从上面链接的Jenkins wiki页面上描述的Jenkins API获得crumb."使用curl和crumb触发参数化构建" 的答案显示了在curl请求中添加crumb头的语法.