参考:
1、 [小题大做] Github + Jenkins 实现自动化部署 hexo 博客静态文件
2、 ubuntu搭建Jenkins自动化部署服务
一 概述
示例:
Hexo 的 CI/CD 持续集成和部署:把 nodejs 环境、Git、Jenkins 打包成 docker 镜像,然后在 VPS 上跑个容器,用 volumes 做数据持久化来保存部分配置。/ 本地只维护一个博文仓库,push 到远端仓库,触发 webhook 后,Jenkins 拉完博文执行脚本进行构建,网站根目录设置成 hexo/public 即可。过程:
本地博文仓库 -> GitHub 远程博文仓库 -> GitHub 的 webhook 发消息给自己服务器上的 Jenkins -> Jenkins 收到消息,自动拉取 Github 仓库代码,并执行脚本。
二 使用前准备
服务器已经装好所有环境。
服务器配置好了自己喜欢的博客主题。
服务器配置好了自己的 Git。
服务器
/var/www/hexo/source/_post
目录已经初始化了仓库,与 GitHub 上博文仓库关联,可以正常拉取到博文。
三 Jenkins 的使用
Jenkins 负责从博文仓库拉完博文、执行脚本进行构建。
- 安装基础插件等:
浏览器访问:公网ip:8080。
容器中访问提示的目录,复制填写初始密码(admin,vim /var/lib/jenkins/secrets/initialAdminPassword)。并选择安装推荐的插件。/ 使用管理员账号。
出现空白页。解决:http://ip:8080/pluginManager/advanced 将升级站点下的 url 改为 http。/ 重新浏览器访问:公网ip:8080。
- 进行配置:
创建一个新任务:
配置密钥,给 Jenkins 添加私钥(如果访问的仓库是公开的则不需要添加私钥)。仓库是所要拉取的仓库地址 ssh 方式克隆的地址(存放博文的仓库)。
在 GitHub 上设置 webhook:
配置之前创建的 job:
在构建中写 Jenkins 收到 GitHub 仓库变动后需要执行的脚本:
1
2
3
4
5
6
7
8
9
10
11/*
执行的脚本
*/
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/git/bin
cd /var/www/hexo/source/_posts
git pull origin master
cd /var/www/hexo
hexo clean
hexo g
四 Jenkins 调试
在本地文章仓库修改一下文章,推送到 GitHub。然后看 Jenkins 状态、最终网站对应博文是否变化。
查看日志查错:
错误原因:Jenkins 的权限问题,把它加入到 root 身份。成功!
1
2
3
4
5gpasswd -a root jenkins
vim /etc/default/jenkins // JENKINS_USER="root" JENKINS_GROUP="root"
service jenkins restart