Skip to content

github actions 自动化部署

引言

工具都是懒人发明的。

之前的网站是 vuepress 到现在的 vitepress 生成静态页面,部署都是手动部署,因为我更新的不算频繁,因此都忍下来了。在周末在搞服务器,终于忍无可忍,顺便把它 “搞了”——实现自动化部署

代码是托管在 github 上,因此使用 Github Actions 自动化工作流程。

寻找一些辅助 actions 可以从 🏪 workflow 扩展 找。

准备

先简单了解一下 Github Actions 语法。

  • nameworkflow 的名称
  • on:触发 workflow 执行 event 的名称。例如 push 推送时候;pull_request 拉取请求。
  • jobs作业,一个 workflow 由一个或多个 jobs 组成。
    • 每一个 job 都需要有一个唯一标识,例 jobs.<job_id>
    • 使用 jobs.<job_id>.name 为作业设置名称,该名称显示在 GitHub UI 中。
  • steps每个 job 由多个 step 构成,它会从上至下依次执行。它可以运行 commands 命令行命令、step tasks 环境配置命令、action(官方或开发者共享的action)。

大致就由这几部分组成,更多配置或语法可以查阅 官方文档 ,或者这里推荐一篇文章 Github Action 精华指南

实践

第一步,在项目根目录 创建 .github/workflows 文件夹,然后在里面创建一个 xxx.yml 文件

sh
mkdir -p .github/workflows
cd ./.github/workflows
touch xxx.yml

github actions

第二步,案例配置

yaml
# 案例配置
# 工作流名称
name: 'deploy'

on:
  # 推送触发器,例如:这里表示的是 监听 master 分支推送,而且只有 paths 路径下的文件有修改的推送才会执行这个 workflows
  push:
    branches:
      - master
    paths:
      - 'docs/**/**'
      - 'package.json'

# 作业
jobs:
	# job id
  build-and-deploy:
  	# 运行环境,意味着作业将在 GitHub 托管的最新版本的 Ubuntu Linux 上运行
    runs-on: ubuntu-latest
    steps:
      # 检查分支 @v2 代表 actions 的版本,官方建议写上。
      - uses: actions/checkout@v2
      # 安装node
      - uses: actions/setup-node@v3
        with:
        	# 版本
          node-version: 14
          cache: yarn
      - run: yarn install --frozen-lockfile
      # 打包
      - name: Build
        run: yarn build
      # 部署到云服务器
      - name: Deploy to Server
      	# 使用 别人共享的 action,文档https://github.com/marketplace/actions/ssh-deploy
        uses: easingthemes/ssh-deploy@main
        env:
        	# ssh 私钥
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
          ARGS: "-rltgoDzvO --delete"
          # 源目录,相对于$GITHUB_WORKSPACE根目录的路径
          SOURCE: docs/.vitepress/dist/
          # 主机,比如 127.0.0.1
          REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
          # 登录名,比如 root
          REMOTE_USER: ${{ secrets.REMOTE_USER }}
          # 部署目标路径(相对于服务器) 比如 /data
          TARGET: ${{ secrets.REMOTE_TARGET }}
          # 指定排除上传的文件
          EXCLUDE: "/node_modules/"

github actions

提示

不要直接在工作流 workflow 写入重要信息,比如密码,ssh等。

使用 github secrets 设置环境变量进行传入敏感信息,例如案例中的 secrets.SSH_PRIVATE_KEY

github secrets 设置

xxx项目👉Settings👉Secrets👉Actions

github actions


有时候会遇到这种错误时,

  1. 首先验证你的 ssh 或 rsync 配置是否有错。
  2. 检查你的公钥是否已经放到 authorized_keys 文件中,假如你是使用 ssh-keygen -m PEM -t rsa -b 4096 生成的密钥,可以通过 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 复制到文件中。

rsync error

Released under the MIT License.