GitHub Actions自动化部署
发表于更新于
CICDgithubGitHub Actions自动化部署
OHNII什么是 GitHub Actions
- 定义: GitHub 内置的自动化工作流平台,支持 CI(持续集成)/CD(持续部署)。
- 组成:
- workflow(工作流程): 持续集成一次运行的过程,就是一个 workflow(
.github/workflows 下的 yml 文件)
- job(任务): 一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
- step(步骤): 每个 job 由多个 step 构成,一步步完成。
- action(动作): 每个 step 可以依次执行一个或多个命令(action)。
基本结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| name: My Workflow
on字段也可以是事件的数组。 on: push: branches: [ main ] tags: [ 'v*' ] pull_request: branches: [ main ] schedule: - cron: '0 2 * * *' workflow_dispatch: inputs: environment: description: '部署环境' required: true default: 'staging'
env: NODE_VERSION: '18.x' DEPLOY_ENV: production
jobs: build: runs-on: ubuntu-latest timeout-minutes: 30 steps: - name: Checkout uses: actions/checkout@v4
|
on(触发条件)常见写法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| on: push
on: [push, pull_request]
on: push: branches: [ main ] tags: [ 'v*' ]
on: watch: types: [started]
on: schedule: - cron: "0 * * * *"
on: workflow_dispatch: inputs: env: description: '部署环境' required: true default: 'prod'
|
jobs(任务)关键点
- runs-on: 运行环境(必填)
- 支持:
ubuntu-latest, windows-latest, macos-latest
- needs: 依赖其它 job(控制顺序)
- timeout-minutes: 任务超时(默认上限 360 分钟)
- 并行/串行: 默认并行;用
needs 串行化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| jobs: first_job: name: First runs-on: ubuntu-latest steps: - run: echo "I am first"
second_job: name: Second needs: first_job runs-on: macos-latest
third_job: name: Third needs: [first_job, second_job] runs-on: windows-latest
|
steps
steps字段指定每个 Job 的运行步骤,可以包含一个或多个步骤。每个步骤都可以指定name、run、env、id、uses、with、continue-on-error、continue-on-error字段。
1 2 3 4 5 6 7 8
| name: 步骤名称 env: 该步骤所需的环境变量 run: 该步骤运行的命令,如上面的例子:bash输出环境变量 id : 每个步骤的唯一标识符 uses : 使用哪个 action with : 指定某个 action 可能需要输入的参数 continue-on-error : 设置为 true 允许此步骤失败 job 仍然通过 timeout-minutes : step 的超时分钟数
|
极简完整示例(入门可用)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| name: say hi
on: [push, pull_request]
jobs: my-job: name: My Job Say Hi runs-on: ubuntu-latest steps: - name: Say Hi env: START_STR: Hi there! My name is USER_NAME: Ber END_STR: Thank you run: | echo $START_STR $USER_NAME $END_STR.
|
当使用workflow时,一些不能公开的密码、token等,可以使用Secrets 进行保存,在项目仓库中settings->Secrets ->new repository secrets
常用实践建议
- 锁版本:
actions/checkout@v4 这类 action 固定大版本,避免破坏性更新。
- 分环境: 用
workflow_dispatch.inputs/env 区分 staging/prod。
- 缓存: Node/Go 等项目可用官方缓存 action 加速依赖安装。
- 安全: 密钥放
Settings > Secrets and variables,在 yml 用 ${{ secrets.NAME }}。
- 并发控制: 用
concurrency 防止重复跑部署。
- 条件执行:
if: 过滤分支、标签、事件类型。