去中心化用 GitHub Actions 把 Hexo 博客源码备份到 Gitee 和 CODING
本文最后更新于:2022年4月8日 凌晨
这是去中心化博客备份专题的第 3 篇。上一篇在这里。
互联网时代的“狡兔三窟”,叫作“去中心化”。
GitHub 封禁伊朗和俄罗斯开发者的私有账户,不能说明大厂不靠谱或者开源不靠谱,相反,说明了中心化不靠谱。即使 GitHub 那样的大厂,也会因为合规要求而封禁账号。如果开发者仅仅依赖 GitHub 托管源码,那还是落入了中心化的窠臼。
谷月姐不但给 博客 建立了好几个镜像,而且源码放在好几个不同的云盘和源码托管平台。就是要去中心化,免得一旦中美开战, GitHub 封禁中国开发者的账户,导致我的博客全军覆没。
我的 博客 源码在本地有一份,在 GitHub 有一份。接下来,谷月姐要把它备份到不同的云端。如果本地或 GitHub 出错,可以及时恢复。如果我的 GitHub 被封禁,还可以转移到其他的源码托管网站,或者从本地发布我的博客。
上一期,谷月姐介绍了把 Hexo 博客源码用 Git 从本地备份到 Gitee 和 CODING。
本期,谷月姐要把源码用 GitHub Actions 从 GitHub 备份到 Gitee 和 CODING。
注意:
- 其他基于 Git 的代码托管平台也适用本教程。
- 它同步不了子模块。
1 建立仓库
在 GitHub 上已经有私有仓库了。
在 Gitee 上建立一个私有仓库,HTTP 协议的 URL 是:https://gitee.com/kukmoon/kukmoon_blog.git
。注意:默认分支与 GitHub 上的博客源码仓库的默认分支一致,此处都是 master
。
在 CODING 上建立一个私有仓库,HTTP 协议的 URL 是:https://e.coding.net/kukmoon/blog/source_code.git
。注意:默认分支与 GitHub 上的博客源码仓库的默认分支一致,此处都是 master
。
2 准备令牌
在 Gitee 首页点击右上角头像→设置→左侧导航栏中的安全设置→私人令牌→右上角生成新令牌。权限可以全选。将令牌记录下来。
在 CODING 个人首页点击左侧导航栏中的项目→“谷月姐的博客”(谷月姐把博客源码仓库放到了这个项目里)→左下角项目设置→左侧导航栏中的开发者选项→项目令牌→新建项目令牌,令牌名称随意填,指定一个过期时间,将代码仓库权限设为统一配置所有代码仓库权限,并勾选“读写”(系统默认勾选了“读取”),点击“新建”。系统生成一个项目令牌。
注意:Gitee 生成的令牌只有令牌;CODING 生成的令牌包括一个用户名和一个密码。
3 设置仓库秘密(repo secrets)
要把上一步生成的令牌保存到 GitHub 的博客源码仓库 kukmoon_blog
中,用于向 Gitee 和 CODING 推送源码。
令牌不能明文保存,所以要以仓库秘密(repo secrets)的形式保存。
进入 GitHub,打开博客源码仓库 kukmoon_blog
,点击仓库上方导航栏的 Settings,点击左侧导航栏 Security 下方的 Secrets → Actions,点击右上方的 New repository secret,添加四个 secrets:
GITEE_USER
:在 Gitee 注册的用户名。就是你的 Gitee 个人主页大头像下方以 @ 开头的一串英文。GITEE_TOKEN
:按照第 2 步在 Gitee 创建的令牌。CODING_USER
:按照第 2 步在 CODING 创建的项目令牌中的用户名。CODING_TOKEN
:按照第 2 步在 CODING 创建的项目令牌中的密码。
4 写 GitHub Actions
新建 kukmoon_blog/.github/workflow/deploy.yml
,内容如下[1]:
(如果已经存在此文件,那就把第 11 到 55 行的内容作为一个单独的 job,添加到已存在的 deploy.yml
)
name: CI
# 只监听 master 分支的改动
on:
push:
branches:
- master
# 每个 jobs 分别同时在独立的虚拟机中运行
jobs:
backup_source_code_to_gitee_&_coding:
name: Backup source code to Gitee & CODING
runs-on: ubuntu-latest
steps:
# 克隆
- name: Clone
env:
GITHUB_SOURCE_REPO: Kukmoon/kukmoon_blog
GIT_USER: Kukmoon
GIT_EMAIL: kukmoon97@gmail.com
run: |
git init
git remote add origin https://github.com/${GITHUB_SOURCE_REPO}.git
git fetch --all
for branch in `git branch -a | grep remotes | grep -v HEAD`; do
git branch --track ${branch##*/} $branch
done
git config --global user.name $GIT_USER
git config --global user.email $GIT_EMAIL
# 推送到码云
- name: Push to Gitee
env:
GITEE_USER: ${{ secrets.GITEE_USER }}
GITEE_TOKEN: ${{ secrets.GITEE_TOKEN }}
run: |
gitee_repo="https://${GITEE_USER}:${GITEE_TOKEN}@gitee.com/kukmoon/kukmoon_blog.git"
git remote add gitee1 "${gitee_repo}"
git show-ref
git branch --verbose
git push --all --force gitee1
git push --tags --force gitee1
# 推送到 CODING
- name: Push to CODING
env:
CODING_USER: ${{ secrets.CODING_USER }}
CODING_TOKEN: ${{ secrets.CODING_TOKEN }}
run: |
coding_repo="https://${CODING_USER}:${CODING_TOKEN}@e.coding.net/kukmoon/blog/source_code.git"
git remote add coding1 "${coding_repo}"
git show-ref
git branch --verbose
git push --all --force coding1
git push --tags --force coding1
5 参考文献
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!