近期做了部署了一个基于Hugo的静态网站,每次更新完文章要手动生成网站,推送至服务器很麻烦,因此决定借助GitHub Actions进行CI/CD。 GitHub Actions官网简介,简而言之这是一款Github自带的CI/CD,帮助用户进行持续集成开发与部署。 GitHub Marketplace Actions里面包含了各种用于GitHub Action的模块,通过使用模块方便编辑yaml文件,省去很多造轮子的时间。
现有环境
服务器
静态网站文件夹/www/hugo/public未转换前的Markdown文章文件夹/www/hugo/content/post已安装hugo,在/www/hugo下执行hugo命令即可将Markdown文件转换为静态网页 GitHub仓库
content文件夹包含由本地推送到远程仓库的Markdown文件
流程分析
当新文章从从本地push到GitHub仓库或者新的pull request被合并时,将仓库的content文件夹镜像同步到服务器的/www/hugo/content文件夹并执行hugo命令生成静态网页。
yaml文件及分析
name: CI
on:
push:
branches: [ master
]
jobs:
build:
runs-on: ubuntu
-latest
steps:
- uses: actions/checkout@master
- name: Install SSH Key
uses: shimataro/ssh
-key
-action@v2
with:
key: $
{{ secrets.SSH_KEY
}}
known_hosts: $
{{ secrets.KNOWN_HOSTS
}}
- name: rsync
run: rsync
-a
--delete content/ ec2
-user@$
{{secrets.HOST
}:/www/hugo/content/
- name: make
run: ssh ec2
-user@$
{{sercerts.HOST
}} 'cd /www/hugo && sudo ./hugo'