在 GitLab CI/CD 中,可以通过设置定时触发器(Schedules)和脚本中的时间判断逻辑结合,确保任务只在每月 10 号的上午运行。
以下是实现的步骤:
1. 设置定时触发器
GitLab 提供了 Schedules 功能,可以指定每天定时运行某个任务。你可以设置一个定时任务,每天在上午运行一次,例如早上 8 点。
操作步骤:
- 进入项目的 CI/CD -> Schedules 页面。
- 点击 New schedule。
- 设置 Schedule 时间为每天上午,比如
08:00
。 - 在 Cron 表达式中选择合适的时间间隔。
- 保存设置。
2. 在 .gitlab-ci.yml
文件中添加时间判断逻辑
在 GitLab CI 的脚本中,通过 date
命令检查当前是否是每月 10 号上午。如果条件不满足,直接退出任务。
以下是一个示例:
stages:
- check_date
- run_task
check_date:
stage: check_date
script:
- echo "Checking if it's the 10th and before noon..."
# 获取当前时间信息
- TODAY=$(date +%d)
- HOUR=$(date +%H)
# 判断是否是10号且上午
- if [ "$TODAY" -eq 10 ] && [ "$HOUR" -lt 12 ]; then echo "Proceeding with the task"; else echo "Not the 10th morning, exiting..."; exit 0; fi
run_task:
stage: run_task
script:
- echo "Running the main task..."
- # 在这里放置实际任务脚本
needs:
- check_date
3. 解释代码逻辑
-
date
命令:date +%d
获取当前日期(例如10
)。date +%H
获取当前小时(24 小时制,0-23)。
-
判断逻辑:
- 如果当前日期是
10
且小时小于12
,继续执行任务。 - 否则打印信息并退出任务(
exit 0
),退出不会标记任务失败。
- 如果当前日期是
-
分阶段执行:
check_date
阶段检查日期。- 如果日期条件不符合,整个管道会安全结束,不运行后续任务。
示例输出
如果是每月 10 号上午:
Checking if it's the 10th and before noon...
Proceeding with the task
Running the main task...
如果不是每月 10 号上午:
Checking if it's the 10th and before noon...
Not the 10th morning, exiting...
总结
通过结合 Schedules 和脚本中的日期判断逻辑,可以确保任务只在每月 10 号上午执行。Schedules 确保任务定时触发,而脚本中的逻辑提供额外的保障,避免错误触发。