Jenkins自动化部署

一、传统的方式

        在我们传统的部署方式中,我们需要的流程是首先把我们本地的java程序打包成一个jar文件并且传到我们的服务器当中去,我们可以在maven当中传地址进行远程发送到服务器当中,然后使用vim编辑器进行修改我们的配置然后完成我们的部署,当然我们也可以使用硬件将我们的程序拷到我们的u盘上,然后拷贝到我们的服务器当中,进行一个部署,但是这样传统的部署会产生一个问题,那就是我们传统的部署适合的是单体的项目,当我们在集群条件下或者使用微服务的条件之下,当项目需要多个服务器的时候我们如果还是按照传统的方式进行部署,那就需要一个服务器一个服务器的去进行部署,这样的话会特别的繁琐而且做着重复性的工作(比如说每台的操作流程都一样)那么这样的话我们可以进行一个优化,本文中我们将学习采用Jenkins的方式来进行部署我们的项目

 

 

ed874be2a0b54c879cd43ca2c4984929.png

 


二、设计概念

 

CD(持续部署)

        当我们的产品部署到服务器上的时候并不是一成不变的,可能每天都会产生新的代码那就会每天都要向我们的服务器进行提交部署,这种持续的部署我们称之为持续部署

        在项目开发中进行单元测试能够通过,但是部署到服务器上运行出现问题,所以仅仅单元测试还不够,各个模块都必须能够在服务器上运行,

        持续部署的关注点在于项目功能部署至服务器后可以运行,为下一步测试环节或最终用户正式使用做好准备

 

CI(持续集成)

        当我们做大型的项目的时候我们每一个组都只是负责一部分的模块,本模块独立测试虽然能够通过,但是上线前夕将所有的模块整合到一起集成测试却发现了很多的问题,想要解决这些问题就需要把代码返工并且可能出现仍然有问题的情况,这种耗费时间物力人力显然是不合适的,

        想要解决这种问题,就要持续性的把所有的模块集成在一起测试,有问题尽早地发现,这就是持续集成

        持续集成的关注点在于尽早发现项目整体运行问题,尽早解决

 

CD(持续交付)

        我们的产品上线之后我们只是从数据方向功能方向进行一个设计,但是用户是否喜欢使用,是否让用户喜欢这个是用户说了算的,所以我们的产品上线之后我们要做的就是不断地小版本之间进行一个迭代,这里边涉及到了运营,产品经理等多方面共同合作的结果,项目的各个升级版本之间间隔时间太长,对用户反馈感知迟钝,无法精确改善用户体验,用户流失严重

        我们就要用小版本不断进行快速迭代,不断收集用户反馈信息,用最快的速度改进优化,要持续的更新,持续的迭代,持续的交付,这就是持续交付

       持续交付的关注点在于研发团队的最新代码能够尽快让最终用户体验到 

 

总体目标

        降低风险

        减少重复过程

        任何时间、任何地点生成可部署的软件

        增强项目的可见性

 


三、集成工具

 

Jenkins和Hudson

        目前最流行的一款持续集成化及自动化部署工具

        Jenkins和Hundson之间的关系:2009年,甲骨文收购了sun并继承了Hudson代码库。在2011年初,甲骨文和开源社区之间的关系破裂,该项目被分成两个独立的项目

        Jenkins:由大部分原始开发人员组成

        Hudson:由甲骨文公司继续管理

        所以Jenkins和Hudson是两款非常相似的产品

 

fcc963f2a17c4e2e97483b265d8761b5.png

在大型的项目中,产品上线前的测试会分两步一步称之为SST,用来交由测试进行测试代码(测的是功能是否有问题),还有一个称之为UAT,用户验收测试(测的是用户习惯,比如说开发人员喜欢将删除按钮放在右边而用户喜欢在左边),如果说想产品上线的话,我们只需要将UAT中的代码进行一个打包,这样我们的生产环境是UAT中的包,运行的也是UAT中的包

 

技术整合

        Jenkins可以整合GitHub或Subversion

        Hudson也可以整合GitHub或Subversion

        二者既然是同源的工具软件,操作和指导思想就是接近的

 


四、Jenkins简介

a317e7cf2701486488fef7cd1a8b3ac9.png

 

Jenkins的下载地址:  Jenkins download and deployment

 

 

 

Jenkins

Jenkins是一款流行的开源持续继承(CI)和持续部署(CD)工具,广泛应用于项目开发,它具有自动化构建,测试和部署等功能

 

