github actions 自动化部署

github actions 自动化部署

Apr 05, 2024 ·
4 Min Read

引言

工具都是懒人发明的。

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

github actions
github actions

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

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

准备

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

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

实践

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

Terminal window
mkdir -p .github/workflows
cd ./.github/workflows
touch xxx.yml
github actions
github actions

第二步,案例配置

# 案例配置
# 工作流名称
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
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
rsync error
Last edited Feb 15