
本文介绍如何在自建服务器上使用 Jenkins
和 Gitee
自动部署博客。
最近给域名备了个案,于是花了点时间把博客从 Vercel
迁移到了国内服务器上。之前用的 Vercel
是能够在 Git 仓库发生变更后自动部署的,但迁到自建服务器上后这个功能就得自己实现了,搜索了一下实现方案,最后选用了 Jenkins
。
环境信息
环境 | 版本 |
---|---|
操作系统 | CentOS 7 |
Jenkins | 2.277.4 |
JDK | 1.8.0_282 |
Nginx | 1.18.0 |
Git Host | Gitee |
配置 Jenkins
安装 Jenkins
参考 官方文档 安装即可, CentOS
的步骤如下 :
1 | # 添加 Yum 源 |
(可选)Jenkins 默认端口为 8080,可以在配置文件里修改:
1 | vim /etc/sysconfig/jenkins |
最后添加开机启动:
1 | # 重载服务(由于前面修改了 Jenkins 启动脚本) |
Jenkins 初始化
确保之前设置的端口在防火墙里已开放,然后浏览器访问 <ip>:<port>
,按照向导一步步完成初始化。
安装插件
安装配置 NodeJS Plugin
登录 Dashboard,选择 Manage Jenkins > Manage Plugins,点击 Available,安装 NodeJS Plugin
。
然后在 Dashboard > Manage Jenkins > Global Tool Configuration 里下滑找到 NodeJS ,点击 NodeJS installations …,配置如下:

选择 Node 版本,在 Global npm packages to install 里填入 Hexo
和 Yarn
依赖:
1 | hexo-cli@4.2.0 yarn --registry https://registry.npm.taobao.org/ |
点 Save 保存。
安装 Gitee Plugin
由于 Github 在国内网络几乎不可用,这里把 Host 换成了 Gitee
,因此还需要安装一个 Gitee Plugin。
Gitee 的配置参考 Gitee 的官方 帮助中心:
简单来说,在 Jenkins -> Manage Jenkins -> Configure System -> Gitee Configuration -> Gitee connections 里,按照文档配置如下:

添加 CI 任务
配置密钥(可跳过)
由于我博客项目设置为了私人仓库,所以需要额外生成密钥对并把公钥添加到 Gitee 里,如果你的仓库是公开状态,这一步可以跳过:
切换到 Jenkins 用户:
1 | sudo su -s /bin/bash jenkins |
生成密钥对:
1 | ssh-keygen -o |
查看公钥并复制:
1 | cat ~/.ssh/id_rsa.pub |
然后在 Gitee 网站右上角 个人头像 > 设置 > SSH 公钥 里粘贴公钥,点确定保存。
新建任务
新建任务
接下来就可以在 Jenkins 里新建构建博客的 CI 任务了!
打开 Dashboard,点击 New Item。输入 Item name,类型选择 Freestyle project。配置页里 Gitee connection 选择之前配置的 connection。
在 Source Code Management 里选择 Git,Repository URL 里填入仓库链接,如果这个时候显示权限失败,请返回上一小节配置密钥。
在 Build Triggers 里选择 Build when a change is pushed to Gitee. Gitee webhook URL: http://81.70.155.173:8089/gitee-project/blog
,注意复制这里的 webhook url,之后会用到。
然后再 Enabled Gitee triggers 里选中 Push Events
,Secret Token for Gitee WebHook
里点击 Generate,同样保存备用。
Gitee 配置 Webhook
之前配置的 Webhook 需要在 Gitee 上同样配置一下才能正常工作:
登陆 Gitee 后在仓库主页点击 管理 > WebHooks > 添加 WebHooks,然后填入刚刚保存的 url
和 token
,保存即可。
编写构建脚本
回到任务配置页,继续添加自动构建脚本:
在 Build 里点击 Add build step,选择 Execute shell,根据网站和博客的具体情况编写构建部署命令如下:
1 | # 不安装 devDependences |
2021 年 5 月 28 日 更新,部署 mkdocs
的脚本如下:
1 | /usr/bin/pip3.6 install -i https://pypi.tuna.tsinghua.edu.cn/simple mkdocs-material --user |
测试部署
完成 CI 任务的创建后,回到 Project 页面,点击 Build now,观察是否一切正常。然后通过 Git 更改后 push,测试 WebHook 是否正常。
如果部署时提示权限不足,可以把网址所在的目录 owner 改为 jenkins 来解决。
1 | sudo chown -R jenkins:jenkins mysite/ |
其他
推送
原来用 Vercel
的时候,每次构建完毕,Vercel Bot
就会给我的仓库的 Commit 评论一下,然后会收到 Github 发来的邮件,提醒我构建完成,非常好用。当然,现在这个功能也只能自己写了。因为是国内服务器,直接排除了用 Telegram 推送。搜索了一下,发现了一个通过 QQ 推送消息的网站 Qmsg 酱 ,按照 文档 注册配置后可以获得一个 Qmsg Key,然后就可以调用 RESTful 接口发起推送了!
配置非常简单,在构建脚本的最后添加如下命令即可:
1 | curl --location --request POST 'https://qmsg.zendee.cn/send/< 你的 qmsgKey>' \ |
这样每次部署完成,你会收到一条 QQ 消息:

国内网络的坑
这次迁移的过程中也遇到了一些坑。最开始本来打算沿用 Github 的,但测试发现 Clone 总是出错,于是被迫改成国内的 Gitee。可以在原仓库上额外添加 Gitee 远程仓库地址,让 Github 和 Gitee 并存:
1 | git remote add gitee <url> |
然后提交时,分别执行:
1 | git push origin master |
就可以分别提交到两个仓库里了。
另外,博客用到的一个插件 hexo-all-minifier
也遇到了类似的问题。这个插件的安装脚本 install.js
会从 githubusercontent.com
里下载文件,而国内这个域名直接被 ban 了… 无语…于是我暂时去掉了这个插件,如果想解决可能需要重打包一下了…
刚尝试重打包了一下,太麻烦了,怕了怕了,还是换个包吧。
- 本文标题:使用 Jenkins 和 Gitee 自动部署博客
- 本文作者:Tilden Ji
- 创建时间:2021-05-24 13:56:08
- 本文链接:https://itiandong.com/2021/automating-blog-deployment-with-jenkins-and-gitee/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!