使用 Jenkins Rest API 安排 Jenkins 作业

use*_*278 6 jenkins jenkins-api

我有一个 Jenkins 的工作,它被安排在一个特定的时间。我想以编程方式修改该时间。

我尝试通过安装 Schedule Build 插件来修改构建并使用http://jenkins_url/job/jobname/build?delay=3344sec. 但这会将工作置于包含 Java 线程的静默期。我希望在不将其置于安静期的情况下修改 Schedule 条目。

小智 0

我无法让它工作,但插件的源代码引用了“schedule”url 操作和“date”参数。

我尝试过类似的东西:

http://localhost:8080/job/jobname/job/develop/schedule?date=2020-02-20
Run Code Online (Sandbox Code Playgroud)

它没有拒绝,但我看不到构建。

下面是按下按钮进行调度时执行的操作的源代码:

var newRequest = function() {
    if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
    } else {
        return new ActiveXObject("Microsoft.XMLHTTP");
    }
}

var sumbitScheduleRequest = function(absoluteUrl, quietPeriodInSeconds, isJobParameterized){

    if(isJobParameterized){
        // if job has parameters, redirect to build page, so user can set parameters 
        window.location = absoluteUrl + "build?delay=" + quietPeriodInSeconds + "sec";
    }else{
        // if job has NO parameters, submit build directly
        var csrfCrumb;
        var csrfRequest = newRequest();
        csrfRequest.onreadystatechange = function() {
            if (csrfRequest.readyState === 4) {
                if (csrfRequest.status === 200 || csrfRequest.status === 201) {
                    csrfCrumb = JSON.parse(csrfRequest.responseText);
                } else {
                    // csrf might be deactivated
                }

                // do the actual submit 
                var xmlhttp = newRequest();
                xmlhttp.onreadystatechange = function() {
                    if (xmlhttp.readyState === 4) {
                        if (xmlhttp.status === 200 || xmlhttp.status === 201) {
                            window.location = absoluteUrl;
                            return false;
                        } else {
                            window.location = absoluteUrl;
                            return false;
                        }
                    }
                };
                xmlhttp.open("POST", absoluteUrl + "build?delay=" + quietPeriodInSeconds + "sec", true);
                if (csrfCrumb) {
                    xmlhttp.setRequestHeader(csrfCrumb.crumbRequestField, csrfCrumb.crumb)
                }
                xmlhttp.send();
            }
        };

        csrfRequest.open('GET', rootURL + '/crumbIssuer/api/json', false);
        csrfRequest.send(); 
    }
}
Run Code Online (Sandbox Code Playgroud)