github actions 自动化部署
引言
工具都是懒人发明的。
之前的网站是 vuepress
到现在的 vitepress
生成静态页面,部署都是手动部署,因为我更新的不算频繁,因此都忍下来了。在周末在搞服务器,终于忍无可忍,顺便把它 “搞了”——实现自动化部署。
代码是托管在 github
上,因此使用 Github Actions 自动化工作流程。
寻找一些辅助 actions
可以从 🏪 workflow 扩展 找。
准备
先简单了解一下 Github Actions
语法。
name
:workflow 的名称。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
第二步,案例配置
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/"
提示
不要直接在工作流 workflow
写入重要信息,比如密码,ssh等。
使用 github secrets
设置环境变量进行传入敏感信息,例如案例中的 secrets.SSH_PRIVATE_KEY
。
github secrets 设置
xxx项目👉Settings👉Secrets👉Actions
有时候会遇到这种错误时,
- 首先验证你的 ssh 或 rsync 配置是否有错。
- 检查你的公钥是否已经放到
authorized_keys
文件中,假如你是使用ssh-keygen -m PEM -t rsa -b 4096
生成的密钥,可以通过cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
复制到文件中。