美好的一天,
我需要每月在月底前两天在 Jenkins 中运行作业。
该问题类似于问题:run cron job on end of every month ,但就我而言,接受的回应是 Not Acceptable 。 (因为修改生产代码超出了范围,人们仍然希望在规定时间之外执行它。)
我在通用 crontab 环境中发现了类似的问题和潜在的解决方案:
0 23 27-30 * * [ $(date +\%d -d "2 days") == 01 ]
但是 Jenkins 不支持这种语法,给我错误消息:
Invalid input: "0 23 27-30 * * [ $(date +\%d -d "2 days") == 01 ]": line 1:15: expecting EOF, found ' '
有没有 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
最佳答案
没有必要设置三个作业。 Jenkins 中一项作业可以有多个 cron 表达式: 底部的线显示这应该按预期工作。
所以你可以使用以下内容:
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
。
关于date - Jenkins - 每个月结束前 2 天运行作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49295240/