本文最后更新于 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 
参考文献