本文最后更新于 2024-06-27T17:13:01+08:00
在上一篇文章中,谷月姐费了九牛二虎之力,终于把我的博客(以下简称本博 )同时部署到腾讯云 COS、Cloudflare Pages,并用 DNSPod 实现了双线解析域名,把境内访问解析到腾讯云 COS,把境外访问解析到 Cloudflare Pages。
这篇文章记录如何通过 GitHub Actions 来自动部署本博 。写完 GitHub Actions Workflow 脚本以后,只需要在本地执行一条 git push
命令,后面的任务由 GitHub Actions 在云端完成。
1. 添加 Actions Secrets
进入 GitHub,打开博客源码仓库 kukmoon_blog
,点击仓库上方导航栏的 Settings,点击左侧导航栏 Security 下方的 Secrets → Actions,点击右上方的 New repository secret,添加三个 Secrets:
COSBUCKET
:存储桶的名称(连同后面的一串数字)。例如本博 对应的存储桶是 kukmoon-blog-12345678
。
COSSECRET_ID
:API 密钥的 ID。从【「腾讯云控制台」➡「密钥管理」 】获取。
COSSECRET_KEY
:API 密钥,获取方法同 COSSECRET_ID
。
2. 修改 Actions 工作流脚本
在本地打开并修改 kukmoon_blog/.github/workflows/deploy.yaml
,其中 kukmoon_blog
是博客源文件所在的本地文件夹。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 name: CI on: push: branches: - master env: GIT_USER: Kukmoon GIT_EMAIL: [email protected] jobs: deploy_to_All: name: Build'n'deploy runs-on: ubuntu-20.04 env: VPS2: my.vps.banwagong.com strategy: matrix: os: [ubuntu-20.04 ] node_version: [20 ] steps: - name: Checkout uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node_version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node_version }} - name: Install hexo run: | npm install -g hexo-cli - name: Install dependencies run: | npm install - name: Configuration environment env: HEXO_DEPLOY_PRI: ${{secrets.HEXO_DEPLOY_PRI}} run: | sudo timedatectl set-timezone "Asia/Shanghai" mkdir -p ~/.ssh/ echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa # 从 GitHub 获取公钥并保存到 known_hosts 文件 ssh-keyscan github.com >> ~/.ssh/known_hosts # 从 VPS 获取公钥并保存到 known_hosts 文件 ssh-keyscan ${VPS2} >> ~/.ssh/known_hosts git config --global user.name $GIT_USER git config --global user.email $GIT_EMAIL - name: Generate hexo run: | hexo clean hexo g - name: Deploy to GitHub Pages run: | cd ${GITHUB_WORKSPACE}/public git init git config --global user.name $GIT_USER git config --global user.email $GIT_EMAIL git add . git commit -m "Deploy to GitHub Pages at $(date +'%Y-%m-%d %H:%M:%S')" git push --force --set-upstream [email protected] :Kukmoon/kukmoon.github.io.git master # 避免出现 exit code 128 - name: Install COSCMD run: | pip install coscmd - name: Generate config file for COSCMD run: | coscmd config -a ${{ secrets.COSSECRET_ID }} -s ${{ secrets.COSSECRET_KEY }} -b ${{ secrets.COSBUCKET }} -r ap-hongkong - name: Deploy to Tencent Cloud COS run: | cd ${GITHUB_WORKSPACE}/public # 注意:如果 `.` 后面不加 `/`,就会把当前目录下的所有文件上传到 COS 根目录下面的一个名为 `.` (目录名只有一个点)的子目录,而不是上传到根目录 # -rfs 表示递归上传(r)、同名文件不提示直接覆盖(f)、不上传MD5相同的同名文件(s) # --delete 表示让远端文件与本地文件同步,即删除仅在远端存在但本地不存在的文件 # --ignore 表示不需要上传的文件,可以用通配符,如果有多组文件不需要上传,就要使用多个 --ignore 参数 coscmd upload -rfs --delete ./ / --ignore "*.DS_Store" --ignore "*.git*" - name: Deploy to VPS run: | pwd sed -i 's/https:\/\/img.kukmoon.com/https:\/\/clouddrive.kukmoon.com\/OneDrive2\/github\/img/g' `grep https:\/\/img.kukmoon.com -rl ./source/_posts/*.md` # 修改图床的 URL hexo clean hexo g cd ${GITHUB_WORKSPACE}/public pwd git init git config --global user.name $GIT_USER git config --global user.email $GIT_EMAIL git add . git commit -m "Deploy to VPS at $(date +'%Y-%m-%d %H:%M:%S')" git push --force --set-upstream ssh://git@${VPS2}/var/repo/blog.git master # 避免出现 exit code 128
修改完毕后,git add
、git commit
、git push
三连。
图片来源
题图:GitHub Actions 的著作权、商标权等权利归 GitHub 所有。
头图:Image by Micha Sager from Pixabay
参考文献