Jenkins的特征:

        开源的Java语言开发持续集成工具,支持持续集成,持续部署。

        易于安装部署配置,可通过yum安装,或者可以下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。

        消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当初构建完成时通过e-mail通知,生成Junit/TestNG测试报告。

        分布式构建:支持Jenkins能够让多台计算机一起构建/测试。

        文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。

        丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,例如git,svn,maven,docker等。

 


五、Jenkins部署程序

        5a32f8e1148a4ce99b9c6de699d51599.png

 

1)首先,开发人员每天进行代码提交,提交到Git仓库

2)然后,Jenkins作为持续集成工具,使用Git工具到Git仓库拉取代码到集成服务器,再配合JDK,Maven等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新再执行一次整个流程

3)最后,Jenkins把生成的jar或war包分发到测试服务器或者生产服务器,测试人员或用户就可以访问应用

 

1、安装github托管服务

 在CentOs7中进行安装 

 

安装相关依赖

 yum -y install policycoreutils openssh-server openssh-clients postfix     

  ef570c5647a14e10a51c6f14de28891c.png        

启动ssh服务&设置为开机启动

systemctl enable sshd && sudo systemctl start sshd        管理员密码

662de870c4f8478b8a3300caf0a46639.png

 

 systemctl status sshd   查看是否开机自行启动ssh

c0a98568b6fc4c7c8cf73e9c502477ad.png

 

设置posfix开机自启,并启动,postfix支持gitlab发信功能

systemctl enable postfix && systemctl start postfix

a12036e1bec44691b028bc3a0d6bce6b.png

 

开放ssh以及http服务,然后重新加载防火墙列表

systemctl status firewalld          查看当前防火墙是否开启

3fab09dfd26c47369b8d4b4f353467a4.png

 firewall-cmd --add-service=ssh --permanent

68070b7d62fc41dfa33d4b57efeac17d.png

 

firewall-cmd --add-service=http --permanent

66c76fd886334038af1e1209e6a0e704.png

 

firewall-cmd --reload

83bd10730ed141dfb9e2add817064fd3.png

 

 

如果关闭防火请就不需要做以上配置

 

下载gitlab包,并且安装

在线下载安装包

Index of /gitlab-ce/yum/el7/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

4a7218a337834498a58ff43642e81671.png

 

拖动文件到linux中

 

b3459d2fab764801a14eb81d87d45394.png

 

在文件存放的当前目录下安装GitLab

rpm -ivh  gitlab-ce-12.4.2-ce.0.el7.x86_64.rpm

da0dc4387803412c90718172b7144106.png

 

修改gitlab配置

cd /etc/gitlab

f6ff006db5e04ce999afe2b6e3a5175f.png

 

vi gitlab.rb

703f463ef8e7440f89e050811192d40b.png

efcd5a86779643b6bc783817b0ac6757.png

 

 加上端口号 --- 以82举例

7893e2da95614d2f89e6bfff95206e7f.png

 

 按下esc 

然后搜索

nginx['listen_port'

 f4978dac091d4bc4a5aca050094bb568.png

 

59942a76abde4208aa23e3f275343e1e.png

 

 :wq 保存退出

 

重载配置及启动gitlab

 

gitlab-ctl reconfigure

d2f3e7c12f104459a5a807d86de730f7.png

 

等待加载成功之后重启服务

gitlab-ctl restart

92ccb8ccbfec4a3694ef5186d391cd22.png

 

 

把端口添加进防火墙

 

firewall-cmd --zone=public --add-port=82/tcp --permanent

fcae350cdbef4320996d454eb15672c5.png

 

firewall-cmd --reload

8637c9b43fa5415da23196dde0acf707.png

 

 浏览器中输入这个网址  ------ 原先我们vim中修改的地址

 

IP地址如果发生了变化那么就用连接的新的ip地址进行登录

28e43a2c966745578e89693dfca2032e.png

 1044199baf8b48e496f08f7ab0038889.png

 第一次登录的时候有一个默认的账户名叫root 我们需要进行添加登录密码 密码为8位  例如我改成root123123

 

3ba3a328119a47719d3410b743effb9e.png

 

 

 b625fc43552b4bd49bad1f9b714dec4c.png

 

此时证明登录成功!

 

Gitlab添加组、创建用户、创建项目

 

1)创建组

使用管理员root创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限,不同的组就是公司的开发项目或者服务模块,不同的组添加不同的开发即可实现对开发设置权限的管理

创建组的目的就是为了更好的管理项目,可以把项目或者说相似的项目创建成一个组,这样再往里添加用户,这些用户就可以有操作这些组的权限,便于管理

 

