前言
前两天把自己以前搭的博客弄到服务器上面丢到了nginx里面。但是问题是,每次自己要发布博客时,难道都要重新打一个包发到服务器上面解压缩。就在想能不能我每次提交后,让服务器执行一个shell脚本实现动态刷新。思来想去,好像jenkins能实现这种场景,于是乎,撸起袖子开干吧~
准备工作
- 先说一下我的思路。我平时一般在Mac上面用markdown写博客,然后push到github上去。然后服务器上面装好git后将项目clone下来,再利用jenkins检测到我push后,执行shell脚本去pull博客代码。因为项目是丢在nginx里面,pull后就可以直接看到更新后的内容了。
安装git
服务器需要安装git来动态pull博客代码,直接
1 | yum install -y git |
安装Jenkins
1.这里我是安装的最新版,命令
1 | sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo |
2.启动jenkins
1 | systemctl start jenkins |
jenkins的默认端口号是8080,现在打开浏览器输入你的ip地址加上8080端口即可出现如下画面
3.按照提示找到对应目录下的密码复制上去即可,查看命令如下
1 | cat /var/lib/jenkins/secrets/initialAdminPassword |
4.选择默认插件安装,最新版本是带了Git相关的插件的,安装即用
5.后面就是添加管理员巴拉巴拉的,最后进入初始页面,准备创建一个新的任务
进入正题
- 好了,准备工作做完我们开始正题
创建任务
首先创建一个新的任务,选择第一个选项,构建一个自由风格的软件项目
配置git
目的是为了让jenkins从对应仓库拉取代码
配置触发器
这里选择轮询(poll)SCM,下面是一个定时器的cron表达式,这里是指每隔十分钟运行一次当前任务
配置shell
最后配置shell脚本,跟我们之前提到的一样,这里只需要到你的博客代码指定的地方(nginx映射的路径[使用方式和安装可查看我的博客「CentOS上安装nginx」], 如下一图),pull一下代码即可,如下二图
构建
好了,最后我们可以运行这个任务了
我们点进入进去看到里面的构建历史记录
OK!成功后就是下面的样子,如果错误,就根据控制台打印的日志,具体问题具体分析。
遇到的坑
无权限
当时遇到的第一个问题就是没有权限执行某个具体的操作,控制台包如下错误
1 | xxxx Permission denied |
之前在网上查了很久,无非就是说权限有问题,让我把jenkins目录的权限设大,还有什么用sudo来启动jenkins,但是都没有用,无奈问了下哥们,最终定位到是配置文件用户组权限的问题。
这个问题其实很简单,让我们先看看jenkins的配置文件。先看看jenkins相关路径,命令
1 | rpm -ql jenkins |
ok,定位到路径,vim之
可以看到我们配置文件里,默认jenkins使用的用户一个名为‘jenkins’的用户,如果你用 cat /etc/passwd 就可以看见‘jenkins’这个用户对应的权限,是没有我们设定目录的权限的。现在有两种方案可行:
- 将上图的‘JENKINS_USER’对应的value改为root,什么都解决了,包括之后的问题。意味着jenkins拥有root最高权限。但是缺点是听说之前老版本的jenkins是有安全漏洞的,要是有人把你的jenkins搞了,然后就可以利用jenkins在你服务器上执行一些脚本,emmm细思极恐
- 将我们要操作的目录,也就是上面配置的博客目录/home/blog/bandao的权限赋给‘jenkins’这个用户,执行下面的命令
1 | chown -R jenkins[用户名]:jenkins [这是组名]/home/blog/bandao |
这里解释一下, chmod能改变权限,-R是目录下所有文件,对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)
ok,这个问题解决!
git pull主机密钥验证失败
来来,这是刚刚构建很容易出现的问题,除非你像刚刚上面第一个坑那样把jenkins的配置文件的用户改为root,否则就出现下面这个错误
大概的意思就是主机无权限,无法读取远程仓库。嘿,我当时就纳闷了,我手动pull是没问题的啊,而且我github都设置了ssh-key的啊。后来发现,特么我进去是root用户,肯定没问题啊。报这个错本质上说的还是‘jenkins’这个用户没有权限访问远程仓库!
ok,定位到问题就好办。首先切换成’jenkins‘这个用户
1 | sudo su -s /bin/bash jenkins |
第二步生成专属于‘jenkins’用户的ssh-key
1 | ssh-keygen -t rsa 后一路回车 |
第三步复制上面cat出来的公钥到github
现在试试用‘jenkins’用户 pull一下
搞定,收工!
总结
晚上和以前的前辈喝了酒,回来突然想把这篇博客写了,头晕昏昏的,写了两个多小时,记录一下自己踩的坑,备忘。嘛,喝瓶哇哈哈,继续嗨~