代码之家  ›  专栏  ›  技术社区  ›  pinegulf

Jenkins-每个月底前2天运行作业

  •  1
  • pinegulf  · 技术社区  · 6 年前

    早上好,

    我需要运行作业 詹金斯月刊,月底前两天

    该问题类似于问题: run cron job on end of every month ,但在我的情况下,接受的回答是不可接受的。(因为修改生产代码超出了范围,人们仍然希望在规定的时间外执行。)

    我在通用crontab环境中发现了类似的问题和潜在的解决方案:

    0 23 27-30 * * [ $(date +\%d -d "2 days") == 01 ]
    

    但Jenkins不支持这种语法,给了我错误消息:

    无效输入:“0 23 27-30**[$(日期+\%d-d“2天”)==01]”:行1:15:应为EOF,找到“”

    有没有Jenkins大师给我们指点?

    编辑 : 在下面答案的帮助下,我想出了以下解决方案:

    • 添加字符串参数自动运行
    • 将Crontab设置为 H 4 26-30 * *
    • 修改的执行脚本:

    _

     if (($Autorun == 0)) || (( [ $(date +\%d -d "2 days") == 01 ] && $Autorun == 1  )); then 
       My_execute stuff
    else
       echo "Dummy run, autorun only 2 days before end of month."
       exit 1
    fi
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Steve Robinson-Burns    6 年前

    不幸的是,Jenkins构建触发器不支持在其中编写bash脚本。不过,根据您对“月末前2天”的要求有多严格,仍然有一些选择。

    选项1:

    每月仅运行一次我的作业:

    @monthly
    

    选项2:

    在每月的第二天到最后一天运行作业:

    0 23 27-30**

    选项3 :

    将其作为3个单独的作业运行,如中所示 this

    这将要求您在作业的脚本部分开始时添加日期检查,如果不是当月的第二天到最后一天,则退出。

    有关更多信息,您可以“配置”作业并单击蓝色问号符号,该符号显示了jenkins如何解释cron语法的大量信息。

        2
  •  2
  •   Socci    3 年前

    没有必要设立三个职位。在Jenkins中,一个作业可以有多个cron表达式: enter image description here 底部的线条显示这应该可以按需要工作。

    因此,您可以使用以下内容:

    0 23 30 1,3,5,7,8,10,12 *
    0 23 29 4,6,9,11 *
    0 23 27-28 2 *
    

    这仍然存在着2月份的缺点,即它在闰年运行两次,这是很难避免的。如果这是一个问题,但在闰年提前一天运行不是问题,您可以使用 27 而不是 27-28