点击Create a group 创建组

ac99928eacd846208a95afda02db10fa.png

 

bd6b8219dc224260a508f3a6d4dcc137.png

 

585e5d9cda9e4ca3abecae72f6a21d6d.png

 101755c088794fb1952897f83c062bb8.png

 

2)创建项目

025cd49f84524358808c9142ab3ce5b1.png

 b8ee5919bf8e4abebaf476585a374412.png

c199a58e3bb847fa8eab3d2f37384ed2.png

此时证明组已经创建完成

 

3)创建用户 

6f1d2260113a48bdb80d4dcbc3df0a73.png

 973cd38439944284adaa8ffc34280eb7.png

 a87e530f66de484a83b13011f28703b7.png

 a46444d117c142d2ba4d8aa4bab6b8e1.png

 

 先不创建密码,密码稍后创建1ee514db085547c2afcdf4e16ea1ea46.png

75597c4111ae48b58673acbf7a0497e2.png 52f64c4bc5744201b70d05245fae1ecd.png

 96115e5cb6934745a02ca4d26f53da1b.png

 0a0bfb11bdd3448e93b673eada395396.png

 此时用户成功创建

 f5c880843dd94930a5427e5908a9b768.png

 74c6496fe7f3487faa8403bb9b6e6f85.png

 fac09528dafa4e64953c2ef7b5e250a7.png

 36c23fd0a8184d65b2e62443f1987b24.png

 fd96b538d90a470d8c044e0fe20794a2.png

 Guest:可以创建issue、发表评论、不能读写版本库

Reporter:可以克隆代码,不能提交,OA、PM可以赋予这个权限

Developer:可以克隆代码、开发、提交、push、普通开发可以赋予这个权限

Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目、核心开发可以赋予这                     个权限

Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员、开发组组长               可以赋予这个权限 

51358bb02f1e4dd788f2f3bc44073601.png

 39294c53422941848d2b7aa6bfa845f5.png

7144b308e9b744dc90c05413518bbb25.png

d6380bd0f0f147f087a2b66aa9cf82b3.png

033a93db5bc14c25a8cb2232af9c8e9b.png

点击Set new pasword

e8b74614df094296ab2c8516f542db4f.png

此时证明创建的用户和组创建成功,并把用户成功添加到了组里面 

 

源码上传到gitlab仓库

 

f852f3b3f948428da8ff47484421d90a.png

 

212e3715cbf241719ad03f8a6af7b2b2.png

 

cf57aa8f69d7459780e624bc99ef2295.png

此时就在我们的根目录下创建了一个本地仓库

 

7dc83decdfa44873a83433c2e14fa273.png

 

5c296c72d7284802bcaebd0423cec7b2.png

 提交代码到我们的本地仓库

 

fabce54fbc374d65ba1d274867ab798f.png

 

fe4b9cf24a2b4bdeb9468650f9da5afd.png

 

 62dfe18371724a038b14951622552be2.png

 

4f4a52cde0d74d99a3b92b756d617129.png

 

27b5d7aced874d92b7e82fa723f9c8f7.png

 

f63e15d8f3754a59874671f26494aa7e.png

 

c292486317744cc28be7266d93e0c922.png

 

e9627bd4c9624fbbb702eec7cd5874aa.png

URL放的是下图http的地址 

 

d1487aa1ea0f40ef866f67e189363c94.png

 

125b489ba90241d885dbf1db50557501.png

 

1d1217d7df9245468284cce1a03eda41.png

 

8b954434bf4443a6b550de8aba843e92.png

 

 3883bde5f6e84785b39befc3f41d7399.png

刷新上图这个页面 

 

046b3127a83841d6b61d54032f2e7e25.png

 出现此页面证明提交成功

 

Jenkins软件安装

创建一个新的linux服务器用来搭建我们的jenkins环境

 

1) 安装JDK

Jenkins是java编写的它需要依赖JDK,所以我们第一步需要先安装JDK,这里我选择1.8版本

 

yum install java-1.8.0-openjdk* -y

6403b83c04334e93a06d1cc0628ac91c.png

 

2) 查看安装的版本

java -version 

764418175e1e47e593a98206593d9054.png

 

3) 查看安装目录下的内容

cd /usr/lib/jvm

ll

78f8d8600fa543089a59e564ce0a3e7d.png

 

4) 查看jdk1.8完整的目录

cd java-1.8.0-openjdk

ll 

6698786ea38447a79187b97cf3475350.png

