Jenkins企业应用进阶详解

CI/CD,DevOps介绍

 

持续集成(Continuous Integration,CI)

代码合并,构建,部署,测试都在一起,不断地进行这个过程,并对结果反馈

 

持续交付(Continuous Delivery,CD)

部署到生成环境,给用户使用

 

持续部署(Continuous Deployment,CD)

部署到生产环境

image_1cuvrsmuj1bovjsabm5b3jfi19.png-27.6kB

 

部署Git版远程仓库

 

系统环境要求

主机名IP地址备注
Git 192.168.200.70 Git服务器
Jenkins 192.168.200.91 Jenkins服务器

cat /etc/redhat-release

uname -r

systemctl stop firewalld

systemctl disable firewalld

systemctl stop NetworkManager

systemctl disable NetworkManager

echo "`hostname -I` jj-git" >> /etc/hosts

echo "`hostname -I` jj-jenkins" >> /etc/hosts

image_1cuvsifj61o1pnck1qq71olderu1m.png-45.8kB


image_1cuvskju9g7q16ojb3o5hqt9723.png-53kB

 

部署Git版远程仓库

yum -y install git

which git

image_1cv0259opsi1mu8fqvjgi129a9.png-128.1kB

 

创建Git账户

useradd git

echo "linyaonie" | passwd --stdin git

image_1cuvt6nfs1rsbi8m1baqsplbjn2g.png-18.1kB

 

创建Git远程仓库

cd /home/git

mkdir repos

cd repos

mkdir app.git

cd app.git

pwd

git --bare init

ls

image_1cv027vt915e8117b1jks1mg61keo1j.png-46.7kB

 

在Jenkins服务器进行git代码远程推送测试

yum -y install git

which git

image_1cv025rrn19931lfr1tmjojbi916.png-128.7kB

 

创建一个目录,尝试git clone远程Git服务器仓库的代码

mkdir /test

cd /test

git clone git@192.168.200.70:/home/git/repos/app.git

输入远程服务器git用户的密码,会提示你克隆一个空的

ls

image_1cv02a1cfub0vi19qisvo1br120.png-53.4kB

 

进行代码提交测试

cd /test/app

echo "sunlin" >> test

cat test

git config --global user.email "1123400300@qq.com"

git config --global user.name "Mr.sun"

git add *

git commit -m "第一次测试提交"

git push -u origin master

输入git服务器的密码

git branch -a --->-a参数也可以看到远程仓库的主分支

image_1cv02ismaovq1f5r1729ka9l6b2d.png-78.2kB

 

在jenkins服务器进行SSH免密钥操作

ssh-keygen

一路回车即可

image_1cv02nvtt1uf31kmq1g6pr9v19kd2q.png-46.6kB

 

进行公钥分发

ssh-copy-id -i ~/.ssh/id_rsa.pub git@192.168.200.70

输入Git服务器的git普通用户密码

image_1cv02oi4k1sis17fc19glhjoha137.png-44.7kB

 

测试免密钥的git推送测试

cd /test/app

ls

echo "lin" >> test

cat test

git add *

git commit -m "免密钥提交测试"

git push -u origin master

image_1cv02r2571ht5ge31ilmdlpka24n.png-74.6kB

 

Jenkins的企业应用管理

jenkins官网:https://jenkins.io 
redhat版jenkins官方页面:https://pkg.jenkins.io/redhat-stable

 

jenkins所有包下载链接

链接:https://pan.baidu.com/s/1rQ6iIQCspbCvfiV2egKItw 
提取码:cych

 

Jenkins的安装与基础配置

rpm安装方式 
yum -y localinstall jenkins-2.138.1-1.1.noarch.rpm

安装Jenkins的三种方法 
利用yum源安装 
下载jenkins的rpm包安装 
jenkins的war包安装

由于之前已经介绍过war包安装jenkins的方式了,在这里我们只用yum来安装jenkins

 

利用yum方式安装最新版本jenkins

 

下载jenkins的yum源文件

yum -y install wget

which wget

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

 
  1. [jenkins]
  2. name=Jenkins-stable
  3. baseurl=http://pkg.jenkins.io/redhat-stable
  4. gpgcheck=1

