javascript - 如何通过 REST API 提交 Jenkins 作业?

标签 javascript groovy prototypejs jenkins

以下“执行系统 ​​Groovy 脚本”构建任务更新构建的描述以添加一个按钮,该按钮将提交另一个参数化的 Jenkins 作业:

import hudson.model.Cause
import hudson.model.Job
import jenkins.model.Jenkins

final JOB_NAME = 'my-job'

final jenkins = Jenkins.instance
final job = jenkins.getItemByFullName(JOB_NAME, Job.class)
final currentBuild = Thread.currentThread().executable
final buildNumber = currentBuild.getNumber()

job.builds
    .findAll { build -> build.number == buildNumber }
    .each { build ->
        build.setDescription("""
            <button
                type='button'
                onclick='javascript:
                    var another_job = function() {
                        parameters = {json: {parameter: [{name: "P4_CHANGELIST", value: "0"}]}};
                        new Ajax.Request("http://builds/job/another-job/build", {
                            method: "post",
                            parameters: Object.toJSON(parameters)
                        });
                    };
                    another_job()'>Continue</button>""")
    }

但是在单击“继续”按钮后,请求会返回 400 Bad Request。看起来是因为构建参数没有正确传递(如果我从另一个作业中删除构建参数并且不发送参数,一切正常)。

我不确定问题是由于错误的引用还是我通过构建参数发送的方式。

最佳答案

您需要使用 JSON。参见 Submitting Jobs .

以下对我有用:

<button 
  type='button'
  onclick='javascript:
    var another_job = function() {
      new Ajax.Request("http://localhost:8081/job/JReport2/build", {
        method: "post",
        parameters: {json: Object.toJSON({parameter: [{name: "foo", value: "fobar"}]})}
    });
  };
  another_job()'>
  Start Job
</button>

有点奇怪的是,当按下构建列表中构建旁边出现的按钮时,它会起作用,但对出现在构建描述本身上的按钮不起作用。

关于javascript - 如何通过 REST API 提交 Jenkins 作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10865538/

相关文章:

javascript - 更改样式 onclick

javascript - 饼图图例未显示 - 未捕获类型错误 : Cannot set property 'innerHTML' of null

javascript - Mongoose + Mlabs + 海量数据

ant - groovyc ant 任务失败并出现 fork ="true"

jquery - 为什么 jQuery 似乎不鼓励使用常规 OOP?

javascript - 从原型(prototype)类改进此代码片段

javascript - 设置 overrideMimeType ("application/json");使用 Prototype.js

javascript - 如何使导航按钮动画到内部页面上的某些位置

java - Groovy Shell 脚本对象未完全执行

java - 在grails中计算MACD和RSI