GitHub Actions 快速手册

github仓库读取到action配置文件之后,首先注册事件处理。对应事件触发会执行对应的工作流,工作流定义了很多jobs,以及环境、权限。jobs中是具体的命令,包括在哪些执行,用什么执行,执行的结果处理。以及执行的内容:由步骤与执行动作构成。
事件驱动模型
通过维护事件流,将对应事件的处理方法绑定,等待事件自动触发执行。
可以在配置文件中,详细指明触发事件的特征:
-
代码事件:如
push(代码推送)、pull_request(拉取请求)。 -
定时事件:通过
schedule关键词和 Cron 语法,实现定时执行,例如每周一凌晨2点。 -
手动事件:使用
workflow_dispatch,允许你通过 GitHub 的 Actions 标签页手动点击按钮来触发工作流。 -
其他事件:响应如
release(发布)、issue_comment(Issue评论)等多种 GitHub 活动。
工作流
一个事件触发那么对应一个工作流的执行。工作流负责具体要执行的操作定义。
工作流 (Workflow) 配置 - 紫色节点。工作流中主要负责的是整个环境的配置。
- 环境变量
- 权限控制
- 名称定义
而更具体的操作模块化为 job 任务。
可以添加两种,Repository Secrets 作用于整个代码仓库,而 Environment Secrets 则与特定的“环境”(如 dev, staging, production)绑定,提供了更高级的保护。
Job任务
内部具体的执行同样不重要,先关注任务本身的执行。任务所需的条件,任务完成后的成果的标准。使得任务能在工作流中与其他任务协作。
-
runs-on:指定作业运行在哪种运行器(Runner) 上。 -
needs:定义作业间的依赖关系。例如,build作业needs: test表示它必须等test作业成功后才会运行。 -
strategy:使用矩阵策略(Matrix Strategy),让你可以在多个环境(如不同 Node.js 版本、不同操作系统)下并行测试。 -
outputs:定义作业的输出,可以被后续依赖它的作业使用。
通常可以使用Github提供的托管,ubuntu-latest、windows-latest 或 macos-latest 等预定义环境。
或者我们可以提供自己机器的连接、调用方式作为运行器。
步骤与动作
步骤是作业内的最小执行单元,按顺序运行。步骤的核心就是执行一个“动作(Action)”或一段 Shell 命令。
-
uses:引用一个预构建的动作。可以从 GitHub Marketplace 选用社区分享的现成 Action,比如actions/checkout@v4用于拉取代码,或appleboy/ssh-action@v1用于通过 SSH 连接服务器。 -
with:为uses引用的 Action 传入输入参数,如node-version: '20'。 -
env:为当前步骤设置环境变量。 -
if:设置条件执行。例如,if: failure()表示仅当上一步失败时才运行。 -
id:为步骤设置一个唯一标识符,方便后续步骤引用它的输出。
案例
push 后调用云服务器同步与编译
部署github action 实现在git push 到 github 之后,github action 自动帮我同步到我的云服务器,并帮我调用云服务器上zola build来ssg新的静态内容。
思路如下:
- 需要让github actions 通过ssh连接到云服务器。
- 在目标目录下执行
git pull和zola build两条命令。
在仓库的 .github/workflows/deploy.yml中
name: Remote Zola Build
# 触发条件:当代码推送到 main 分支时执行
on:
push:
branches:
- main
jobs:
build-on-vps: # 自定义的作业 ID
runs-on: ubuntu-latest # 连接到云服务器的步骤都是在 ubuntu:latest上执行
steps:
- name: Connect VPS and Build
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.SERVER_PORT }}
script: |
cd /var/www/blog
git pull origin main
zola build