【问题标题】:How to disable a Jenkins job via curl?如何通过 curl 禁用 Jenkins 作业?
【发布时间】:2015-02-18 06:43:30
【问题描述】:

我想通过向 Jenkins 发送 post curl 请求来禁用 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 请求中没有包含有效的面包屑

这个问题有没有很好的基于 curl 的解决方案?

【问题讨论】:

    标签: post curl jenkins


    【解决方案1】:

    没有有效的 crumb 意味着您的 Jenkins 安装启用了一个安全选项,该选项可防止以标准方式发送请求以避免one-click attacks。你也不能使用 Jenkins CLI,因为它doesn't work yet

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

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

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

      curl -X POST -H "$CRUMB" http://USER:TOKEN@localhost:8080/<jobname>/disable
      

      如果由于某种原因上述方法不起作用,您可以尝试使用-u USER:TOKEN

    【讨论】:

    • 效果很好!请注意,使用curl -u user:pass http://localhost:8080/... 可能会更简洁,而不是让用户/通过 URL 本身(取决于您编写脚本的方式)。
    【解决方案2】:

    crumb 错误表明您正在使用CSRF Protection。您需要在请求中包含适当的 crumb 标头。如上面链接的 Jenkins wiki 页面所述,可以从 Jenkins API 获得面包屑。 “使用 curl 和 crumb 触发参数化构建”的 answer 显示了在 curl 请求中添加 crumb 标头的语法。

    【讨论】:

    • 碎屑数据总是固定的还是我每次都必须使用查询来获取它?
    • @rwt crumb 大部分是静态的,但它确实取决于用户名和客户端 IP。如果您正在编写一个脚本,其中这些参数会有所不同,那么您最好在脚本的开头请求碎屑。
    【解决方案3】:

    设置 jenkins 的“全局安全设置”: 取消选中“防止跨站请求伪造攻击”

    【讨论】:

    【解决方案4】:

    我发现kenorb's solution 的第一部分对我有用,即获取面包屑,但对于第二部分,curl 不喜欢这种语法,它说:

    curl: (6) 无法解析主机'http:'

    所以我不得不使用以下有效的语法:

    curl -H $CRUMB http://localhost:8080/&lt;jobname&gt;/disable -u USER:TOKEN

    【讨论】:

    • 谢谢,这是我在我的 java 应用程序中需要的,在请求标头中发送 user:token
    【解决方案5】:

    以下内容对我有用

    curl -X POST http://<servername>/job/jobname/disable
    

    确保用户有权执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多