【问题标题】:Calling a Jenkins build from outside of Jenkins?从 Jenkins 外部调用 Jenkins 构建?
【发布时间】:2012-01-20 17:15:24
【问题描述】:

我是 Jenkins 的新手,我不确定这是否可行,但我想设置一个 Web 界面,有人可以在其中单击“开始作业”,这将告诉 Jenkins 开始特定的构建作业。

Jenkins 是否有允许这种事情发生的网络服务?如果是这样,一个简单的例子是什么?

【问题讨论】:

  • 你能解决这个问题吗??我也要做同样的事情,你能告诉我你是如何对任何示例代码或链接进行排序的吗?
  • 是的,它实际上是直截了当的。就像所选答案所说的那样,您以 JENKINS_URL/job/JOBNAME/build?token=TOKEN 形式调用 URL 您在设置作业时设置了令牌。
  • 如何传递mvn命令行参数等参数..
  • 您在工作中制作参数,然后您应该能够在 URL 字符串中命名它们
  • 您可以随时与其他工具集成,BuildMaster 有一个Queue a Jenkins Build 操作,您可以将其用作部署计划的一部分。

标签: jenkins


【解决方案1】:

Jenkins 有一个文档化的 REST API。你可以让你的小网络服务调用它。

【讨论】:

  • 感谢您的帮助。我专门找这个:YOURHOST/jenkins/job/PROJECTNAME/build
  • 在 jenkins 文档中找到它,但我会将你的答案标记为正确,因为它至少回答了它是可能的。
【解决方案2】:

啊哈,我在文档中找到了。很简单:

http://YOURHOST/jenkins/job/PROJECTNAME/build

【讨论】:

  • 在链接中,将“YOURHOST”替换为您的主机名(即 localhost 或 www.mywebserver.com 等),并将“PROJECTNAME”替换为您的项目名称。
  • 在这种情况下,您甚至不需要设置令牌(但出于安全考虑,建议这样做)。
  • 很简单,如果 CSRF (cross site request forgery) Protection 关闭。否则:没那么简单。
【解决方案3】:

这里是文档的链接:Jenkins Remote Access API

查看提交工作部分。

在您的作业配置中,您设置一个令牌,然后向JENKINS_URL/job/JOBNAME/build?token=TOKEN 创建一个POST 请求。这可能是最基本的用法。

【讨论】:

  • 我认为提交构建应该是 POST 而不是 GET
  • 这很难找到(参见 [1]),但要设置 TOKEN,您需要在 Jenkins 作业中的“构建触发器”下检查“远程构建触发器(例如,从脚本)”。 [1]wiki.jenkins-ci.org/display/JENKINS/…
【解决方案4】:

在 Python 中使用上述 API 有一个很好的示例。该项目名为 Python Jenkins,您可以在这里找到它:link

【讨论】:

    【解决方案5】:

    Jenkins 也支持参数化构建。

    因此,如果您想为可配置的构建生成传递参数,您可以通过在使用 http://YOURHOST/jenkins/job/PROJECTNAME/buildWithParameters 调用 Jenkins 构建请求时发布它们来传递它们。

    【讨论】:

    • 这正是我所需要的。文档说要传递您需要发送 JSON 的参数,但我一直收到一个错误,说它需要表单提交。使用 buildWithParameters 有效。
    • 这已经过期了,但是我遇到了同样的问题,结果证明 POST /build 正如你所说的,内容类型:x-www-form-urlencoded,并且在body 应该有一个名为“json”的键,以实际的 json 作为值。尝试使用 content-type: application/json 和正文中的实际 json 进行 POST,将呈现 servlet 异常。 Jenkins 似乎确实有自己处理 JSON 的方式......
    【解决方案6】:

    用途:

    http://some server/job/myjob/buildWithParameters?token=TOKEN&PARAMETER=Value
    

    你可以看看这个文档:Parameterized Build

    【讨论】:

      【解决方案7】:
      curl -H POST http://USERNAME:PASSWORD@JENKINS_HOST:PORT/job/JOB_NAME/build?token=YOUR_TOKEN
      

      在作业配置 -> 构建触发器 -> 远程触发构建时设置 YOUR_TOKEN

      【讨论】:

      • 你说的"Set token at job configuration /build triggers/Trigger builds remotes"是什么意思(好像不太明白)?
      • 令牌能否在网页中使用 JOB_NAME 等 jenkins 内置变量?我试过 env.JOB_NAME、${JOB_NAME}、${env.JOB_NAME},都不起作用。
      【解决方案8】:

      如果你有多个参数需要传递,比如令牌和参数,则使用 curl,你可能必须在 Linux shell 上引用:

      curl -H POST "http://USERNAME:PASSWORD@JENKINS_HOST:PORT/job/JOB_NAME/build?token=YOUR_TOKEN&PARAMETER=VALUE"
      

      【讨论】:

        【解决方案9】:

        我需要添加参数,我想通过 https 来完成。我花了一段时间,但以下对我有用:

        curl --request POST --url 'https://HOST_NAME/job/JOB_NAME/buildWithParameters?token=TOKEN'  --header 'cache-control: no-cache' --header 'content-type: application/x-www-form-urlencoded' --data 'name1=value1&name2=value2'
        

        【讨论】:

          【解决方案10】:

          安装通用 Webhook 触发器插件。 在构建触发器操作中选择通用 webhook 触发器。生成一个随机字符串并粘贴到令牌中。 现在可以通过对以下 url 的 http 请求触发您的工作。

          http://JENKINS_URL/generic-webhook-trigger/invoke?token=TOKEN_VALUE

          替换您的 jenkins url 和令牌值

          【讨论】:

          • 令牌能否在网页中使用 JOB_NAME 等 jenkins 内置变量?我试过 env.JOB_NAME、${JOB_NAME}、${env.JOB_NAME},都不起作用。
          猜你喜欢
          • 1970-01-01
          • 2015-12-30
          • 2015-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多