GitHub Action 定时任务执行时区处理

前言

GitHub Actions是一个用于持续集成和持续交付的平台,可自动执行生成、测试和部署流程。通过创建工作流程,您可以对每个拉取请求进行构建和测试,或将合并的请求部署到生产环境。

此外,GitHub Actions不仅仅适用于DevOps,还可在存储库发生其他事件时触发工作流程。例如,当有人在您的存储库中创建新问题时,您可以自动添加相应的标签。

GitHub提供了Linux、Windows和macOS虚拟机来运行工作流程,同时还支持自托管运行器,可以在您自己的数据中心或云基础架构中进行托管。

Github Actions 是很好用的工具,博主鳄鱼儿也写过几篇 Github Actions 文章。

定时任务------schedule

Github Actions 是可以执行定时任务,并且每月有免费额度,对于每日重复任务有奇妙之处,各位程序猿,想必都懂。

Github Actions 核心的能力在于触发工作流里的事件,schedule 这种类型可以定时执行任务事件。

yml 复制代码
name: Schedule Worker
on:
  schedule:
    - cron: '10 0,10 * * *' #每日8:10,18:10,两个时间点执行任务,注意时区,不可更改
jobs:
  work:
    runs-on: ubuntu-latest
    steps:
      - name: set beijing timezone
        uses: szenius/set-timezone@v1.2 # 设置虚拟环境的时区,可更改时区
        with:
          timezoneLinux: "Asia/Shanghai"
      - uses: actions/checkout@v3
      - name: Set up Python 3.9 # 使用python装配器
        uses: actions/setup-python@v2
        with:
          python-version: 3.9
      - name: requirements # 安装
        run: |
          python -m pip install --upgrade pip
          pip3 install -r requirements.txt
      - run: |
          python3 ./main.py # 执行

特别注意

  1. 因为 Github 是国际网站,默认时区是 UTC 时间(协调世界时间),大致时间是冰岛和英国的时区。UTC 比北京时间慢 8 小时,用目标时间减 8 就可以了。
  2. schedule 延迟问题:GitHub 的官方文档明确写了,schedule 是无法保证准时执行的。

冷知识

UTC(Coodinated Universal Time),协调世界时,又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称 UTC。

UTC 是现在全球通用的时间标准,全球各地都同意将各自的时间进行同步协调。UTC 时间是经过平均太阳时(以格林威治时间 GMT 为准)、地轴运动修正后的新时标以及以秒为单位的国际原子时所综合精算而成。

在军事中,协调世界时会使用"Z"来表示。又由于Z在无线电联络中使用"Zulu"作代称,协调世界时也会被称为"Zulu time"。

虚拟环境的时区设置

cron 字段的时区是无法更改的,但虚拟环境的时区,是能修改的。

set-timezone 是一个可以设置环境时区的 action。

set-timezone: github.com/szenius/set...

yml 复制代码
uses: szenius/set-timezone@v1.2
with:
  timezoneLinux: "Asia/Singapore"
  timezoneMacos: "Asia/Singapore"
  timezoneWindows: "Singapore Standard Time"

相关文档

相关推荐
Victor3563 小时前
MongoDB(2)MongoDB与传统关系型数据库的主要区别是什么?
后端
JaguarJack3 小时前
PHP 应用遭遇 DDoS 攻击时会发生什么 从入门到进阶的防护指南
后端·php·服务端
BingoGo3 小时前
PHP 应用遭遇 DDoS 攻击时会发生什么 从入门到进阶的防护指南
后端
Victor3563 小时前
MongoDB(3)什么是文档(Document)?
后端
牛奔5 小时前
Go 如何避免频繁抢占?
开发语言·后端·golang
想用offer打牌10 小时前
MCP (Model Context Protocol) 技术理解 - 第二篇
后端·aigc·mcp
KYGALYX11 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了11 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
爬山算法12 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
Moment12 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端