Jenkins实现cms项目自动部署
1.环境准备
ip | 服务 |
---|---|
192.168.81.210 | gitlab |
192.168.81.220 | Jenkins |
192.168.81.230 | nginx-lb |
192.168.81.230 | mysql |
192.168.81.240 | tomcat+nginx |
192.168.81.250 | tomcat+nginx |
2.实现cms项目手动上线
2.1.准备项目代码
1.下载项目代码并解压
https://gitee.com/lxhu_work/wangmarket
[root@gitlab ~]# git clone https://gitee.com/lxhu_work/wangmarket.git
[root@gitlab ~]# mkdir cms
[root@gitlab ~]# unzip wangmarket.zip -d cms
2.2.项目推送至gitlab
2.2.1.新建一个cms项目
2.2.2.推送代码到gitlab
[root@gitlab cms]# git init
[root@gitlab cms]# git remote add origin git@gitlab.jiangxl.com:root/cms.git
[root@gitlab cms]# git add .
[root@gitlab cms]# git commit -m "首次提交"
[root@gitlab cms]# git push orgin master
2.3.手动拉取cms项目代码
Jenkins服务器操作
[root@jenkins data_gitlab]# git clone git@gitlab.jiangxl.com:root/cms.git
2.4.导入数据库的sql语句
1.安装mysql5.7,mysql服务器操作
[root@nginxlb mysql]# rpm -ivh http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm
[root@nginxlb mysql]# yum install mysql-community-server -y
2)创建数据库 mysql服务器操作
[root@nginxlb mysql]# mysql -uroot -p1234.com
mysql> create database wangmarket;
Query OK, 1 row affected (0.13 sec)
mysql> show database;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| wangmarket |
+--------------------+
4 rows in set (0.07 sec)
3)授权root远程登录
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
4)导入sql
[root@jenkins else]# vim wangmarket.sql
use wangmarket; #增加这一行
[root@jenkins else]# cat wangmarket.sql | mysql -h192.168.81.230 -uroot -p1234.com
2.5.修改数据库的连接信息
修改数据库信息 Jenkins服务器操作
[root@jenkins cms]# vim src/main/resources/application.properties
database.name=wangmarket
database.ip=192.168.81.230
spring.datasource.username=root
spring.datasource.password=1234.com
[root@jenkins cms]# cp src/main/resources/application.properties /opt/
cp这个文件是为了自动化上线的时候使用的
2.6.使用maven进行编译
使用clean跳过test步骤
[root@jenkins cms]# mvn clean package -Dmaven.test.skip\=true
······
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4:47.653s
[INFO] Finished at: Sun Sep 06 16:29:56 CST 2020
[INFO] Final Memory: 35M/214M
[INFO] ------------------------------------------------------------------------
[root@jenkins cms]# ls target/*.war
target/wangmarket.war
2.7.将war包拷贝至web集群并启动tomcat
1.推送war包
[root@jenkins cms]# for i in 240 250
> do
> scp target/*.war root@192.168.81.${i}:/application/tomcat/webapps/ROOT.war
> done
2.重启tomcat
[root@jenkins cms]# for i in 240 250
> do
> ssh root@192.168.81.${i} "pkill java && sh /application/tomcat/bin/startup.sh"
> done
Tomcat started.
Tomcat started.
2.8.配置nginx ip_hash
[root@nginxlb mysql]# vim /etc/nginx/conf.d/proxy_java.conf
upstream hello {
ip_hash;
server 192.168.81.240:80;
server 192.168.81.250:80;
}
server {
listen 80;
server_name tomcat.jiangxl.com;
location / {
proxy_pass http://hello;
proxy_set_header HOST $http_host;
}
}
2.9.安装cms
点击安装
免费版
设置参数
管理后台
2.10登录网址后台
http://tomcat.jiangxl.com/login.do
账号密码:wangzhan
登录系统
项目部署成功
3.实现cms项目自动上线
整体步骤
1.Jenkinsid拉取代码
2.Jenkins配置构建前操作—将数据库配置文件拷贝至源码中
3.Jenkins调用maven进行编译
4.Jenkins调用shell,将war包推送至web集群,重启tomcat
5.用户测试访问
3.1.新建一个maven cms项目
3.2.配置Jenkins拉取标签参数
3.3.配置Jenkins拉取gitlab代码
指定分支填写刚刚的git parameters的变量名
3.4.构建前配置数据信息
将手动上线那会cp到/opt目录的配置文件在使用cp的方式移动到源码包中
如果刚刚没有做现在也可以做
[root@jenkins ~]# cp /data_gitlab/cms/src/main/resources/application.properties /script/
首先在gitlab中将配置文件删除,因为每次构建的环境不同,有的是正式环境,有的是测试环境,数据库信息是不一样的,因此在构建前我们就将适合本次环境的配置文件拷贝过来。
将gitlab上的数据库配置文件删除
[root@gitlab cms]# rm -rf src/main/resources/application.properties
[root@gitlab cms]# git rm src/main/resources/application.properties
[root@gitlab cms]# git add .
[root@gitlab cms]# git commit -m "rm app.pro"
[root@gitlab cms]# git push origin master
在构建前配置中将数据库信息文件拷贝至源码中
cd ${WORKSPACE}
/usr/bin/cp /script/application.properties src/main/resources/
3.5.设置构建参数
3.6.设置构建脚本
脚本使用之前构建helloword项目的脚本即可
[root@jenkins ~]# vim /script/java_deploy_rollback_tag.sh
#!/bin/bash
Date=`date +%F-%H-%M`
monitor_dir=/var/lib/jenkins/workspace/freestyle-monitor
web_server="192.168.81.240 192.168.81.250"
NAME=${Date}-${git_version}
war_dir=/opt/ROOT-${NAME}
war_pack=/opt/ROOT-${NAME}.war
war_root=/application/tomcat/webapps
jenkins_work () {
cd ${WORKSPACE}
}
scp_war(){
for host in $web_server
do
scp -r target/*.war root@${host}:${war_pack}
ssh root@$host "mkdir -p $war_dir && \
unzip ${war_pack} -d ${war_dir} && \
rm -rf ${war_pack} && \
rm -rf ${war_root}/ROOT* && \
ln -s $war_dir $war_root/ROOT && \
pkill java && \
sh /application/tomcat/bin/startup.sh"
done
}
rollback () {
for host in ${web_server}
do
back_file=$(ssh root@${host} "find /opt -maxdepth 1 -type d -name "ROOT-*${git_version}*"")
ssh root@${host} "rm -rf ${war_root}/* && \
ln -s $back_file $war_root/ROOT && \
pkill java && \
sh /application/tomcat/bin/startup.sh"
done
}
deploy(){
jenkins_work
scp_war
}
if [ $deploy_env == "deploy" ];then
if [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ];then
echo "该 ${git_version} 已经构建过了,无需再进行构建!!!"
else
deploy
fi
elif [ $deploy_env == "rollback" ];then
rollback
fi
3.7.构造标签
构建v1.1标签
1.修改项目代码
[root@gitlab cms]# vim src/main/webapp/WEB-INF/view/iw_update/login/login.jsp
<%=Global.get("SITE_NAME") %> jiangxl 平台登陆 v1.1
2.推送代码到gitlab
[root@gitlab cms]# git add .
[root@gitlab cms]# git commit -m "v1.1"
[root@gitlab cms]# git push origin master
3.推送标签
[root@gitlab cms]# git tag -a v1.1 -m "v1.1"
[root@gitlab cms]# git push origin v1.1
构建v1.2标签
1.修改项目代码
[root@gitlab cms]# vim src/main/webapp/WEB-INF/view/iw_update/login/login.jsp
<%=Global.get("SITE_NAME") %> jiangxl 平台登陆 v1.2
2.推送代码到gitlab
[root@gitlab cms]# git add .
[root@gitlab cms]# git commit -m "v1.2"
[root@gitlab cms]# git push origin master
3.推送标签
[root@gitlab cms]# git tag -a v1.2 -m "v1.2"
[root@gitlab cms]# git push origin v1.2
3.8.配置tomcat支持项目软链接
[root@web01 ~]# vim /application/tomcat/conf/context.xml
<Context>
<Resources allowLinking="true" />
</Context>
重启tomcat
[root@web02 ~]# pkill java
[root@web02 ~]# sh /application/tomcat/bin/startup.sh
3.9.自动构建v1.1版本
自动构建
控制台输出
3.10.访问cms项目并进行安装
安装完进行访问
http://127.0.0.1:8080/login.do
账号密码都是wangzhan
出现了我们做的v1.1版本
3.11.构建v.1.2版本
构建v1.2版本
控制台输出
安装完进行访问
http://127.0.0.1:8080/login.do
账号密码都是wangzhan
完成安装后就看到了我们部署的1.2版本
3.12.回退至v1.1版本
点击构建
控制台输出
构建成功
回退成功