image_1cv03156s1r2b12ip2a017sf1sja54.png-109kB

 

导入jenkins的rpm证书

rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

image_1cv031n88m8mrft1jt51esm1lsj5h.png-10.5kB

 

利用yum安装最新版本jenkins

yum -y install jenkins

image_1cv0339ku1e3rni18ls1705157a6b.png-97.3kB

 

查看jenkins安装路径

rpm -ql jenkins --->-ql参数是查询rpm的安装路径

 
  1. /etc/sysconfig/jenkins --->jenkins配置文件

image_1cv033kef14de182j1fdt19tu10i56o.png-18kB

 

安装和配置jdk环境(上文有下载链接)

由于jenkins是java开发的所有需要jdk支持

 

解压安装jdk

ls

tar xf jdk-8u171-linux-x64.tar.gz -C /usr/local/

cd /usr/local/

mv jdk1.8.0_171 jdk

/usr/local/jdk/bin/java -version

image_1cv036s90gtvnkq1l6e97o1r8r75.png-58.4kB

 

配置java环境

sed -i.org '$a export JAVA_HOME=/usr/local/jdk/' /etc/profile

sed -i.org '$a export PATH=$PATH:$JAVA_HOME/bin' /etc/profile

sed -i.org '$a export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' /etc/profile

tail -3 /etc/profile

source /etc/profile

java -version

image_1cv03916c15blpj4100lacuvse7i.png-59.5kB

 

安装和配置maven环境(上文有下载链接)

 

解压安装maven

ls

tar xf apache-maven-3.5.0-bin.tar.gz -C /usr/local

cd /usr/local

mv apache-maven-3.5.0 maven

image_1cv03ajpt16qc1do4b6vt1c1vpv7v.png-25kB

 

配置maven环境变量

sed -i '$a MAVEN_HOME=/usr/local/maven' /etc/profile

sed -i '$a export PATH=${MAVEN_HOME}/bin:$PATH' /etc/profile

tail -2 /etc/profile

source /etc/profile

mvn -v

image_1cv03c34t31b4rm1qjqq1jfmq8c.png-56.6kB

 

启动jenkins

 

因为是yum安装的jenkins所以需要给java做一个命令的软链接,让启动服务的时候可以找到

ln -s /usr/local/jdk/bin/java /usr/bin

ll -d /usr/local/jdk/bin/java

image_1cv03f0vihgf13vn1ful6cfihoak.png-18.1kB

 

启动jenkins

systemctl start jenkins

systemctl status jenkins

image_1cv03ftqb1fubl8djipngira9bh.png-73.9kB

 

查看jenkins监听端口8080

netstat -antup | grep 8080

image_1cv03g9fdk9h15udnjbh1b9jkbu.png-14.3kB

 

添加开机自启动

systemctl enable jenkins

image_1cv03hcaf1j5cqlb5hn1cnq13vmdu.png-15kB

 

通过浏览器访问jenkins

http://192.168.200.91:8080

image_1cv03k5v372e1g3s1qru7s6s2teb.png-121.3kB

 

查看jenkins解锁密码,并复制到jenkins的web界面,解锁jenkins

cat /var/lib/jenkins/secrets/initialAdminPassword

image_1cv03lu3v7vfbll164f1d2a91ieo.png-12.9kB

 

初始化jenkins

使用默认插件配置安装即可

image_1cv03nr7k184la2p1m3c14c01nof5.png-139.7kB


image_1cv03s7ke108gh6s1og91rps1e34k8.png-128.5kB

 

创建一个jenkins用户

image_1cv04a8311sicjgl1l0s9vhif9l2.png-108.2kB


image_1cv04atbl1e96to016qu15p087clv.png-113kB


image_1cv04cng51dc4u4s1sr516o1qeims.png-65.2kB

 

改变jenkins界面语言

image_1cv04ol6ruo7i6dtvf1tlo1ejro9.png-167kB


image_1cv04qurl1gmatvm1ab1q9qmmeom.png-158.3kB


