背景

经过一番折腾,利用shell脚本来实现更新文章后的一键备份博客源文件及发布文章到Github和Coding两个平台。

在服务器博客主目录下新建一个文件,名为deploy.sh,将下面的脚本代码复制到新建的deploy.sh文件内。

[root@host huaien.co]# touch deploy.sh
[root@host huaien.co]# vi deploy.sh

原先的版本是这样的

#!/bin/bash
echo "............................"
echo ".开始执行文章发布更新与同步."
echo "............................"

echo "进入博客主目录 /www/wwwroot/blog/huaien.co"
cd /www/wwwroot/blog/huaien.co

echo "检测上级目录tmp是否已有今日日期的目录,如有,改名为今日日期时分秒"
mv ../tmp/$(date +%Y%m%d)/ ../tmp/$(date +%Y%m%d%H%M%S)/

echo "在上级目录的tmp/下新建今日日期的目录"
mkdir ../tmp/$(date +%Y%m%d)/
mkdir ../tmp/$(date +%Y%m%d)/huaien.co/

echo "备份博客主目录下的.git目录至上级目录的tmp/今日日期/huaien.co/"
cp -rv .git deploy_backupblog.sh deploy config.toml ../tmp/$(date +%Y%m%d)/huaien.co/

echo "备份移动当前以后public目录至上级目录的tmp/今日日期/public/"
mv -v public ../tmp/$(date +%Y%m%d)/public

echo "生成博客内容 #会在博客主目录下生成public目录"
hugo

echo "复制备份好的原public目录下的.git目录至新生成的public目录下"
cp -rv ../tmp/$(date +%Y%m%d)/public/.git ../tmp/$(date +%Y%m%d)/public/CNAME ../tmp/$(date +%Y%m%d)/public/deploy_public.sh  public/

echo "进入public目录"
cd public

echo "-----------------开始将public同步到github和coding仓库---------------------"
git add .
git commit -m "更新博客"
git push -u github master
echo "同步到github仓库完成..."
git push -u coding master
echo "同步到coding仓库完成..."

echo "--------------------------同步public到仓库结束----------------------------"
echo "进入博客主目录"
cd ..
echo "复制原备份文件.git deploy_backupblog.sh config.toml到博客主目录"
cp -rv ../tmp/$(date +%Y%m%d)/huaien.co/.git ../tmp/$(date +%Y%m%d)/huaien.co/deploy_backupblog.sh ../tmp/$(date +%Y%m%d)/huaien.co/config.toml ../tmp/$(date +%Y%m%d)/huaien.co/deploy ./
echo "-----------------开始同步备份博客主目录到github和coding仓库----------------"
git add .
git commit -m "备份博客"
git push -u github master
echo "同步到github仓库完成..."
git push -u coding master
echo "同步到coding仓库完成..."
echo "-------------------------同步博客主目录到仓库结束---------------------------"

echo "................................"
echo ".文章发布更新与同步备份博客结束."
echo "................................"

由于上面这个需要转移.git文件夹等造成效率降低,所以将.git文件夹的备份改为删除除.git文件夹等以外的文件及文件夹。

#!/bin/bash
echo "............................"
echo ".开始执行文章发布更新与同步."
echo "............................"

echo "进入博客的public目录 /www/wwwroot/blog/huaien.co/public"
cd /www/wwwroot/blog/huaien.co/public

echo "删除.git,deploy_public.sh以外的文件夹与文件"
ls -a| egrep -v '^.git|deploy_public.sh$' |xargs rm -r

echo "进入博客程序主目录"
cd ..

echo "生成博客内容 #会在博客主目录下生成public目录"
hugo

echo "进入博客的public目录"
cd public

echo "-----------------开始将public同步到github和coding仓库---------------------"
git add .
git commit -m "更新博客"
git push -u github master
echo "同步到github仓库完成..."
git push -u coding master
echo "同步到coding仓库完成..."

echo "--------------------------同步public到仓库结束----------------------------"
echo "进入博客主目录"
cd ..

echo "-----------------开始同步备份博客主目录到github和coding仓库----------------"
git add .
git commit -m "备份博客"
git push -u github master
echo "同步到github仓库完成..."
git push -u coding master
echo "同步到coding仓库完成..."
echo "-------------------------同步博客主目录到仓库结束---------------------------"

echo "................................"
echo ".文章发布更新与同步备份博客结束."
echo "................................"

关于双平台同步

如何同时同步到Github和Coding平台呢?之前用Hexo的时候都是直接用Hexo的Hexo-deploy插件来同时部署到Github和Coding双平台。但是现在换到Hugo后,都是直接通过修改git的config配置文件来直接部署到相关平台。

步骤如下

1. 初始化git

在博客的源文件目录和public目录下分别执行下面的 命令以初始化git

git init

2. 修改.git文件夹下的config配置文件

分别修改博客的源文件目录和public目录下生成的.ggit目录下的config配置文件

附上本博客的配置示例

博客源文件目录下

[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "github"]
	url = git@github.com:HuaienYao/hugo-blog-backup.git
	fetch = +refs/heads/*:refs/remotes/github/*
[branch "master"]
	remote = github
    remote = coding
	merge = refs/heads/master
[remote "coding"]
	url = git@git.dev.tencent.com:Wyane/hugoblogbackup.git
	fetch = +refs/heads/*:refs/remotes/coding/*

[submodule "themes/hugo-swift-theme"]
	url = https://github.com/onweru/hugo-swift-theme.git

public目录下

[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "coding"]
	url = git@git.dev.tencent.com:Wyane/Hugoblog.git
	fetch = +refs/heads/*:refs/remotes/coding/*
[branch "master"]
	remote = coding
    remote = github
	merge = refs/heads/master
[remote "github"]
	url = git@github.com:HuaienYao/HuaienYao.github.io.git
	fetch = +refs/heads/*:refs/remotes/github/*

3. 测试一下

可以通过执行上面最初的一键部署脚本来测试下部署是否可以成功,当然在这前你必须得在相关平台上添加好SSH公钥。 具体可以参考下面 Git生成 SSH 公钥添加到GitHub和Coding.net

如果测试没问题就可以使用上面的一键部署脚本来部署博客了,不过也可以用手动输入git命令来同步部署。