Skip to content
Donghai's Blog
Go back

初尝Github Actions

GitHub Actions 是 GitHub 提供的 CI/CD 服务,早在 2018 年 10 月就已推出,但我一直未曾使用。最近遇到一个需求(如何更优雅地部署博客),才终于想起了它。目前我的站点放在自己的服务器上,每次都要先在本地编译,再手动打包上传到服务器,接着解压到 public 文件夹,整个过程有点繁琐。而博客的源码已经托管在 GitHub 上,我想,如果每次 push 后都能自动完成部署,那就太好了。于是研究了下 Github Actions,顺便把一些内容记录下来,方便日后查阅

封面图-Github Action

Table of contents

Open Table of contents

Github Actions 是什么

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

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

Github Actions 术语

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

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>:指定触发事件时,可以限定分支或标签

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

(3)jobs

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

# 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

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

jobs:
  m_1_job:
    name: my first job
  m_2_job:
    name: my second job
    needs: [m_1_job] 
  m_3_job:
    name: my third job
    needs: [m_1_job,m_2_job] 

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

# 指定它运行在 Ubuntu 最新版环境
runs-on: ubuntu-latest

指定每个 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 时)
steps:
  - name: 拉代码
    uses: actions/checkout@v4
  - name: 安装 Node
    uses: actions/setup-node@v4 # 使用 GitHub 官方提供的 setup-node 动作
    with:
      node-version: 20 # 告诉它装 Node 20 版本

我的 workflow 配置文件

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/workflows/deploy.yml

Github仓库配置环境变量

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

Github仓库配置环境变量


Share this post on:

Next Post
AstroPaper主题添加Waline评论
BlogsClub Meo Forever Blog