jenkins部署博客

自打建立博客以来啊,都一直是手动更新发布的,具体流程为:本地修改提交到github-》进入服务器从github拉取代码-》服务器里npm install-》服务器里hexo g发布。这个流程是没什么问题的,但是每次提交想发布了都得登录下服务器,而且是命令行操作,很繁琐,正好我服务器里面有jenkins,想着能用jenkins来自动发布不是省心多了么?

具体思路是,在jenkins中创建项目,让jenkins从github中拉取代码,然后jenkins进行发布。那么我们jenkins从github中拉取代码是需要权限认证的,我们得先在jenkins中添加认证。认证需要github的秘钥,所以我们得先准备好秘钥。

github添加秘钥

首先在服务器中创建秘钥:

1
$ ssh-keygen -t rsa -C "yourname@you.local"

将邮箱换成你自己的就可以,生成成功的话,一般在~/.ssh目录下有两个文件:

  • id_rsa 私钥
  • id_rsa.pub 公钥

然后查看公钥,并将公钥复制:

1
$ cat id_rsa.pub

然后前往:github-》setting-》SSH and GPG keys => New SSH key:
github new ssh key
标题随便设置,key文本框里面填入公钥,点击保存即可。

在jenkins中创建github的认证

首先需要查看jenkins的插件是否已安装,如果没安装就需要安装下,安装后如图所示:
jenkins git
然后进入Jenkins -》 Credentials -》 System -》Global credentials
global credentials
然后点击左侧的add credentials,可以看到需要填写的表单,然后填写:
add credentials
其中kind选择SSH Username with private key。然后再选择private key -》 enter directly,将我们的私钥复制进去,然后保存即可。这样我们就创建好了证书。

创建jenkins项目

点击jenkins -》 创建任务,填入项目的名称,选择构建自由风格的软件项目:
jenkins 创建任务
点击确定,即可进行配置:
配置
如上图,在源码管理这部分先选择git,然后将源码库的ssh地址填入,在Credentials里面选择我们创建好的证书。填好后,点击其他部分的时候,这里会自动去读取github,如果配置没问题的话,会主动匹配master分支。然后在下面添加构建步骤:
构建步骤
选择执行shell,然后填写命令:

1
bash deploy.sh

这个命令意思是,当点击jenkins的发布时,就执行当前项目目录的deploy.sh文件。deploy.sh文件里有我们发布时需要执行的命令。

然后点击保存即可。

发布脚本

前面我们配置让jenkins执行deploy.sh脚本,那么我们看看这个shell文件里面需要执行些什么东西。

首先想想我们手动发布时的操作步骤:

  1. 从github拉取代码
  2. npm i
  3. hexo g

现在只是从我们手动换成了jenkins,那么步骤变成:

  1. 从gitbhug拉取代码(jenkins自己执行,没必要配置)
  2. 删除原来的域名空间下的文件
  3. 将拉下来的项目文件移到域名空间下
  4. npm i
  5. hexo g

需要注意的事,我们要确保给jenkins了root权限,要不然无法复制和创建,遇到权限问题的解决办法:

  1. 将jenkins账号分别加入到root组中, $ gpasswd -a root jenkins,
  2. 修改/etc/sysconfig/jenkins文件中,

    1
    JENKINS_USER=root JENKINS_GROUP=root
  3. 重启Jenkins$ service Jenkins restart

  4. 验证 在Jenkins中的shell脚本中执行命令whoami

开始我们的deploy.sh脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/sh bash
# 发布脚本,需要从jenkins中下载,然后复制到对应的项目中
# 发布工程目录
PROJ_DIR="$WORKSPACE"
# jenkins中: 执行shell bash deploy.sh
# 验证是否是root用户
if [ `whoami` = "root" ];then
echo "root用户!"
else
echo "非root用户!"
fi
# 进入项目文件删除原有的配置和src
cd '~/hexo_blog'
# 删除项目文件,node_module和theme因为长时间不会修改,所以也没必要删除
rm -rf '_config.yml' 'package-lock.json'
# 开始拷贝
cp -r $PROJ_DIR/_config.yml '~/hexo_blog/'
# npm 初始化
npm i
# hexo发布
hexo g

提交代码到github。

验证

进入jenkins,然后点击立即构建,即可见到命令一步步执行,最后打包发布成功。


这里介绍了如何用jenkins来发布博客,如果感兴趣,可以看看我这篇:如何让jenkins自动部署博客