【问题标题】:How can I schedule a job to run in the future, but only one time ever我如何安排一项工作在未来运行,但只有一次
【发布时间】:2016-10-05 20:56:40
【问题描述】:

我想安排一个作业,该作业将在未来的指定时间最多执行一次(通常那个时间会在那天晚上晚些时候,几个小时之后)。我想使用詹金斯来做到这一点。如果詹金斯在那段时间碰巧倒下了,这份工作就不会被解雇——那很好。

目前,我计划在启用“定期构建”的情况下创建一个新工作,并将时间表设置为“0 19 29 01 *”。

目的是将作业安排在 1 月 29 日 19:00 运行。

缺点是每次我这样做时,我必须记得在明年之前的某个时间删除/禁用该作业,否则它将再次运行(那会很糟糕)。无论如何,我都会手动检查工作的结果,所以做起来并不难。我只是希望有人能够指出一种方法来安排与 Jenkins 一起运行的“一次性”作业 - 这样我就不会因为忘记禁用作业而搞砸了。

【问题讨论】:

    标签: jenkins


    【解决方案1】:

    安装“计划构建插件”。 “增加了为稍后的时间点安排构建的功能。询问用户日期和时间,并将构建添加到相应的安静期的构建队列中。”

    插件安装后似乎需要重新启动 jenkins,即使您看到计划构建的图标。

    https://wiki.jenkins-ci.org/display/JENKINS/Schedule+Build+Plugin

    注意:初始安装后(使用 jenkins 2.2)我收到警告“插件提供了 GET”。似乎确实安排了某种工作,它说它“在 13 小时后到期”,这对于我安排的时间是正确的。它没有运行该作业。 :-(

    看到的警告:

    You must use POST method to trigger builds. (From scripts you may instead pass a per-project authentication token, or authenticate with your API token.) If you see this page, it may be because a plugin offered a GET link; file a bug report for that plugin.
    

    Url,大概是GET:

    http://jenkins:xxxx/job/jobname/build?delay=47212sec
    

    这是 Jenkins 2.2 和 Schedule Build Plugin 0.3.4

    我现在可以使用 jenkins 2.7.4 和从源代码构建的 Schedule Build Plugin。

    解决方案:使用最新的jenkins,等待插件的新版本(>0.3.4)。 . . (或从源代码构建)。 插件上已经存在一个针对 GET 问题的错误,以及源代码中的修复,但尚未在最新版本中。 2016 年 9 月 26 日:https://issues.jenkins-ci.org/browse/JENKINS-28961 从源代码构建 schedule_build.hpi 这个插件有效。对于 jenkins 2.2,如果在 jenkins 中禁用 CSRF 保护,它就可以工作。

    【讨论】:

    • 标记为答案,即使我没有尝试过(现在没有时间,但这似乎是我想要的 - 谢谢)。
    • 应该是对的。看起来很完美。不过还没有为我工作(jenkins 2.2)。我要升级詹金斯,然后再试一次。如果这不起作用,我将查看提交错误报告并在内部查看插件。我会用结果更新答案。
    • 确保您的 Jenkins URL 在 Manage Jenkins> Configure System 中是正确的,我遇到了一个案例,即 Jenkins 通过协议、IP 和端口与自己对话是“技术上有效的”,但我们有我们的 Jenkins 在反向代理/负载均衡器后面,并且该端口未公开,因此当插件尝试从我的浏览器提交 POST/重定向到 $JENKINS_URL 时,它超时并失败。一旦我更正了 URL,它就一直工作得很好!
    【解决方案2】:

    假设您正在运行 linux,您可以通过 'at' 命令使用 curl 调用 Jenkins rest API

    at 9:30 PM Fri
    
    curl -X POST JENKINS_URL/job/JOB_NAME/build \
      --data token=TOKEN \
      --data-urlencode json='{"parameter": [{"name":"id", "value":"123"},\
         {"name":"verbosity", "value":"high"}]}'^D
    job 2 at Fri Jan 29 21:30:00 2016
    

    那就一起看看

    at -c 2
    

    输出

    #!/bin/sh
    # atrun uid=501 gid=20
    
    #some environment
    
    SECURITYSESSIONID=186a8; export SECURITYSESSIONID
    _=/usr/bin/at; export _
    cd /xxxxxxx || {
         echo 'Execution directory inaccessible' >&2
         exit 1
    }
    OLDPWD=/xxxxxxxxx; export OLDPWD
    
        curl -X POST JENKINS_URL/job/JOB_NAME/build \
          --data token=TOKEN \
          --data-urlencode json='{"parameter": [{"name":"id", 
              "value":"123"}, {"name":"verbosity", "value":"high"}]}'
    

    REST API wiki

    【讨论】:

      猜你喜欢
      • 2019-11-24
      • 2013-01-12
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      相关资源
      最近更新 更多