如何配置GitHub工作流在阿姆斯特丹时区(UTC+2)每周三10点运行
解决GitHub工作流在阿姆斯特丹时区周三10点运行的问题
GitHub Actions的schedule触发器仅支持UTC时区,无法直接配置阿姆斯特丹(欧洲中部时间CET/CEST,夏令时UTC+2、冬令时UTC+1)本地时间,以下是两种可行的替代方案:
方案一:双Cron表达式+夏令时/冬令时时间校验
针对阿姆斯特丹夏令时和冬令时的UTC偏移差异,配置两个Cron触发时间,再通过步骤校验本地时间,确保仅在目标时间执行核心任务:
name: Daily Hosting Release on: schedule: # 夏令时:阿姆斯特丹10点 = UTC 8点 - cron: '0 8 * * 3' # 冬令时:阿姆斯特丹10点 = UTC 9点 - cron: '0 9 * * 3' workflow_dispatch: env: CHANNEL: 'cloud' CHANGELOG_FILE: 'temp-changelog.txt' jobs: release: runs-on: ubuntu-latest steps: - name: 校验阿姆斯特丹本地时间 id: check-time run: | # 获取阿姆斯特丹时区的小时(24小时制)和星期(1=周一,3=周三) AMSTERDAM_HOUR=$(TZ="Europe/Amsterdam" date +%H) AMSTERDAM_WEEKDAY=$(TZ="Europe/Amsterdam" date +%u) # 仅当为周三10点时标记可执行任务 if [ "$AMSTERDAM_WEEKDAY" -eq 3 ] && [ "$AMSTERDAM_HOUR" -eq 10 ]; then echo "run_task=true" >> $GITHUB_OUTPUT else echo "run_task=false" >> $GITHUB_OUTPUT fi - name: 执行发布任务 if: steps.check-time.outputs.run_task == 'true' run: | # 在此添加你的发布逻辑,例如生成变更日志、部署等 echo "开始执行发布,当前阿姆斯特丹时间:$(TZ="Europe/Amsterdam" date)"
方案二:高频触发+本地时间校验
如果不想维护多个Cron表达式,可设置工作流每小时触发一次,再通过时间校验过滤出目标时间:
name: Daily Hosting Release on: schedule: # 每小时触发一次 - cron: '0 * * * *' workflow_dispatch: env: CHANNEL: 'cloud' CHANGELOG_FILE: 'temp-changelog.txt' jobs: release: runs-on: ubuntu-latest steps: - name: 校验阿姆斯特丹本地时间 id: check-time run: | AMSTERDAM_HOUR=$(TZ="Europe/Amsterdam" date +%H) AMSTERDAM_WEEKDAY=$(TZ="Europe/Amsterdam" date +%u) if [ "$AMSTERDAM_WEEKDAY" -eq 3 ] && [ "$AMSTERDAM_HOUR" -eq 10 ]; then echo "run_task=true" >> $GITHUB_OUTPUT else echo "run_task=false" >> $GITHUB_OUTPUT fi - name: 执行发布任务 if: steps.check-time.outputs.run_task == 'true' run: | echo "开始执行发布,当前阿姆斯特丹时间:$(TZ="Europe/Amsterdam" date)" # 在此添加你的发布逻辑
说明
- 两种方案均通过
TZ="Europe/Amsterdam"强制使用阿姆斯特丹时区获取时间,避免UTC转换误差 - 方案一的触发次数更少,更高效;方案二更省心,无需关注夏令时切换
内容的提问来源于stack exchange,提问作者DavSev
相关产品推荐
相关产品推荐