image_1cv04rne5m6310rj1el1otf1tppp3.png-145.1kB


image_1cv04uncm7u51hug2kb1g5j1gefqg.png-107.9kB


image_1cv050965u4f9nfv2a1t7fahsl.png-95.3kB

 

常用的系统模块介绍

系统设置 --->jenkins自身相关的全局配置和设定

全局安全配置 --->jenkins自身相关的安全配置设定

凭据配置 --->jenkins集中管理账号密码密钥等的设定

全局工具配置 --->外部的第三方工具的配置信息设定

image_1cv2ltl8ao7rpa729gbjtaht51.png-143.3kB

 

系统管理--->全局工具配置介绍

image_1cv2m0h6r1aag1krb13ns14jhg2i6e.png-143.1kB


image_1cv2m1tb21t8l14al1svir35t436r.png-120.7kB

Maven配置 
配置maven的settings.xml配置文件的位置路径(不修改为默认路径)

配置JDK 
配置java命令的执行路径,JDK是Java语言的软件开发工具包

配置Git 
配置git的命令执行路径,git是分布式版本控制软件

配置Gradle 
配置Gradle的执行路径,Gradle是面向java的自动化构建开源工具,同maven

配置Ant 
配置Ant的执行路径,Ant是面向java的自动化构建开源工具,同mavaen

配置Maven 
配置maven的命令执行路径,maven是面向java的自动化构建开源工具

配置Docker 
配置Docker的命令执行路径,Docker是最近大热的容器级虚拟化产品

 

全局工具配置--->配置JDK

image_1cv2meef01hl6f6i1h721f251uef8t.png-85.6kB

 

全局工具配置--->配置Git

image_1cv2mginvpc520m16b11dik1g5n9a.png-102kB

 

全局工具配置--->配置maven

Apache Maven是一种创新的软件项目管理工具,提供了一个项目对象模型(POM)文件的新概念来管理项目的构建,相关性和文档。最强大的功能就是能够自动下载项目依赖的库文件。

在开发中,为了保证编译通过,开发会导出去寻找项目依赖的jar包(类似rpm安装软件时需要的一堆依赖包)

因此,就要用到maven(Ant和Gradle也是干这个的)

Maven其实就类似Linux的Yum仓库,可以自动帮我们下载(公网源)和安装java项目所依赖的支持包

image_1cv2mpa457m2100215ah1e3i1n3ta7.png-111.6kB

 

用户权限管理

在一个成熟的企业应用环境中,jenkins是需要通过权限来控制角色功能使用的 
开发人员利用jenkins===>生产环境项目代码版本发布(A/B测试等) 
测试人员利用jenkins===>测试环境自动化部署 
运维人员利用jenkins===>生产环境项目代码版本回滚

 

安装插件Role-based Authorization Strategy

image_1cv2n38vd1uk5rfn3oeqi512uabk.png-149.6kB


image_1cv2naf9k1tj51i3u92r1e22126ac1.png-94.9kB


image_1cv2nd5sfrfi1caji2m41b1i30cu.png-80.2kB


image_1cv2njqq2boanno1sfeq6i1e6a9.png-149.7kB

 

注册两个用户(开发和测试)

开发账号

image_1cv2nni85140n1bfg1ipiaqmmmr19.png-74.2kB


image_1cv2nsi058n4sig1vp18jh1d5v2m.png-78.6kB


image_1cv2nt6nsr3jgcn15lo98rv8h33.png-57.6kB


测试账号

image_1cv2nujdq15rau0o16j5n6t1het3g.png-70.7kB


image_1cv2nustvubi1n3peell1e1jtc3t.png-57.2kB

由于开启了Role-based Strategy,此时用户没有任何权限

 

系统管理--->Role-based Strategy

image_1cv2o4l7prhd1mfh1s2a1vhel2d4q.png-185.9kB


image_1cv2o528a1tha17k3u3h1kh91qpd57.png-59.3kB

Manage Roles:权限管理

Assign Roles:授权管理

 

(1)进入权限管理

image_1cv2o7dlpbn7lcdnbts9v1v695k.png-57.3kB

