Jenkins学习笔记
1 Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 ----摘自百度百科 下面说点我对于Jenkins的一些学习心得,如果有什么不对的地方,还请大家积极指出,多谢了哈。 Jenkins是什么? Jen...
1 Jenkins介绍
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 ----摘自百度百科
下面说点我对于Jenkins的一些学习心得,如果有什么不对的地方,还请大家积极指出,多谢了哈。
Jenkins是什么?
Jenkins是一款持续集成化的工具,可以很方便的辅助我们做很多的工作,比如执行一些定时任务、自动打包部署、生成测试报告等等,并且Jenkins中有很多功能都是使用插件完成,所以很多常见的功能已经被实现了,我们只需要几条简单的配置即可完成许多很复杂的功能。这些说法还是有些抽象,下面通过举例进行说明。
举个例子
比如我们现在要实现这样一个很常见的功能:
程序员把代码提交到GIT中,然后完成系统的更新。
以往我们要如何实现这种功能呢?
当程序员把代码提交后,在通过公司的交流群大喊一声,我代码已经提交了,可以打包部署了! 然后过了不知道多长时间(看运维人员忙不忙了,要是运维没看到这条消息或邮件就很尴尬了。。。),后来运维终于要开始处理这次系统更新了,运维首先从git 上拉取代码,然后再进行打包,最后再进行部署。
首先这种方案很麻烦,每次程序员把代码提交后,还必须大喊一声,我代码提交了,并且运维人员做的工作也很枯燥,每次都是一样的步骤(拉取代码 ---> 打包--->部署),这时,来了一个比较有经验的的运维人员,他拍了拍年轻的运维人员的肩膀说, don't repeat yourself , 让我来帮帮你吧。
首先,他通过GIT 的web hook功能实现了一个通知功能,这样每当程序员提交了代码后,git会通过web hook把提交消息发给运维人员,这时程序员提交代码后再也不用大喊一声说我代码提交了(程序员小哥哥露出了欣慰了笑容),得到代码更新通知后,再执行一个shell脚本(拉取代码 ---> 打包--->部署)。这时候,每当代码提交后系统就自动更新了,程序员很开心(我只需要提交代码就好了),运维也很开心(我只需要嗑瓜子喝茶就好了,脚本都替我做完工作了),这种实现方式是不是很优雅,更符合逻辑,因为他让每个人都专注于自己的工作,并且把很多步骤都抽象聚合到一些了,其实Jenkins做的工作和那个有经验的运维人员做的工作差不多,都是为了简化我们的工作,这个例子只是Jenkins的一个应用场景,是为了抛砖引玉,让大家对Jenkins有一个比较具象的认识。
2 安装 Jenkins
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum -y install jenkins
在CentOS7下有时会出现 "公钥尚未安装"的问题
解决方案 : 安装时加上nogpgcheck参数即可
yum install jenkins --nogpgcheck
配置 安装成功后,配置文件在`/etc/sysconfig/jenkins`下,默认端口为8080,例如修改为10086
service jenkins start
你需要设置一下防火墙,让该端口可以被外部访问到 设置允许开机启动
$ sudo chkconfig jenkins on
最后启动jenkins服务
service jenkins start
可以使用netstat 命令查看端口状态,当处于LISTEN状态就表示启动成功了
接下来就可以在浏览器中访问了,访问路径
http://127.0.0.1:10086
然后按照网页上的提示信息进行操作,即可完成安装
安装遇到的问题:
[root@LENOVO-LA0X1596 lib]# service jenkins status
Redirecting to /bin/systemctl status jenkins.service
● jenkins.service - LSB: Jenkins Automation Server
Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
Active: failed (Result: exit-code) since Tue 2018-08-14 15:50:42 HKT; 4min 2s ago
Docs: man:systemd-sysv-generator(8)Aug 14 15:50:42 LENOVO-LA0X1596 systemd[1]: Starting LSB: Jenkins Automation Server...
Aug 14 15:50:42 LENOVO-LA0X1596 runuser[111344]: pam_unix(runuser:session): session opened for user jenkins by (uid=0)
Aug 14 15:50:42 LENOVO-LA0X1596 jenkins[111339]: Starting Jenkins bash: /usr/bin/java: No such file or directory
Aug 14 15:50:42 LENOVO-LA0X1596 runuser[111344]: pam_unix(runuser:session): session closed for user jenkins
Aug 14 15:50:42 LENOVO-LA0X1596 jenkins[111339]: [FAILED]
Aug 14 15:50:42 LENOVO-LA0X1596 systemd[1]: jenkins.service: control process exited, code=exited status=1
Aug 14 15:50:42 LENOVO-LA0X1596 systemd[1]: Failed to start LSB: Jenkins Automation Server.
Aug 14 15:50:42 LENOVO-LA0X1596 systemd[1]: Unit jenkins.service entered failed state.
Aug 14 15:50:42 LENOVO-LA0X1596 systemd[1]: jenkins.service failed.
解决方案:
注意划线的那句话,把java路径找不到,所以先找到java的安装路径,可以用whereis java来找路径,比如java路径是
/usr/local/jdk1.8/bin/java ,按照下面的进行配置即可
vim /etc/rc.d/init.d/jenkins
candidates="
************
************
/usr/local/jdk1.8/bin/java "
3 Jenkins的使用
这里将介绍一种比较常见的Jenkins使用场景: 使用Jenkins完成Maven项目的打包部署
前置条件: 使用时需要先通过Jenkins的 插件管理模块下载maven,ssh等插件
然后配置全局的工具信息
最后再配置SSH信息,Publish over SSH
这里配图是我已经配置好的,只需要按照提示信息配置就行,然后可以单击Test Configuration,如果配置正确会测试通过,否则会配置失败,就需要重新核对配置。
然后我们就可以开始正式的进行Jenkins任务,点击 新建任务 --->构建一个maven项目
名称随意输入,但是最好要见名知意
然后选择参数化构建过程,这样我们就可以通过传递参数来完成某些操作,比如:拉取指定分支的代码,生成目标文件夹的名称。
然后再源码管理中选择git,填写自己的git仓库地址,Credentials中填写的是git的登录信息,Bracnches to build中填写的是要拉取的分支,$release_branch表示的使用构建的release_branch参数
然后选择触发器,触发器的作用很简单,就是表明何时执行该任务,为了方便演示,这里选择最简单的示例
然后配置一些项目的打包信息
最后选择构建后操作,选择send build artifacts over SSH
在transfers中有几个比较重要的参数,需要详细解释一下。
Source files 待拷贝的源文件,比如target/*.jar 表示的就是在targer目录下,以.jar结尾的那个文件
Remove prefix 要移除的前缀
Remote directory 远程机器的目录
Exec command 拷贝完成后要执行的命令,这个命令就比较灵活了,可以通过自定义一些shell脚本完成一些复杂的功能
最后通过Build with Parameters完成对项目的触发,这里的两个参数就是刚才我们自己设置的那两个参数
最后通过"控制台输出" 查看本次执行的结果
通过上图可以发现Maven的打包已经正常执行了,登录SSH的目的机器发现jar文件也已经传输过来了,我们配置的Exec Command命令也已经执行了,比如把Exec Command中的echo 语句替换为java -jar 命令,我们就可以执行启动这个jar文件了,或者通过Dockerfile处理这个文件,这些都是可以的,都可以通过Exec Command灵活的处理。
至此我们已经完成了第一个基于Maven的Jenkins使用示例,通过这个示例我们可以发现,其实Jenkins像是很多个小工具的集合,可以很方便的完成很多工作,其实很多工作都是可以使用纯shell脚本来完成的,但是开发成本高且对普通的开发人员极为不友好。
其实Jenkins还有很多功能,比如Jenkins还支持主从结构,我们可以将Jenkins以主从的模块将开发环境分为开发、生产、线上等不同的环境,不同的环境使用不同的从节点去执行。Pipeline项目、多分支Pipeline项目等等,可以自己去探索。
更多推荐
所有评论(0)