6.代码自动上线—Jenkins集成java部署java程序
孙富阳, 江湖人称没人称。多年互联网运维工作经验,曾负责过孙布斯大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型博客网站运维工作。
1.java项目部署概述
1.java项目为什么需要maven编译?
由于java编写的代码是无法直接在服务器上运行,需要使用maven工具进行打包。简单理解:java源代码就像汽车的一堆散件,必须组装才是一辆完整的汽车。这里的组装汽车的过程就可以理解是maven编译打包的过程
2.实现自动化构建java项目前,先手动实现构建java项目
模拟开发提交java源码-->推送至gitlab-->运维使用maven手动编译-->最后推送war至web集群
2.java项目手动发布
1.环境准备
Jenkins | 10.0.0.120/172.16.1.120 |
Gitlab | 10.0.0.100/172.16.1.100 |
lb01 | 10.0.0.5/172.16.1.5 |
web01 | 10.0.0.7/172.16.1.7 |
web02 | 10.0.0.8/172.16.1.8 |
2.负载均衡环境准备
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_war.conf
upstream war {
server 172.16.1.7:8080;
server 172.16.1.8:8080;
}
server {
listen 80;
server_name html.war.com;
location / {
proxy_pass http://war;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
3.web环境准备
#web集群安装jdk环境
[root@web03 ~]# yum -y install java
[root@web04 ~]# mkdir /soft
[root@web04 ~]# tar xf apache-tomcat-9.0.50.tar.gz -C /soft/
[root@web04 ~]# ln -s /soft/apache-tomcat-9.0.50 /soft/tomcat
[root@web03 ~]# /soft/tomcat/bin/startup.sh
[root@web04 /soft/tomcat]# ss -lntup|grep java
tcp LISTEN 0 100 [::]:8080 [::]:* users:(("java",pid=1996,fd=56))
tcp LISTEN 0 1 [::ffff:127.0.0.1]:8005 [::]:* users:(("java",pid=1996,fd=65))
4.模拟开发前往gitlab创建项目
新建项目,然后模拟开发推送代码至gitlab仓库
5.运维人员前往服务器手动拉取代码,然后进行打包编译,并部署
拉取代码
[root@jenkins /tmp]# git clone git@gitlab.sfy.com:dev/html_war.git
[root@jenkins /tmp]# cd html_war/
编译代码,安装maven软件
[root@jenkins /tmp/html_war]# yum -y install maven
修改maven的编译源为阿里源
[root@jenkins /tmp/html_war]# grep -A4 -B1 -n "<id>nexus-aliyun</id>" /etc/maven/settings.xml
159- <mirror>
160: <id>nexus-aliyun</id>
161- <mirrorOf>central</mirrorOf>
162- <name>Nexus aliyun</name>
163- <url>http://maven.aliyun.com/nexus/content/groups/public</url>
164- </mirror>
[root@jenkins /tmp/html_war]# mvn package

[root@jenkins /tmp/html_war]# ll target/
total 4
drwxr-xr-x 4 root root 54 Aug 5 15:45 hello-world-war-1.0.0
-rw-r--r-- 1 root root 2421 Aug 5 15:45 hello-world-war-1.0.0.war
drwxr-xr-x 2 root root 28 Aug 5 15:45 maven-archiver
drwxr-xr-x 2 root root 6 Aug 5 15:45 surefire
##编写脚本将war包推送至web集群
[root@jenkins /tmp/html_war]# cat /script/html_war.sh
#!/bin/bash
#Host_ip 是web集群的ip;Src_dir 是jenkins上的war包所在目录;Dest_dir 是web集群的目录;Date 是时间;Web_src_dir 是web集群的源代码目录;War_name 是war包的名称###
Host_ip="172.16.1.9 172.16.1.10"
Src_dir="/tmp/html_war/target"
Dest_dir="/opt"
Date=`date +%F-%H-%M`
Web_src_dir="ROOT-${Date}"
War_name="hello-world-war-1.0.0.war"
Web_code_dir="/soft/tomcat/webapps/ROOT"
Tomcat_start="/soft/tomcat/bin/startup.sh"
Tomcat_stop="/soft/tomcat/bin/shutdown.sh"
Scp_code () {
for Host in ${Host_ip}
do
scp -rp ${Src_dir}/*.war $Host:${Dest_dir}
done
}
Code_unzip () {
for Host in ${Host_ip}
do
ssh ${Host} "unzip ${Dest_dir}/${War_name} -d ${Dest_dir}/${Web_src_dir} &&\
if [ -L ${Web_code_dir} ] ;then rm -f ${Web_code_dir} ; else rm -rf ${Web_code_dir} ;fi &&\
${Tomcat_stop} &&\
ln -s ${Dest_dir}/${Web_src_dir} ${Web_code_dir} &&\
sleep 2 &&\
${Tomcat_start}
"
done
}
Scp_code_Code_unzip () {
Scp_code
Code_unzip
}
Scp_code_Code_unzip
6.模仿用户使用web页面检查结果
3.Jenkins自动发布java项目
1.首先告诉jenkins maven在哪
点击系统管理--全局工具配置,下滑找到JDK填写JDK相关信息
可以通过mvn --version获取信息


2.配置jenkins创建java项目
点击新建任务-输入任务名称-选择构建maven项目-点击确定

配置项目信息

在执行构建操作之前判断一下之前是否部署过,如果部署过,不再继续向下执行

Shell脚本内容
[root@jenkins ~]# cat /script/html_war_deploy2.sh
#!/bin/bash
if [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ];then
echo ""
echo "你已经成功部署过 ${GIT_COMMIT} 他对应的Tags ${git_version}"
echo "请不要尝试无需重复部署." && exit 1
echo ""
fi

Shell脚本的内容
[root@jenkins ~]# cat /script/html_war_deploy.sh
#!/bin/bash
#Host_ip 是web集群的ip;Src_dir 是jenkins上的war包所在目录;Dest_dir 是web集群的目录;Date 是时间;Web_src_dir 是web集群的源代码目录;War_name 是war包的名称###
Host_ip="172.16.1.9 172.16.1.10"
Src_dir="${WORKSPACE}/target"
Dest_dir="/opt"
Date=`date +%F-%H-%M`
Web_src_dir="ROOT-${Date}"
War_name="hello-world-war-1.0.0.war"
Web_code_dir="/soft/tomcat/webapps/ROOT"
Tomcat_start="/soft/tomcat/bin/startup.sh"
Tomcat_stop="/soft/tomcat/bin/shutdown.sh"
Scp_code () {
for Host in ${Host_ip}
do
scp -rp ${Src_dir}/${War_name} $Host:${Dest_dir}
done
rm -f ${Src_dir}/${War_name}
}
Code_unzip () {
for Host in ${Host_ip}
do
ssh ${Host} "unzip ${Dest_dir}/${War_name} -d ${Dest_dir}/${Web_src_dir} &&\
rm -f ${Dest_dir}/${War_name} &&\
if [ -L ${Web_code_dir} ] ;then rm -f ${Web_code_dir} ; else rm -rf ${Web_code_dir} ;fi &&\
${Tomcat_stop} &&\
ln -s ${Dest_dir}/${Web_src_dir} ${Web_code_dir} &&\
sleep 2 &&\
${Tomcat_start}
"
done
}
Scp_code_Code_unzip () {
Scp_code
Code_unzip
}
Scp_code_Code_unzip
3.模拟开发提交代码,运维人员点击项目构建,构建项目然后模拟用户访问网站
4.Jenkins自动发布java项目——tag
同上要检查jenkins知不知道maven在哪,再配置java项目
1.Java项目配置


脚本内容
[root@jenkins ~]# cat /script/html_war_deploy2_tag.sh
#!/bin/bash
if [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ];then
echo ""
echo "你已经成功部署过 ${GIT_COMMIT} 他对应的Tags ${git_version}"
echo "请不要尝试无需重复部署." && exit 1
echo ""
fi
[root@jenkins ~]# cat /script/html_war_deploy_tag.sh
#!/bin/bash
#Host_ip 是web集群的ip;Src_dir 是jenkins上的war包所在目录;Dest_dir 是web集群的目录;Date 是时间;Web_src_dir 是web集群的源代码目录;War_name 是war包的名称###
Host_ip="172.16.1.9 172.16.1.10"
Src_dir="${WORKSPACE}/target"
Dest_dir="/opt"
Date=`date +%F-%H-%M`
Web_src_dir="ROOT-${Date}-${git_version}"
War_name="hello-world-war-1.0.0.war"
Web_code_dir="/soft/tomcat/webapps/ROOT"
Tomcat_start="/soft/tomcat/bin/startup.sh"
Tomcat_stop="/soft/tomcat/bin/shutdown.sh"
Scp_code () {
for Host in ${Host_ip}
do
scp -rp ${Src_dir}/${War_name} $Host:${Dest_dir}
done
rm -f ${Src_dir}/${War_name}
}
Code_unzip () {
for Host in ${Host_ip}
do
ssh ${Host} "unzip ${Dest_dir}/${War_name} -d ${Dest_dir}/${Web_src_dir} &&\
rm -f ${Dest_dir}/${War_name} &&\
if [ -L ${Web_code_dir} ] ;then rm -f ${Web_code_dir} ; else rm -rf ${Web_code_dir} ;fi &&\
${Tomcat_stop} &&\
ln -s ${Dest_dir}/${Web_src_dir} ${Web_code_dir} &&\
sleep 2 &&\
${Tomcat_start}
"
done
}
Scp_code_Code_unzip () {
Scp_code
Code_unzip
}
Scp_code_Code_unzip
Scp_code_Code_unzip
2.模拟开发提交代码,运维人员点击项目构建,构建项目然后模拟用户访问网站
未经允许不得转载:孙某某的运维之路 » 6.代码自动上线—Jenkins集成java部署java程序
评论已关闭