Jenkins构建CI/CD Jenkins构建CI/CD 什么是CI/CD:持续集成/持续发布—开发(git) --git主库–jenkins (git+jdk+tomcat+maven打包+测试)–发布到tomcat服务器 Jenkins是一个功能强大的应用程序,允许持续集
Jenkins构建CI/CD
Jenkins构建CI/CD
什么是CI/CD:持续集成/持续发布—开发(git) -->git主库–>jenkins (git+jdk+tomcat+maven打包+测试)–>发布到tomcat服务器
Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件
CI / CD 方法简介
软件开发的连续方法基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性。从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预。
它涉及在每次小迭代中不断构建,测试和部署代码更改,从而减少基于有缺陷或失败的先前版本开发新代码的机会。
三种主要方法:
持续集成(Continuous Integration, CI): 代码合并,构建,部署,测试都在一起,不断地执行这个过程,并对结果反馈。
·
持续部署(Continuous Deployment, CD): 部署到测试环境、预生产环境/灰度环境、生产环境。
·
持续交付(Continuous Delivery, CD): 将最终产品发布到生产环境、给用户使用。
一、jenkins介绍
Jenkins 可以通过其网页界面轻松设置和配置,其中包括即时错误检查和内置帮助。 插件 通过更新中心中的 1000 多个插件,Jenkins 集成了持续集成和持续交付工具等等。
Jenkins是帮我们将代码进行统一的编译打包、还可以放到tomcat容器中进行发布。
·
我们通过配置,将以前:编译、打包、上传、部署到Tomcat中的过程交由Jenkins,Jenkins通过给定的代码地址URL(代码仓库地址),将代码拉取到其“宿主服务器”(Jenkins的安装位置),进行编译、打包和发布到web容器中。
是一个开源的、提供友好操作界面的持续集成(CI)工具,主要用于持续、自动的构建的一些定时执行的任务。Jenkins用Java语言编写,可在Tomcat等流行的容器中运行,也可独立运行。
jenkins通常与版本管理工具(SCM)、构建工具结合使用;常用的版本控制工具有SVN、GIT。jenkins构建工具有Maven、Ant、Gradle。
① 持续、自动地构建/测试软件项目。
② 监控软件开放流程,快速问题定位及处理,提高开发效率。
① 开源的java语言开发持续集成工具,支持CI,CD。
② 易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。
③ 消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。
④ 分布式构建:支持Jenkins能够让多台计算机一起构建/测试。
⑤ 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
⑥ 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统](http://img.558idc.com/uploadfile/allimg/centos/e47c45ff5935e673b5d44f6a462747bd.png)
1.开发者会将代码上传到版本库中。
2.jenkins通过配置版本库的连接地址,获取到源代码。
3.jenkins获取到源代码之后通过参数化构建(或者触发器)开始编译打包。
4.jenkins通过调用maven(Ant或者Gradle)命令实现编译打包过程。
5.生成的war包通过ssh插件上传到远程tomcat服务器中通过shell脚本自动发布项目。
测试环境将项目测试没问题后,将项目推送到线上正式环境。
·
1.可以选择手动。
2.也可以通过调用脚本推送过去。
产品设计成型 —> 开发人员开发代码 —> 测试人员测试功能 —> 运维人员发布上线
持续集成(Continuous integration,简称CI)
持续部署(continuous deployment)
持续交付(Continuous delivery)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_02](http://img.558idc.com/uploadfile/allimg/centos/0897c534829081d8bcd8089bb25b8ab0.png)
二、部署应用Jenkins+Github+Tomcat实战
两台机器
git-server ----https://github.com/bingyue/easy-springmvc-maven
jenkins-server ---192.168.246.212
java-server -----192.168.246.210
https://github.com/bingyue/easy-springmvc-maven
安装git客户端:
[root@jenkins-server ~
]
[root@jenkins-server ~
]
[root@jenkins-server ~
]
开始部署jenkins:
[root@jenkins-server ~
]
[root@jenkins-server ~
]
[root@jenkins-server local
]
[root@jenkins-server ~
]
[root@jenkins-server ~
]
[root@jenkins-server ~
]
[root@jenkins-server local
]
[root@jenkins-server ~
]
[root@jenkins-server ~
]
[root@jenkins-server ~
]
[root@jenkins-server java
]
[root@jenkins-server ~
]
JAVA_HOME=/usr/local/java
MAVEN_HOME=/usr/local/java/maven
PATH=$PATH:$JAVA_HOME/bin:
$MAVEN_HOME/bin
export PATH USER LOGNAME MAIL
HOSTNAME HISTSIZE HISTCONTROL JAVA_HOME MAVEN_HOME
[root@jenkins-server ~
]
[root@jenkins-server ~
]
java version
"1.8.0_191"
Java
(TM
) SE Runtime Environment
(build
1.8.0_191-b12
)
Java HotSpot
(TM
) 64-Bit Server VM
(build
25.191-b12, mixed mode
)
[root@jenkins-server ~
]
Apache Maven
3.5.4
(1edded0938998edf8bf061f1ceb3cfdeccf443fe
; 2018-06-18T02:33:14+08:00
)
Maven home: /usr/local/java/maven
Java version:
1.8.0_191, vendor: Oracle Corporation, runtime: /usr/local/java/jre
Default locale: en_US, platform encoding: UTF-8
OS name:
"linux", version:
"3.10.0-693.el7.x86_64", arch:
"amd64", family:
"unix"
[root@jenkins-server ~
]
部署jenkins
[root@jenkins-server ~
]
[root@jenkins-server webapps
]
[root@jenkins-server webapps
]
[root@jenkins-server webapps
]
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomca t/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
如果启动了访问提示
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_03](http://img.558idc.com/uploadfile/allimg/centos/52123b9a01b93de7a4c98c81cc67dbf2.png)
解决办法在
[root@jenkins-server ~
]
[root@jenkins-server conf
]
<Resources
cachingAllowed="true"
cacheMaxSize="100000"
/
>
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_04](http://img.558idc.com/uploadfile/allimg/centos/d673e2faa2ea940042b4079502c89711.png)
重启tomcat
[root@jenkins ~
]
[root@jenkins updates
]
"connectionCheckUrl":"http://www.google.com/"
"connectionCheckUrl":"http://www.baidu.com/"
需要进入jenkins的工作目录,打开-----hudson.model.UpdateCenter.xml
把http://updates.jenkins-ci.org/update-center.json
改为
http://mirror.xmission.com/jenkins/updates/update-center.json
改完重启!
使用运行war的形式安装jenkins,因为伟大的墙出现,“该jenkins实例似乎已离线” 问题:
解决办法:
http://updates.jenkins.io/update-center.json
http://IP:8080/jenkins
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_05](http://img.558idc.com/uploadfile/allimg/centos/e0721f666012d9929246f143a6ccc74b.png)
[root@jenkins-server ~
]
b36b8b04c5b84e659701304dfe848999
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_06](http://img.558idc.com/uploadfile/allimg/centos/b3d9185a41c0b46b5d706d5f884000d0.png)
下面需要很长很长一段时间,耐心等候即可
安装完成后创建系统管理员(自行设定用户名密码)
创建完成后进行实例配置:讲访问地址放进配置框即可—>点击保存—>开始使用
如果注销用户,再次登录失败,例如下图
可通过查看管理员密码文件,进行登录 [root@jenkins-server ~]# cat /root/.jenkins/secrets/initialAdminPassword
f0af29c6ee90435b924091db654b6d81 #复制粘贴到密码框
安装插件:
所需的插件:
• Maven插件 Maven Integration plugin
• 发布插件 Deploy to container Plugin
需要安装插件如下:
-------------------------------------
安装插件Deploy to container ---支持自动化代码部署到tomcat容器
GIT pligin 可能已经安装
Maven Integration :jenkins利用Maven编译,打包所需插件
Publish Over SSH :通过ssh连接
ssh 插件
安装过程:
系统管理---
>插件管理----
>可选插件---
>过滤Deploy to container----
>勾选---
>直接安装
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_07](http://img.558idc.com/uploadfile/allimg/centos/a9b8b743d95665943238be904c494399.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_08](http://img.558idc.com/uploadfile/allimg/centos/997166a875e51bfc5b17682051ba5daa.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_09](http://img.558idc.com/uploadfile/allimg/centos/f257c022c5e39ed1cfda0be7e377b3c9.png)
输入插件名后按回车!
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_10](http://img.558idc.com/uploadfile/allimg/centos/4ded9690b04ef2b5cc890e4d499f53c4.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_11](http://img.558idc.com/uploadfile/allimg/centos/c638f8470e0844c453b3881dfde3a88f.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_12](http://img.558idc.com/uploadfile/allimg/centos/c1efab5ca3a884f60ee56866f5469322.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_13](http://img.558idc.com/uploadfile/allimg/centos/3512ea9d3061058598c37579d60d4aa1.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_14](http://img.558idc.com/uploadfile/allimg/centos/9b36223ededb264e87acd7bc00c27052.png)
以上所有插件安装完成
开始配置ssh
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_15](http://img.558idc.com/uploadfile/allimg/centos/89219f36f82c031fca8379c2b4ac5c8e.png)
邮箱(可选可不选)
- 6.添加远程ssh-server:
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_16](http://img.558idc.com/uploadfile/allimg/centos/ea09aff0c67f9a4287c12b1ba9ab907d.png)
- 7.配置jdk,maven命令,全局配置
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_17](http://img.558idc.com/uploadfile/allimg/centos/b5f90352ab3467474f5f7a5b59649bf8.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_18](http://img.558idc.com/uploadfile/allimg/centos/c1555f4b756aa0a9b0aaa35d74ad6a10.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_19](http://img.558idc.com/uploadfile/allimg/centos/7b811e58f067cc2f0cd66ce44f52fbbc.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_20](http://img.558idc.com/uploadfile/allimg/centos/7d6bcd4d829cd3ee18ed07333fbd382f.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_21](http://img.558idc.com/uploadfile/allimg/centos/5a47f8cd6e0a1d7c283b8a93bd1cad2a.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_22](http://img.558idc.com/uploadfile/allimg/centos/e1fc72c7efd97b67c087f93285e610a8.png)
- 8.构建发布任务
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_23](http://img.558idc.com/uploadfile/allimg/centos/283ef0bce1e1f05e25149a3cac0dff0e.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_24](http://img.558idc.com/uploadfile/allimg/centos/0f910321796279dfd787f742c11746b8.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_25](http://img.558idc.com/uploadfile/allimg/centos/907e4552ce25e2ba43aa8b66a0c39749.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_26](http://img.558idc.com/uploadfile/allimg/centos/73ad4b065a97e6fe48e0e716cdc95d10.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_27](http://img.558idc.com/uploadfile/allimg/centos/002c9f86bccac9fe9fc8a87ff572c6ee.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_28](http://img.558idc.com/uploadfile/allimg/centos/6baedd9b3c01874d716e5f1667dbdef5.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_29](http://img.558idc.com/uploadfile/allimg/centos/032b13994d1f9d2af57e933b0b2d7e02.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_30](http://img.558idc.com/uploadfile/allimg/centos/8776ce46a421742da956f8c55642322e.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_31](http://img.558idc.com/uploadfile/allimg/centos/7c7c67cd4ad88f4241ab4a5638e434a8.png)
- 10.部署java服务器,做jenkins打包上线
[root@java-server ~
]
上传jdk
[root@java-server ~
]
[root@java-server ~
]
[root@java-server local
]
下载tomcat
[root@java-server ~
]
[root@java-server ~
]
[root@java-server ~
]
[root@java-server application
]
设置环境变量
[root@java-server ~
]
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:
$JAVA_HOME/jre/bin:
$PATH
export CLASSPATH=.:
$JAVA_HOME/lib:
$JAVA_HOME/jre/lib:
$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/data/application/tomcat
[root@java-server ~
]
测试:
[root@java-server ~
]
java version
"1.8.0_191"
Java
(TM
) SE Runtime Environment
(build
1.8.0_191-b12
)
Java HotSpot
(TM
) 64-Bit Server VM
(build
25.191-b12, mixed mode
)
删除tomcat默认发布目录下面的内容:
[root@java-server ~
]
[root@java-server ~
]
[root@java-server webapps
]
创建目录和脚本:
[root@java-server ~
]
[root@java-server ~
]
脚本内容在后面:
[root@java-server ~
]
[root@java-server ~
]
脚本内容:
[root@java-server script
]
export JAVA_HOME=/usr/local/java
webapp_path="/data/application/tomcat/webapps"
tomcat_run="/data/application/tomcat/bin"
updata_path="/data/update/`date +%F-%T`"
backup_path="/data/backup/`date +%F-%T`"
tomcat_pid=`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`
files_dir="easy-springmvc-maven"
files="easy-springmvc-maven.war"
job_path="/root/upload"
echo "Creating related directory"
mkdir -p
$updata_path
mkdir -p
$backup_path
echo "Move the uploaded war package to the update directory"
mv $job_path/
$files $updata_path
echo "========================================================="
cd /opt
echo "Backing up java project"
if [ -f
$webapp_path/
$files ];then
tar czf
$backup_path/
`date +%F-%H`.tar.gz
$webapp_path
if [ $? -ne
0 ];then
echo "打包失败,自动退出"
exit 1
else
echo "Checking if tomcat is started"
if [ -n
"$tomcat_pid" ];then
kill -9
$tomcat_pid
if [ $? -ne
0 ];then
echo "tomcat关闭失败,将会自动退出"
exit 2
fi
fi
cd $webapp_path
rm -rf
$files && rm -rf
$files_dir
cp $updata_path/
$files $webapp_path
cd /opt
$tomcat_run/startup.sh
sleep 5
echo "显示tomcat的pid"
echo "`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`"
echo "tomcat startup"
echo "请手动查看tomcat日志。脚本将会自动退出"
fi
else
echo "Checking if tomcat is started"
if [ -n
"$tomcat_pid" ];then
kill -9
$tomcat_pid
if [ $? -ne
0 ];then
echo "tomcat关闭失败,将会自动退出"
exit 2
fi
fi
cp $updata_path/
$files $webapp_path
$tomcat_run/startup.sh
sleep 5
echo "显示tomcat的pid"
echo "`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`"
echo "tomcat startup"
echo "请手动查看tomcat日志。脚本将会自动退出"
fi
- 11.回到jenkins页面开始构建任务
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_32](http://img.558idc.com/uploadfile/allimg/centos/27e4986f671f64ca9296ade90fdafe5b.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_33](http://img.558idc.com/uploadfile/allimg/centos/2c7e9524dc60063140f56c1adb9b76be.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_34](http://img.558idc.com/uploadfile/allimg/centos/5818908c91d96283943f9006f034b01d.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_35](http://img.558idc.com/uploadfile/allimg/centos/a19a17d0ca044309bcb595d834c7c6e5.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_36](http://img.558idc.com/uploadfile/allimg/centos/dde9b04809f1bdfe292b948faea52cae.png)
- 12.登陆java-server服务器查看:
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_37](http://img.558idc.com/uploadfile/allimg/centos/10de3ca25e5cc70365dc007e42b7f8dc.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_38](http://img.558idc.com/uploadfile/allimg/centos/c67480a7dceed583104925a99e5b97b7.png)
如配置了邮箱查看邮箱,可看到消息
三、部署第一个小项目Jenkins+Gitlab
Jenkins服务器去拉取代码。所以要下载git客户端
[root@jenkins-server ~
]
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_39](http://img.558idc.com/uploadfile/allimg/centos/9660c8d65d16aff3cb0fc22df5de412e.png)
开始一个简单的项目
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_40](http://img.558idc.com/uploadfile/allimg/centos/1b056cd32facb901d8bc9e205af21a24.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_41](http://img.558idc.com/uploadfile/allimg/centos/36abf471748b75d842022a2d50155a36.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_42](http://img.558idc.com/uploadfile/allimg/centos/a3db88b0d622c3e23a57bc3b0f45dcc0.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_43](http://img.558idc.com/uploadfile/allimg/centos/503e81cd00ac3512aa8a5a7098be8255.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_44](http://img.558idc.com/uploadfile/allimg/centos/9598fa2e4bdf7ea55f0640c58815125d.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_45](http://img.558idc.com/uploadfile/allimg/centos/294d026159d2e856d0cf9aca231861c5.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_46](http://img.558idc.com/uploadfile/allimg/centos/abd2e78818fd7705be8a997ed40cd777.png)
[root@jenkins ~
]
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_47](http://img.558idc.com/uploadfile/allimg/centos/49e2ef2c61dfd8f090773ec0e7598cc0.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_48](http://img.558idc.com/uploadfile/allimg/centos/b830b8f93bf354dadd3b8a8910f8e12f.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_49](http://img.558idc.com/uploadfile/allimg/centos/5add2f122d2d3b3e7e253aff55896e7c.png)
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_50](http://img.558idc.com/uploadfile/allimg/centos/a7cd0a94e098fbf57f4706b400a48c00.png)
Jenkins端配置好之后,还应在gitlab端配置Jenkins服务器的公钥
在jenkins服务器上查看公钥
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_51](http://img.558idc.com/uploadfile/allimg/centos/6511c633b426205ea40f0add429c4cae.png)
复制粘贴到gitlab
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_52](http://img.558idc.com/uploadfile/allimg/centos/574ecbd365603aea3be23c82a219a1d2.png)
然后去构建项目。自动拉取代码
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_53](http://img.558idc.com/uploadfile/allimg/centos/1c8be99c68fe47e3c7da8fe2a258852e.png)
注意看拉取到了哪个目录下
![Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_54](http://img.558idc.com/uploadfile/allimg/centos/7fc8c84b5f1ed6a6e98356eaa4602e36.png)
在Jenkins服务器上认证
在这个目录下能找到自己拉取git的项目;证明项目成功完成
[root@jenkins ~
]
beifen.sh
END