自打建立博客以来啊,都一直是手动更新发布的,具体流程为:本地修改提交到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:
标题随便设置,key文本框里面填入公钥,点击保存即可。
在jenkins中创建github的认证
首先需要查看jenkins的插件是否已安装,如果没安装就需要安装下,安装后如图所示:
然后进入Jenkins
-》 Credentials
-》 System
-》Global credentials
:
然后点击左侧的add credentials,可以看到需要填写的表单,然后填写:
其中kind
选择SSH Username with private key
。然后再选择private key
-》 enter directly
,将我们的私钥复制进去,然后保存即可。这样我们就创建好了证书。
创建jenkins项目
点击jenkins
-》 创建任务
,填入项目的名称,选择构建自由风格的软件项目:
点击确定,即可进行配置:
如上图,在源码管理这部分先选择git,然后将源码库的ssh地址填入,在Credentials
里面选择我们创建好的证书。填好后,点击其他部分的时候,这里会自动去读取github,如果配置没问题的话,会主动匹配master
分支。然后在下面添加构建步骤:
选择执行shell
,然后填写命令:
1 | bash deploy.sh |
这个命令意思是,当点击jenkins的发布时,就执行当前项目目录的deploy.sh
文件。deploy.sh
文件里有我们发布时需要执行的命令。
然后点击保存即可。
发布脚本
前面我们配置让jenkins执行deploy.sh
脚本,那么我们看看这个shell文件里面需要执行些什么东西。
首先想想我们手动发布时的操作步骤:
- 从github拉取代码
- npm i
- hexo g
现在只是从我们手动换成了jenkins,那么步骤变成:
- 从gitbhug拉取代码(jenkins自己执行,没必要配置)
- 删除原来的域名空间下的文件
- 将拉下来的项目文件移到域名空间下
- npm i
- hexo g
需要注意的事,我们要确保给jenkins了root权限,要不然无法复制和创建,遇到权限问题的解决办法:
- 将jenkins账号分别加入到root组中,
$ gpasswd -a root jenkins
, - 修改/etc/sysconfig/jenkins文件中,
1
JENKINS_USER=root JENKINS_GROUP=root
- 重启Jenkins
$ service Jenkins restart
- 验证 在Jenkins中的shell脚本中执行命令
whoami
。
开始我们的deploy.sh
脚本:
1 | !/bin/sh bash |
提交代码到github。
验证
进入jenkins,然后点击立即构建,即可见到命令一步步执行,最后打包发布成功。
这里介绍了如何用jenkins来发布博客,如果感兴趣,可以看看我这篇:如何让jenkins自动部署博客。