GitHub Actions 简单入门
2026/3/22大约 4 分钟
GitHub Actions 简单入门
GitHub Actions 是 GitHub 自带的自动化工具。
它能帮我们在代码发生变化时,自动执行一些流程,比如:
- 自动测试
- 自动构建
- 自动部署
- 自动同步文件到服务器
简单理解就是:
你提交代码,GitHub 检测到事件,然后按照你写好的流程自动执行。
workflow 放哪里
GitHub Actions 的配置文件统一放在:
.github/workflows/比如:
.github/workflows/deploy.yml
.github/workflows/test.yml只要文件放在这个目录下,GitHub 就会自动识别。
一个最简单的例子
name: Hello Actions
on:
push:
branches:
- main
jobs:
hello:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Say hello
run: echo "hello github actions"这段配置的意思是:
- 当代码推送到
main - 启动一个 Ubuntu 机器
- 拉取仓库代码
- 执行一条命令
常见结构
一个 workflow 里最常见的几个字段:
name
工作流名字:
name: Deploy Blogon
触发条件:
on:
push:
branches:
- main表示 push 到 main 时执行。
jobs
任务集合:
jobs:
build:
runs-on: ubuntu-lateststeps
任务中的步骤:
steps:
- uses: actions/checkout@v4
- run: npm install
- run: npm run buildGitHub 里怎么配置
这个问题最关键。
通常你要配两类东西:
- workflow 文件
- 仓库里的 Secrets / Variables
1. 配 workflow 文件
就是在项目里创建:
.github/workflows/xxx.yml然后 push 到 GitHub。
2. 配 Secrets
如果 workflow 里需要敏感信息,比如:
- SSH 私钥
- 服务器密码
- API Token
这些不要写死在 .yml 文件里,而是放到 GitHub 的:
Settings -> Secrets and variables -> Actions然后选择:
SecretsNew repository secret
例如可以添加:
SSH_PRIVATE_KEYSERVER_IPSERVER_USER
不过更推荐这样分:
- 敏感信息放
Secrets - 普通配置放
Variables
Secrets 和 Variables 的区别
Secrets
适合放敏感数据:
- 私钥
- Token
- 密码
写法:
${{ secrets.SSH_PRIVATE_KEY }}Variables
适合放普通配置:
- 服务器 IP
- 用户名
- 部署目录
写法:
${{ vars.SERVER_IP }}env
适合放当前 workflow 内部用的小变量:
env:
APP_NAME: blogRag使用时:
$APP_NAME${{ }} 是什么
GitHub Actions 里的 ${{ }} 是表达式语法。
它的作用就是在 workflow 运行时,读取 GitHub 上下文里的值。
例如:
${{ github.ref }}
${{ github.repository }}
${{ secrets.SSH_PRIVATE_KEY }}
${{ vars.SERVER_IP }}常见来源有几个:
github.xxxsecrets.xxxvars.xxxenv.xxxmatrix.xxx
${{ }} 常见放哪里
1. 放在 with 里
- name: Deploy
uses: appleboy/ssh-action@v1
with:
host: ${{ vars.SERVER_IP }}
username: ${{ vars.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}这是最常见的写法。
2. 放在 if 条件里
if: github.ref == 'refs/heads/main'或者:
if: ${{ github.ref == 'refs/heads/main' }}3. 放在 env 里
env:
SERVER_IP: ${{ vars.SERVER_IP }}然后在 shell 里用:
echo $SERVER_IP4. 放在 run 命令里
- name: Print branch
run: echo "${{ github.ref }}"一个部署到服务器的例子
下面这个例子更接近真实项目:
name: Deploy Blog
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Sync files to server
uses: easingthemes/ssh-deploy@v5.0.3
with:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
SOURCE: "dist/"
REMOTE_HOST: ${{ vars.SERVER_IP }}
REMOTE_USER: ${{ vars.SERVER_USER }}
TARGET: "/var/www/blog/"这里面:
SSH_PRIVATE_KEY应该放到 GitHub SecretsSERVER_IP、SERVER_USER可以放到 GitHub VariablesTARGET如果不常改,也可以直接写死
你的博客和 blogRag 场景怎么配
像你现在这个项目,比较适合这样配:
Secrets
放敏感内容:
SSH_PRIVATE_KEY
Variables
放普通配置:
SERVER_IPSERVER_USER
workflow 里使用
- name: Sync blog files to RAG server
uses: easingthemes/ssh-deploy@v5.0.3
with:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
SOURCE: "src/blogs/"
REMOTE_HOST: ${{ vars.SERVER_IP }}
REMOTE_USER: ${{ vars.SERVER_USER }}
TARGET: "/opt/blogRag/blog-content/"然后再执行:
- name: Trigger RAG update
uses: appleboy/ssh-action@v1
with:
host: ${{ vars.SERVER_IP }}
username: ${{ vars.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
curl -s -X POST http://127.0.0.1:8000/api/v1/index/update这样就能做到:
- 博客文章 push 后自动同步到服务器
- 自动触发
blogRag更新索引
常见问题
1. 为什么拿不到 secret
先检查:
- 名字有没有写错
- 是不是放在当前仓库
- fork 的 PR 默认不能直接拿到 secrets
2. 为什么 ${{ vars.xxx }} 是空
先检查:
- 有没有在
Settings -> Secrets and variables -> Actions -> Variables中创建 - 名字是否一致
3. 为什么本地改了 workflow 没生效
因为 workflow 必须先提交并 push 到 GitHub,远程才会按新配置执行。
4. Secrets 能不能直接写到仓库里
不建议,尤其是私钥、Token、密码,应该统一放到 GitHub Secrets。
总结
GitHub Actions 本质上就是:
- 用
.github/workflows/*.yml定义自动化流程 - 用
Secrets和Variables管理配置 - 用
${{ }}在 workflow 里取值
如果只是入门,先记住下面这几个最重要的点就够了:
- workflow 文件放
.github/workflows/ - 敏感信息放
secrets - 普通配置放
vars ${{ }}用来读取这些值
掌握这几个之后,再去写自动测试、自动部署、自动同步就会轻松很多。
