去中心化用 GitHub Actions 把 Hexo 博客源码备份到 Gitee 和 CODING

这是去中心化博客备份专题的第 3 篇。上一篇在这里。

互联网时代的“狡兔三窟”,叫作“去中心化”。

GitHub 封禁伊朗和俄罗斯开发者的私有账户,不能说明大厂不靠谱或者开源不靠谱,相反,说明了中心化不靠谱。即使 GitHub 那样的大厂,也会因为合规要求而封禁账号。如果开发者仅仅依赖 GitHub 托管源码,那还是落入了中心化的窠臼。

谷月姐不但给 博客 建立了好几个镜像,而且源码放在好几个不同的云盘和源码托管平台。就是要去中心化,免得一旦中美开战, GitHub 封禁中国开发者的账户,导致我的博客全军覆没。

我的 博客 源码在本地有一份,在 GitHub 有一份。接下来,谷月姐要把它备份到不同的云端。如果本地或 GitHub 出错,可以及时恢复。如果我的 GitHub 被封禁,还可以转移到其他的源码托管网站,或者从本地发布我的博客。

上一期,谷月姐介绍了把 Hexo 博客源码用 Git 从本地备份到 Gitee 和 CODING。

本期,谷月姐要把源码用 GitHub Actions 从 GitHub 备份到 Gitee 和 CODING。

注意:

  1. 其他基于 Git 的代码托管平台也适用本教程。
  2. 它同步不了子模块。

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:

  1. GITEE_USER:在 Gitee 注册的用户名。就是你的 Gitee 个人主页大头像下方以 @ 开头的一串英文。
    Gitee 用户名
  2. GITEE_TOKEN:按照第 2 步在 Gitee 创建的令牌。
    Gitee 令牌
  3. CODING_USER:按照第 2 步在 CODING 创建的项目令牌中的用户名。
    CODING_USER
  4. CODING_TOKEN:按照第 2 步在 CODING 创建的项目令牌中的密码。
    CODING_TOKEN

4 写 GitHub Actions

新建 kukmoon_blog/.github/workflow/deploy.yml,内容如下[1]:

(如果已经存在此文件,那就把第 11 到 55 行的内容作为一个单独的 job,添加到已存在的 deploy.yml)

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
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 图片版权

头图:Banner Image by milkusmaximus from Pixabay

6 参考文献


求扫码打赏
“我这么可爱,请给我钱 o(*^ω^*)o”

去中心化用 GitHub Actions 把 Hexo 博客源码备份到 Gitee 和 CODING
https://blog.kukmoon.com/b51292f74e95/
作者
Kukmoon谷月
发布于
2022年3月21日
许可协议