Global roles 
jenkins的整体权限分配,至少要开读的权限

Project roles 
正则匹配具体的项目,分配管理权限

image_1cvf0342ll777281ribd3f8q11p.png-301.4kB


image_1cv2os8eps2j3cb1sl0in717016h.png-160.5kB

 

(2)进入授权管理

image_1cv2otjcm1h7n149g1e6fsah2d67e.png-59kB


image_1cv2p3eor1s1d16vkv51sha1psd9h.png-130.2kB


image_1cvf071n0afn1hra1domb5to0226.png-236.4kB

 

(3)创建两个项目分别以A-和B-开头(创建方式都一样)

image_1cv2pfubvo7b2d45p2fq311p69u.png-64.4kB


image_1cv2pgtc81v1i1213ljc1jus142dab.png-116.7kB


image_1cv2phoklfh0vu3i711uejp94ao.png-117.4kB


image_1cv2pjnslcd111hm1gq812aic5bl.png-85.5kB

 

(4)登陆用户user1和user2进行权限登陆测试

image_1cv2pn96d1flm7bl1mlt1udtvuhe1.png-86.9kB


image_1cv2pnlbm129gni7m5d1i5k13dtee.png-86.6kB

 

参数化构建

 

什么是参数化构建

参数化构建就是在执行自动构建之前可以对构建过程手动传入外部参数,从而改变构建得过程

 

(1)配置一个构建脚本,然后执行

image_1cv2q2nh8fujnve1921t2h153ber.png-113.9kB


image_1cv2q430m595ieo5of5m3811f8.png-124.4kB


image_1cv2q7khlg7r1e0c1dblrql136vi8.png-93.1kB


image_1cv2q9cb91qlp1uo21ret1q032p8jl.png-66.4kB


image_1cv2qa01m13v416mmufoop91spck2.png-51.8kB


image_1cv2qab5c1rm6fp510cn2i1kclkf.png-55.7kB

 

(2)在A-Web上添加参数化构建功能

image_1cv2qrbtk14c11t6umepd4smtvlf.png-120.3kB


image_1cv2r3uue30r1ak81g1hs36p5kls.png-41.3kB


image_1cv2rdktgimc1t2u3r5vl1sran3.png-27.2kB


image_1cv2rfvmj1fhvnca8d27u61l2kng.png-91.6kB


image_1cv2rj38m1ijhckuasm1j30otbod.png-51.1kB


image_1cv2rjjef4gonllupe16ui10gvoq.png-65.5kB


image_1cv2rk0poa4f17d24m41ksl1ssspn.png-55.8kB


image_1cv2rl55g1bn31gg319el1d751j3iq4.png-50.1kB


image_1cv2rm748eov5q11l1h1nv01sodqh.png-67.5kB


image_1cv2rpakupdkjjuigvq7997gt1.png-55.7kB

 

安装插件Extended Choice Parameter

Extended Choice Parameter 
作用就是在参数化构建时可以出现一个下拉框让用户直接选择多少个值

image_1cv2s60541g06gjq8a01mu91dfhte.png-103.3kB


image_1cv2sktcc1orelgu1ef3jt918u1101.png-102.4kB


image_1cv2sjhff1a1n1lgbrrftkk1k5duk.png-101.2kB


image_1cv2ss9o411skc8ecq1skpqg410e.png-111.9kB


image_1cv2stqs81qim16l11vgj1jp114k210r.png-26.3kB


image_1cv2t03b9v191vnql011qo117fn118.png-88.4kB


image_1cv2t0mqb11js1tt41av51fk61tqb11l.png-52.7kB

 

插件引用文件里的参数

我们还可以在一个文件里创建参数,然后让插件引用这个参数

cd /opt

vim jenkins.property

 
  1. yunjisuan=xin01,xin02,xin03

cat jenkins.property

image_1cv2t98131hc0l011mph1skn2ct122.png-15.2kB


image_1cv2tcbdmvmjii3190rg3m8uq13v.png-108.1kB


image_1cv2tg3qo1g571fj7tdf1pg1109r16f.png-132.7kB


image_1cv2tj2481hhh1gqu8qotcf1rco179.png-48.7kB


