使用 Github Action 自动部署
...大约 3 分钟
之前一直都是手动部署至 github pages 和云服务器,虽然有写脚本但是还不够方便,于是想到使用 Github Action 进行自动化部署,只需 Push 即可触发。
1. Github Action
GitHub Actions 是一种持续集成和持续交付 (CI/CD) 平台,可用于自动执行生成、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。
工作流 Workflow
工作流程是一个可配置的自动化过程,它将运行一个或多个作业。 工作流程由签入到存储库的 YAML 文件定义,并在存储库中的事件触发时运行,也可以手动触发,或按定义的时间表触发。
工作流程在存储库的 .github/workflows
目录中定义,存储库可以有多个工作流程,每个工作流程都可以执行不同的任务集。
事件 Events
事件是存储库中触发工作流程运行的特定活动。
作业 Actions
作业是工作流中在同一运行器上执行的一组步骤。
操作 Runners
操作是用于 GitHub Actions 平台的自定义应用程序,它执行复杂但经常重复的任务。
2. 创建
在仓库界面选择 Actions
, 创建自己的工作流。
name: Deploy
on:
push:
branches:
- main
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
# 如果你文档需要 Git 子模块,取消注释下一行
# submodules: true
- name: install pnpm
uses: pnpm/action-setup@v2
with:
version: 8
run_install: true
- name: setup Node.js
uses: actions/setup-node@v3
with:
node-version: 18
cache: pnpm
- name: Build gh pages
env:
NODE_OPTIONS: --max_old_space_size=8192
SITE: ${{ vars.GH_SITE }}
GTAG_ID: ${{ vars.GH_GTAG_ID }}
G_SITE_VERI: ${{ vars.GH_G_SITE_VERI }}
run: |
pnpm run docs:build
> src/.vuepress/dist/.nojekyll
- name: Deploy gh pages
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.ACTIONS_PERSONAL_TOKEN }}
external_repository: dreamjz/dreamjz.github.io
publish_branch: vuepress-v2-theme-hope # default: gh-pages
publish_dir: src/.vuepress/dist
- name: Build blog pages
env:
NODE_OPTIONS: --max_old_space_size=8192
SITE: ${{ vars.SITE }}
GTAG_ID: ${{ vars.GTAG_ID }}
G_SITE_VERI: ${{ vars.G_SITE_VERI }}
run: |
pnpm run docs:build
- name: Deploy blog pages
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.ACTIONS_PERSONAL_TOKEN }}
external_repository: dreamjz/xxx
publish_branch: vuepress-v2-theme-hope # default: gh-pages
publish_dir: src/.vuepress/dist
- name: install ssh keys
# check this thread to understand why its needed:
# https://stackoverflow.com/a/70447517
run: |
install -m 600 -D /dev/null ~/.ssh/id_rsa
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
ssh-keyscan -H ${{ secrets.SSH_HOST }} > ~/.ssh/known_hosts
- name: connect and pull
run: |
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} \
"cd ${{ secrets.WORK_DIR }} && git fetch && git checkout origin/${{ vars.WORK_BRANCH }} && exit"
- name: cleanup
run: rm -rf ~/.ssh
name
: 工作流名称on
: 触发条件,可以有多个push
: push 至仓库时触发,branch
:指定触发的分支workflow_dispatch
: 手动触发
jobs
: 作业流程Deploy
: 作业id (job_id)runs-on
: 运行器(Runner)steps
: 步骤env
: 环境变量uses
: 调用现有的 jobswith
: 参数
run
: 执行指令
secrets
: 加密变量,以${secrets.xxx}
形式调用vars
: 变量,以${vars.xxx}
形式调用, 在Settings-> Secrets and Variables-> Action
中配置
Reference
Powered by Waline v2.15.2