詹金斯 - 每个月结束前2天的工作

时间:2018-03-15 09:08:09

标签: date jenkins scheduled-tasks

美好的一天,

我需要在每月结束前两天 Jenkins开始工作

问题类似于问题: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,发现' '

任何詹金斯大师都能指点一下吗?

修改: 在下面的回答的帮助下,我提出了以下解决方案:

  • 添加字符串参数Autorun
  • 将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 个答案:

答案 0 :(得分:1)

不幸的是,Jenkins Build触发器不支持在其中编写bash脚本。但仍有一些选择,具体取决于您对“月末前2天”的要求的严格程度。

选项1:

每月只运行一次工作:

@monthly

选项2:

在每个月的倒数第二天运行工作:

0 23 27-30 * *

选项3

将其作为this

中的3个单独作业运行

这将要求您在作业的脚本部分的开头添加日期检查,如果不是该月的倒数第二天则退出。

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

答案 1 :(得分:0)

没有必要设置三个作业。 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 *

这对于二月还是有缺点,就是闰年跑两次,比较难避免。如果这是一个问题,但在闰年提前一天运行不是问题,您可以使用 27 而不是 27-28