此时jdk安装完毕

 

安装jenkins

jenkins安装地址      

Index of /jenkins/redhat-stable/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

 

a470c9323b4a4ef9a3607baf0d8eeaea.png

 

将rpm文件转移到我们的linux系统当中去

5762f95d28584c4aa32c99ab8ddf3118.png

 

此时输入

rpm -ivh jenkins-2.303.1-1.1.noarch.rpm

这个时候会报以下错误

b3ef636b94634d6fac046fb30f748487.png

 

因为没有导入依赖安装包,所以此时需要导入依赖

 

依赖安装 epel-release

yum -y install epel-release

8beaffe2a8df42e5b6aba4a8e4b59d06.png

 

依赖安装 daemonize

yum -y install daemonize

46fb31d068f34f1eafda446f5ff276f5.png

 

 rpm -ivh jenkins-2.303.1-1.1.noarch.rpm

3084632e68894020986e85ffd31caf1f.png

 

cd /etc/sysconfig

7e28fa8f823c4b72a9c536ba27322826.png

 

vi jenkins

f110ae6aa7184f488ce183dadd43e4c3.png

 

 0aecfce4ddc64d59b19ec7953c2e472d.png

 f896eef2380349c8857863f5b3cf1a12.png

29016937e3c44ba68d060a3cb3f99ae7.png

systemctl start jenkins 

 

把端口添加进防火墙

 

firewall-cmd --zone=public --add-port=8888/tcp --permanent

188bed1085924483ba0a055c3f73f51f.png

 

firewall-cmd --reload

5fa1d7a97c8947b6b832415c82850f72.png

 

输入地址+端口号

7a099053360d4fe6a44fdeccd7997535.png

让我们在linux的 /var/lib/jenkins/secrets/initialAdminPassword 这个地址中找密码

 

cat /var/lib/jenkins/secrets/initialAdminPassword

58291ef7eba648909c4110b63e8c0ca7.png

 

2be3bcc09e25425e8e926d378cd2016c.png

点击选择插件来安装

因为如果我们使用默认的jenkins那么可能会安装好几次还有可能会安装失败,所以先跳过这一个部分在接下来的步骤中进行安装,选择一个国内的地址而且安装的速度还会非常的快

0f8113d58a434462a72a2ffe1938346f.png

 7c98040d7e70410ca58ccce1d7141850.png

 

53eff8a52ab447a98117c6dcdd5792be.png

 

4f8f0ffd77c5463e8e0b5a25d5447070.png

 

580a4f2f441a4185bf20ab96cb275b23.png

 点击保存并完成

 

0946473982c84f599d262d845cbe0de1.png

 

 67a4bfcedbd547078298172b1f5f0038.png

 点击开始使用jenkins

 

261e8ae4667748e8bd0d15751ef43f63.png

 此时证明jenkins安装成功!

 

Jenkins插件安装

 

Jenkins本身不提供很多功能我们可以通过使用插件赖满足我们的使用,例如从Gitlab拉取代码,使用Maven构建项目等功能需要依赖插件完成,接下来演示如何下载插件

 

1) 修改Jenkins插件下载地址

Jenkins国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址:

 

feea85c3ad8149db978f121d917b6668.png

 

19154d4a3c7045d3a39dc7bfea2b6179.png

 bc1813b7d1594f92b1b33ba8ce3ac01d.png

 

7d6d18c6acd54099a55076bcf94a7ed8.png 此时可以看到所有的插件已经被安装好了

 

de3d7ca96f0c4a45b5865c6a55948725.png

 

查一下下载到本地的插件

cd /var/lib

02c29c2e53c04711aca4242ba42df458.png

 

cd jenkins/

e8cd3aeaaf8647a5b36b6833efa1e9ed.png

 

pwd

90dd4aa85c8e48e190f7fd43756c7343.png

 

ll

bc2f3d613a0241058965da18698fcd3b.png

 

cd updates/

475ffd1edf334e38b3e579904848226c.png

 

ll

fcb3b2ffa12648b88ccb1a1924e5d93a.png

default.json 里边记录的是jenkins插件中所有的地址

 

现在我们要把地址进行更改,更改成我们国内的地址

sed -i 's/http:\/\/updates.jenkins-ci.org\/download/http:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/http"\/\/www.baidu.com/g' default.json

43d83752e642413f94e355aff7e42dfb.png

 

879523f1366f45c88994ffdc4d611417.png

 

http://updates.jenkins.io/update-center.json

4fa8beb3292c43cfb4bfeeaf9eed1d2b.png

 

 

