基于GitHub Actions、Hugo的静态网站CICD实践

tech2022-07-15  181

近期做了部署了一个基于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 #push时执行,由于pull request被合并时默认执行push,因此只限定push为触发行为即可 on: push: branches: [ master ] #工作流 jobs: # 命名为build的单个job build: # 选定运行环境为Ubuntu最新版本 runs-on: ubuntu-latest #步骤 steps: #uses用来调用GitHub Marketplace中的模块,此模块用于选择分支 - uses: actions/checkout@master #此模块用于使用私钥访问远程主机 #key和known_host的值均在仓库的setting-sercerts中配置 #key为私钥,known_host使用ssh-keyscan host命令获取 - name: Install SSH Key uses: shimataro/ssh-key-action@v2 with: key: ${{ secrets.SSH_KEY }} known_hosts: ${{ secrets.KNOWN_HOSTS }} #执行同步任务,host在setting-sercerts中配置 - 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'
最新回复(0)