Bootstrap

如何在gitlab cicd中实现每月10号上午执行

在 GitLab CI/CD 中,可以通过设置定时触发器(Schedules)和脚本中的时间判断逻辑结合,确保任务只在每月 10 号的上午运行。

以下是实现的步骤:


1. 设置定时触发器

GitLab 提供了 Schedules 功能,可以指定每天定时运行某个任务。你可以设置一个定时任务,每天在上午运行一次,例如早上 8 点。

操作步骤:

  1. 进入项目的 CI/CD -> Schedules 页面。
  2. 点击 New schedule
  3. 设置 Schedule 时间为每天上午,比如 08:00
  4. Cron 表达式中选择合适的时间间隔。
  5. 保存设置。

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. 解释代码逻辑

  1. date 命令

    • date +%d 获取当前日期(例如 10)。
    • date +%H 获取当前小时(24 小时制,0-23)。
  2. 判断逻辑

    • 如果当前日期是 10 且小时小于 12,继续执行任务。
    • 否则打印信息并退出任务(exit 0),退出不会标记任务失败。
  3. 分阶段执行

    • 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 确保任务定时触发,而脚本中的逻辑提供额外的保障,避免错误触发。

;