更换之后点击submit保存

7476e29d35514c6c837c02a856a87b7f.png

 

 

输入 http://192.168.0.128:8888/restart  进行重启

9b00a1e67bb34c03a6d1d1aa1493eb0a.png

 

adc9d9f4737346aa85b5e8e2ca3d528c.png

 

开始重启

0becf68127484fc6a39227f552d400cb.png

 

 bffd3d64537c45049e59975a61706f73.png

 

2) 下载中文汉化插件

4de1dacfd7874a7a8bdc28ec9c64d63a.png

 

 

搜索框输入Chinese

e37d7756685c4f4f8b52dea391248164.png

 

 

f570752bb0764562b6bc9ee4789b4f23.png

 

等待安装

4304206f6a584da68a0aec444398f91f.png

 

 a413d423b12d4c44a070991b76ae5021.png

 

 7df117e0bd894c9bb942bf93fa01b63b.png

 

点击一下刷新

2391109bff1544afbac3c6a161fb36ac.png

 

fa217eef2593414da5c659890d999371.png

 汉化插件安装成功!

 

44c9939c25d64c4487003915e7cdf399.png

 

5393713191c24066a1a720f395c8af15.png

 

Jenkins用户权限管理

我们可以利用Role-based Authorization Atrategy 插件来管理Jenkins用户权限

 

安装Role-based Authorization Atrategy插件

ff342b3be9034b6288cc4016600b30ae.png

 

5437ef3f469042e5b38d946222ee52f5.png

 593c5362ec884ac788357ce54be75bf6.png

 

6444f2ed43e34241a6ab10b8888c4afa.png

 

 9fcee337885f49cf84892ef8eecec90b.png

 

开始安装d41e7ab3a1ad43bcaa44b9600daed627.png

 

安装完成

59c2e8d3632048369ff19d5d4e1f74d1.png

 

7948a3d373bc44bfb2b7265febb73bd7.png 

433a24dd36a748e08ad4741921f96bc9.png 

 92a5cc1be8c840de81ea65be37518efe.png

 7e2b8273b12f4ae296267f50aa2b5ed7.png

db4e6c1a20ed4fee82d611072b4d3d09.png

 fbf5ed31170d483f853b4f66bbf8ecf3.png

67ac57e490d74635826402e19d4c4498.png 

 a06eced2f210444a9569050833286dcd.png

 itcast.* 例如itcast01这样就可以进行访问 

8156ed88987445f297db76971baf99ef.png

 9b4d58bd587445aba192256072d99411.png

 75354c64215342359ca76085732c96a7.png

 e6422af0a42f401890832e172062f508.png

 39fd56e2df2442c09c5882d56314c29f.png

cfd2014ebd354f15ae2f8b2c596e6424.png aa7b56d5ab4f4f5cbd3f498c61cca7f5.png

 ba1659025cc44441b1b263e04402acc0.png

此时 现在我们使用这两个用户去登录jenkins是没有任何的菜单显示的,需要分配权限 

 da23d676caa346dcb81d5824680a021f.png

 21790c0b49aa45e78ec7eec44eb15134.png

 b4e24290bb664ff6aebaca5722450183.png

cf6502b13b6e4f12ba22ef072f84b88e.png 

 de7aec57889441ebbad165a6085c485d.png

 9bf135e6f04b42ecba08c7566f72635d.png

111b33463af84678b54517c2c821a30f.png 

此时再使用aaa进行登录就可以登录了 

 8d1b06b0aaf34782852e9cfe2188dea7.png

但是此时发现这个用户不能看见有与项目相关的东西,所以还要再登回去分配项目相关的权限

9f61e5dd65d64f188f1985aa8b9012b9.png

 c598609159174326bd51c2dfe146b139.png

 283ecba0f7344e7491a5c3c7b1ea1079.png

 将bbb也分配权限

 

 建立两个项目

46b93255884147d8809b411f5ec62fcb.png

 7d060ff1d012494486d082a2578ff8e3.png

 7083a76d1d49484bb6867fb573a5c8fd.png

 相同的方式创建一个itht01

 46f2940ea9e1458f95be88ca91d10491.png

此时我们用管理员登录所以可以看见两个项目

 

现在我们选择aaa进行登录

 b78fee7a2dc7461ba0e07a04bc658f5f.png

只能看见itcast

 

现在我们换bbb进行登录

d78d95bab1db4130936cbbf6781e9ed1.png

 只能看见itht的项目

 

 

 

 

 

  • 11
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值