初尝Github Actions

952 字
5 分钟
初尝Github Actions

GitHub Actions 是 GitHub 提供的 CI/CD 服务,早在 2018 年 10 月就已推出,但我一直未曾使用。最近遇到一个需求(如何更优雅地部署博客),才终于想起了它。

目前我的站点放在自己的服务器上,每次都要先在本地编译,再手动打包上传到服务器,接着解压到 public 文件夹,整个过程有点繁琐。而博客的源码已经托管在 GitHub 上,我想,如果每次 push 后都能自动完成部署,那就太好了。于是研究了 Github Actions,顺便把一些内容记录下来,方便日后查阅。

Github Actions 是什么#

一个 CI/CD 流程里要做的事情可多了,比如运行测试、登录 SSH、发布应用等等。GitHub 把这些具体任务都叫作 Actions。很多基础操作,我们没必要自己造轮子,直接在 GitHub Actions 市场里搜一下就好。要是有人已经写好了,直接拿来用

  1. Github Actions 市场:https://github.com/marketplace?type=actions

Github Actions 术语#

  1. workflow:持续集成一次运行的过程,就是一个 workflow
  2. job:一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务
  3. step:每个 job 由多个 step 构成,一步步完成
  4. action:每个 step 可以依次执行一个或多个命令(action)

workflow 文件#

workflow 文件
workflow 文件

Actions 配置文件叫 workflow 文件,放在代码根目录 .github/workflows 下,workflow 使用的是 YAML 格式,比如 deploy.yml。

Github 只要发现 .github/workflows 下有 .yml 文件就会自动允许这个文件。另外,workflow 配置文件有很多字段,详见官方文档,本文只记录这次我需要用的字段。

(1)name#

name字段是 workflow 的名称,如果省略该字段,默认为当前 workflow 的文件名

(2)on#

指定触发 workflow 的条件,通常是某些事件,GitHub Actions 也支持外部事件触发,或者定时运行

on.<push|pull_request>.<tags|branches>:指定触发事件时,可以限定分支或标签

Terminal window
# 只有main分支发生push事件时,才会触发 workflow
on:
push:
branches:
- main

(3)jobs#

workflow 文件的主体是jobs字段,表示要执行的一项或多项任务。

  • jobs.<job_id>.name
Terminal window
# jobs 包含2个任务,job_id分别是 m_1_job 和 m_2_job
jobs:
m_1_job:
name: my first job
m_2_job:
name: my second job
  • jobs.<job_id>.needs

needs 字段指定当前任务的依赖关系,即运行顺序,下面这 3 个 job,job2 必须等待 job1 执行完才会执行,job3 必须等待 job1 和 job2 执行完才会执行

Terminal window
jobs:
m_1_job:
name: my first job
m_2_job:
name: my second job
needs: [m_1_job] # [!code ++]
m_3_job:
name: my third job
needs: [m_1_job,m_2_job] #[!code ++]
  • jobs.<job_id>.runs-on

指定运行所需要的虚拟机环境

Terminal window
# 指定它运行在 Ubuntu 最新版环境
runs-on: ubuntu-latest
  • jobs.<job_id>.steps

指定每个 Job 的运行步骤,可以包含一个或多个步骤。每个步骤都可以指定以下字段:

  1. jobs.<job_id>.steps.name 名称
  2. jobs.<job_id>.steps.run 命令或action
  3. jobs.<job_id>.steps.env 环境变量
  4. jobs.<job_id>.steps.uses 选哪个工具
  5. jobs.<job_id>.steps.with 传递参数,with 只能用在 uses 后面(即调用第三方 Action 时)
Terminal window
steps:
- name: 拉代码
uses: actions/checkout@v4
- name: 安装 Node
uses: actions/setup-node@v4 # 使用 GitHub 官方提供的 setup-node 动作
with:
node-version: 20 # 告诉它装 Node 20 版本

我的 workflow 配置文件#

.github/workflows/deploy.yml
name: Deploy Blog
# 只有main分支发生push事件时,才会触发 workflow
on:
push:
branches:
- main
jobs:
build-deploy:
runs-on: ubuntu-latest
steps:
- name: 拉代码
uses: actions/checkout@v4
- name: 安装 Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: 安装依赖
run: npm install
- name: 构建
run: npm run build
- name: 清空服务器目录
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
script: |
rm -rf /opt/1panel/www/sites/mgrowup.com/index/*
- name: 上传文件
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
source: "dist/*"
target: "/opt/1panel/www/sites/mgrowup.com/index"

Github仓库配置环境变量#

打开Github仓库,点击设置,在左侧找到 “Secrets and variables”

Github仓库配置环境变量
Github仓库配置环境变量

(完)


支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
初尝Github Actions
https://mgrowup.com/posts/git-github/getting-started-with-github-actions/
作者
Donghai
发布于
2026-04-28
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Donghai
Hello, I'm Donghai.
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签
最新动态
站点统计
文章
85
分类
12
标签
43
总字数
121,905
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.5
文章许可
CC BY-NC-SA 4.0