Jenkins学习笔记

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项目等等,可以自己去探索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值