image_1cv2tjeja1tshq2eqd0fri130b17m.png-49.7kB

 

Git参数化构建插件

Git Parameter插件可以直接获取Git仓库的branch,tag等信息

 

安装插件Git Parameter

image_1cv2tno26lo520c1l8oq7k2ro19i.png-80.5kB

 

添加远程Git仓库的密钥管理

image_1cv2ttske1nri1cqp1qh41qpsl019v.png-94.9kB


image_1cv2u2mj46ch1hijdp019igpca1as.png-75kB


由于我们之前用jenkins的root账户已经做过免密钥连接git了 
因此,我们创建ssh的密钥管理

image_1cv2uaobf14481crdl86192v1chm1b9.png-164.8kB


image_1cv2uccgq1c3l8t0fqc13l1udf1bm.png-105.1kB


image_1cv2ue2sc1pqbng018t11dbn1tkj1c3.png-80.5kB


image_1cv2ued3v1c8q153ir13cf14je1cg.png-84.5kB

 

进行Git参数化构建并测试

image_1cv2ufmic1ggkd3q7eh11u1jmn1ct.png-107.8kB


image_1cv2uh3uuscgin262q9q52m71dq.png-102.7kB


image_1cv2uskhid7d1b3n1ctg1irv18je1e7.png-133.6kB


image_1cv30e8s71689sltqtunpk113a1fh.png-101.6kB

 

手动创建一个分支在提交并再次查看构建

image_1cv30muio3crr6517j3117317cb1fu.png-73.4kB


image_1cv30nb2211bhmftguq1n3d1nfe1gb.png-105kB

 

Master-Slave架构

image_1cv30qo7b6dgea21suq1eeq1em11ho.png-95.4kB

主机名IP地址备注
Git 192.168.200.70 Git服务器(Jenkins的Slave节点)
Jenkins 192.168.200.91 Jenkins服务器

jenkins的分布式构建操作,可以通过Slave代理节点来执行项目任务

 

首先在Git服务器上安装Jdk

ls

tar xf jdk-8u171-linux-x64.tar.gz -C /usr/local

cd /usr/local

mv jdk1.8.0_171 jdk

ln -s /usr/local/jdk/bin/* /usr/local/bin

image_1cv32hp85ihqemoj011e1mfu1k9.png-33.3kB

 

添加一个用于连接slave代理节点的SSH证书

之前已经添加好SSH证书了

image_1cv31acbk33015l68lrduc1ipm1i5.png-93.3kB

 

系统管理--->节点管理

image_1cv31co2b158lkh0cm4vmfqqn1j2.png-202kB


image_1cv31j72lik5gf158m6c5vha1jf.png-93.2kB


image_1cv31lf9bfv2117410sa1b288ce1js.png-94kB


image_1cv32ljsk9jdose19clhem1uff1km.png-135.3kB


image_1cv32n4tp39d63av9b1lsugm11lj.png-100kB


/var/lib/jenkins --->jenkins的工作空间

ls

image_1cv32u4o1lt21v2c13pgcjno461nj.png-13.5kB

 

重新配置构建过程并测试

image_1cv338rlp8035h91h3dend172e1oq.png-110kB


Restrict where this project can be run===>限制项目的运行节点

image_1cv3370b5c81skf16ia47lsdp1o0.png-124.7kB


image_1cv337qn317qh19gg1plj11o7bjq1od.png-114.8kB


image_1cv33rc3p2so16ut1c4j10jolki1p7.png-102.5kB


image_1cv33s9ev13g5102c3tq1g9nmj31pk.png-94.6kB


image_1cv33te1c17sb41838lobn1d981q1.png-67.5kB


image_1cv33uhj4q701dqoeon9m1v9f1qr.png-163.2kB


cd /var/lib/jenkins/workspace --->如果要代码上线的话,在把这个目录的内容放到网页目录即可

ls

cat test

image_1cv340h0p1vl7v9fc5e1pt29re1r8.png-18.2kB

posted @ 2019-07-24 15:30  L1n  阅读(931)  评论(0编辑  收藏  举报