当前位置: 首页 > 知识库问答 >
问题:

使用Jenkins Rest API调度Jenkins作业

靳祺然
2023-03-14

我有一份詹金斯的工作,计划在特定的时间进行。我想以编程方式修改该计时。

我试图通过安装Schedule build插件并使用http://jenkins_url/job/jobname/build?delay=3344sec。但这将使作业处于保持java线程的静默期。我希望在不将其置于静默期的情况下修改计划条目。

共有2个答案

太叔望
2023-03-14

我不能让它工作,但插件的源代码引用了一个“时间表”url操作和一个“日期”参数。

我试过这样的方法:

http://localhost:8080/job/jobname/job/develop/schedule?date=2020-02-20

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

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

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(); 
    }
}
咸昀
2023-03-14

您可以使用构建触发器-

如果需要更改时间,请使用Jenkins REST API。。。

  1. 以编程方式检索XML格式的作业配置,然后
  2. 修改配置中的调度时间(见下文)
  3. 重新发布新的作业配置

在bash中,这可以通过一行代码(使用curlse)来修改下面的XML部分(示例计划在2月29日中午运行)来完成:

[...]
<triggers>
<hudson.triggers.TimerTrigger>
<spec>00 12 29 02 * </spec>
</hudson.triggers.TimerTrigger>
</triggers>
[...]

注:

  • 作为一个加号,你不会依赖于任何补充插件
  • 注意:您不能在计划中指定一年,所以如果您需要提前一年安排构建,那么您需要一些魔法。

 类似资料:
  • 我试图让Jenkins的多分支管道工作以类似于分支的方式构建标记。在Jenkins 2.73中(不确定何时添加了功能),可以将多分支项目配置为从源存储库中检索分支和标记。起初,我认为这将非常适合我的需要(我的Jenkinsfile现在可以在Jenkins的同一个地方构建开发或生产构建)。配置了标记发现的多分支作业 我有一个脚本化的管道来启动和运行构建过程本身,但我的问题是,虽然分支作业完美地拾取了

  • 我正在寻找最好的解决方案,以创建一个java web应用程序,以生成Excel/PDF格式的报告。类似于Google Adwords的东西,用户可以创建日程报告,并在以后生成报告时下载。 我正在考虑开发一个java应用程序,在其中用户记录,选择一个预先定义的报告,并提供输入参数(如报告日期等),这个请求将被排队或保存为Quarts作业(首选持久队列)。一个作业将监视队列/作业并执行该作业,生成报告

  • 我们有一个使用Spring Framework在Tomcat中运行的Web应用程序。我们需要为循环操作添加一些计划作业。为此,我们遇到了Quartz Scheduler,并遵循了使用Quartz with Spring配置作业的教程,并按预期计划并运行了作业。 所以我们有一些任务是在应用程序启动时安排的。现在我们希望用户手动运行作业并更改作业的触发器,但是我们需要将这些更改持久化到数据库中。因此,

  • 问题内容: 我正在使用Groovy脚本控制台在Jenkins上创建和更新作业。使用此处记录的API http://javadoc.jenkins-ci.org/ 我发现了如何通过使用创建工作 但是,如果作业已经存在,则此方法将失败。如何使用新的xml更新现有作业? 更新资料 基于@ogondza的答案,我使用了以下内容来创建然后更新作业 问题答案: 使用AbstractItem#updateByX

  • AUTOMATING TASKS WITH JOB SCHEDULING 像任何使用 Linux 的人一样,黑客经常有他们想要定期运行的任务、脚本或其他任务。例如,你可能希望为你的系统设置一个自动文件备份, 或者你希望像我们在第 11 章做的那样转存日志文件。另一方面,黑客可能希望每天晚上或者在他们工作或上学的时候让他们的系统运行第 8 章里的 MySQLscanner.sh 脚本。这些都是调度自

  • 我是否需要? 我需要吗?我不能使用类/servlet做同样的事情吗? 如何初始化计划程序以及谁将触发作业? 我有一个执行作业独立程序,我可以在任何servlet的init中编写,并在容器启动时启动servlet。这样做对吗?