本文主要记录使用 Github Actions 排程执行程式的学习心得,文章中如有不正确还请见谅并请让我知道。
Github Actions 简介
GitHub Actions ,GitHub 平台内建的自动化工具,主要用于 CICD,不过特性是只要在发生特定事件时,就会自动执行定义的任务,所以也能用于排程执行程式。
- Workflow(工作流程)一套自动化流程,定义在一个 YAML 档案中,存放在专案的 .github/workflows/ 路径下。工作流程会根据触发条件(例如:push、pull request、或定时任务)自动执行。
- Jobs(工作)一个 Workflow 可以包含一个或多个工作。每个工作是由一连串步骤组成,并会在同一台 Runner (执行器)上执行。工作之间可以设置依赖关系,看要 Serial 或 Parallel 执行。
- Steps(步骤)步骤是工作中执行的最小单位,可以是一个 Action 或指令。
- Actions(动作)Action 是可重用的程式码模组,GitHub Marketplace 有许多现成的 Action 可以取用,可以透过 use 引用。
- Runner(执行器)Runner 是执行工作(Job)的虚拟机或容器,可以选择不同的作业系统。
- Trigger(触发条件)透过 on 设定,可以定义哪些事件(例如:程式码推送、发起 Pull Request、或排程任务)触发 Workflow。
排程执行程式
要排程执行程式即是把 Trigger 设定在特定时间点到点时触发 Workflow 。在专案的 .github/workflows/ 路径下建立 YAML 档,例如在每天00:00时触发,包含一个 job 其中设定了底下的 steps 在 runner 设定为 ubuntu 最新版本的环境下运行,而共定义了有3个 step 在 job 中:
name: Hello World
on: # Trigger
schedule:
- cron: \'0 16 * * *\' # cron 语法 UTC 16:00 = 台湾 UTC+8 = 00:00,每天执行
workflow_dispatch: # 允许手动触发
jobs: #Jobs
hello: # first job\'s name
runs-on: ubuntu-latest # Runner 设定
steps: #定义步骤
- name: 检出程式码
uses: actions/checkout@v4 #官方提供的 Action,用来 fetch 程式码,让后续步骤可以存取程式码。
- name: 设定 Python
uses: actions/setup-python@v4
with:
python-version: \'3.13\'
- name: 执行程式
run: python helloWorld.py
结语
之所以想要排程执行程式是为了自动化爬虫,希望接续之前的文章 PTT爬虫 - 表特版,不过以我的使用情境来说这个方法是不可行的,因为PTT会封锁云端IP(情报来源 pyptt : ptt第三方API 的readme文件;直接搜寻PTT robots txt/爬虫规范找不到甚么结果),所以后来还是选择在本地排程执行,不过还是把对 Github Actions 的理解和基础的设定记录了下来。