6.代码自动上线—Jenkins集成java部署java程序

2022-03-17 分类:git-jenkins 阅读(295) 评论(0)

孙富阳, 江湖人称没人称。多年互联网运维工作经验,曾负责过孙布斯大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型博客网站运维工作。

1.java项目部署概述

1.java项目为什么需要maven编译?

由于java编写的代码是无法直接在服务器上运行,需要使用maven工具进行打包。简单理解:java源代码就像汽车的一堆散件,必须组装才是一辆完整的汽车。这里的组装汽车的过程就可以理解是maven编译打包的过程

2.实现自动化构建java项目前,先手动实现构建java项目

模拟开发提交java源码-->推送至gitlab-->运维使用maven手动编译-->最后推送war至web集群

2.java项目手动发布

1.环境准备

Jenkins10.0.0.120/172.16.1.120
Gitlab10.0.0.100/172.16.1.100
lb0110.0.0.5/172.16.1.5
web0110.0.0.7/172.16.1.7
web0210.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
执行mvn package之后可以看到构建的war包的位置
[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获取信息

接下来继续向下滑动
找到maven填写相关信息后保存

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.模拟开发提交代码,运维人员点击项目构建,构建项目然后模拟用户访问网站

评论已关闭

登录

忘记密码 ?

切换登录

注册

鲁ICP备2021019243号-1