12.实战项目Pipeline+Maven+Ansible+Tomcat
| Jenkins服务器 | 192.168.153.190 | 
| java服务器 | 192.168.153.195 | 
[root@jenkins-server1 ~]#  ssh-copy-id -i 192.168.153.195  //发送公钥12.1 Jenkins服务器配置解析
 实战测试 jenkins-Pipeline+Maven+Ansible+Tomcat_tomcat](https://s2.51cto.com/images/blog/202204/17230911_625c2d97abbe826889.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
12.2 Jenkins服务器Ansible配置
[root@jenkins-server1 <sub>]# yum -y install epel-release
[root@jenkins-server1 </sub>]# yum -y install ansible
[root@jenkins-server1 ~]# cat /etc/ansible/hosts #在最后面添加下面内容
[java-server]
java-server1
[java-server:vars] #设置变量,vars--照写
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_private_key_file=/root/.ssh/id_rsa
#ansible_ssh_pass=test
 实战测试 jenkins-Pipeline+Maven+Ansible+Tomcat_pipline_02](https://s2.51cto.com/images/blog/202204/17230911_625c2d97cc4eb65667.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
[root@jenkins-server1 ~]# ansible java-server1 -m ping //测试连通性 实战测试 jenkins-Pipeline+Maven+Ansible+Tomcat_git_03](https://s2.51cto.com/images/blog/202204/17230911_625c2d97d2d9f31827.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
12.3 Jenkins剧本
[root@jenkins-server1 ~]# vim /etc/ansible/jenknis_scp.yaml
---
- hosts: java-server1
user: root
vars:
- source_war: "/root/.jenkins/workspace/test-p3/target/easy-springmvc-maven.war"
- dest_war: "/root/upload"
tasks:
- name: scp war
copy: src={{ source_war }} dest={{ dest_war }}
 实战测试 jenkins-Pipeline+Maven+Ansible+Tomcat_git_04](https://s2.51cto.com/images/blog/202204/17230911_625c2d97d0d7593528.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
12.4 后端服务器jdk、tomcat配置
 实战测试 jenkins-Pipeline+Maven+Ansible+Tomcat_git_05](https://s2.51cto.com/images/blog/202204/17230911_625c2d97af15829066.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
[root@java-server <sub>]# tar -xvzf jdk-8u211-linux-x64.tar.gz -C /usr/local/
[root@java-server </sub>]# tar -xvzf apache-tomcat-8.5.45.tar.gz -C /data/application/
[root@java-server ~]# cd /usr/local/
[root@java-server local]# mv jdk1.8.0_211/ java
[root@java-server local]# cd /data/application/
[root@java-server application]# mv apache-tomcat-8.5.45/ tomcat
配置环境变量
[root@java-server ~]# vim /etc/profile //在最后面添加即可
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
测试jdk是否可用
 实战测试 jenkins-Pipeline+Maven+Ansible+Tomcat_jenkins_06](https://s2.51cto.com/images/blog/202204/17230911_625c2d97bcb5250204.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
[root@java-server <sub>]# mkdir /root/upload/ #创建接受war包的目录。我这里脚本定义的是此目录
[root@java-server </sub>]# rm -rf /data/application/tomcat/webapps/*
12.5 后端服务器配置脚本
[root@java-server <sub>]# mkdir /opt/script
[root@java-server </sub>]# vim /opt/script/ #编写重启tomcat的脚本
说明:此脚本定义了接受war的目录,tomcat的发布目录,主要的思路就是将发布过来的war包,移动到tomcat的发布目录下。
并检测tomcat是否已经运行,已运行的话,杀死启动,未运行,直接运行;
#!/usr/bin/bash
#本脚本适用于jenkins持续集成,实现备份war包到代码更新上线!使用时请注意全局变量。
#====================================================
#Defining variables
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"
#Preparation environment
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
nohup $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
[root@java-server ~]# chmod +x /opt/script/
12.6 Jenkins pipeline代码
node {
def gitUrl = "git@gitee.com:youngfit/easy-springmvc-maven.git"
def git_Branch = 'master'
value = "=========================================================="
stage ('拉取代码') {
print "${value}"
git branch: "${git_Branch}", url: "${gitUrl}", credentialsId: "1"
}
stage ('编译打包') {
print "${value}"
sh 'mvn clean package'
}
stage ('scp发布到tomcat后端服务') {
print '${values}'
sh 'ansible-playbook /etc/ansible/jenknis_scp.yaml'
// sh 'sleep 40'
sh 'ansible java-server1 -m shell -a "/opt/script/"'
}
}
 实战测试 jenkins-Pipeline+Maven+Ansible+Tomcat_tomcat_07](https://s2.51cto.com/images/blog/202204/17230912_625c2d983a44647095.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
<img src="https://gitee.com/youngfit/typora/raw/master/images/image-20211019172652401.png" style="zoom: 67%;" />
来到Jenkins服务器上查看:
 实战测试 jenkins-Pipeline+Maven+Ansible+Tomcat_pipline_08](https://s2.51cto.com/images/blog/202204/17230912_625c2d982f34c59614.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
来到java后端服务器上查看:
 实战测试 jenkins-Pipeline+Maven+Ansible+Tomcat_jenkins_09](https://s2.51cto.com/images/blog/202204/17230912_625c2d9840a117690.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
 实战测试 jenkins-Pipeline+Maven+Ansible+Tomcat_git_10](https://s2.51cto.com/images/blog/202204/17230912_625c2d9850bc584657.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
12.7 结合git tag使用
<img src="https://gitee.com/youngfit/typora/raw/master/images/image-20211019175432663.png" alt="image-20211019175432663" style="zoom:50%;" />
<img src="https://gitee.com/youngfit/typora/raw/master/images/image-20211019175451452.png" alt="image-20211019175451452" style="zoom:50%;" />
更新代码
[root@git-client easy-springmvc-maven]# touch a.txt
[root@git-client easy-springmvc-maven]# git add *
[root@git-client easy-springmvc-maven]# git commit -m "add a.txt"
[master 80210ab] add a.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a.txt
[root@git-client easy-springmvc-maven]# git tag -a v1.1 -m "v1.1"
[root@git-client easy-springmvc-maven]# git push origin v1.1
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 439 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.1]
To git@gitee.com:youngfit/easy-springmvc-maven.git
* [new tag] v1.1 -> v1.1
 实战测试 jenkins-Pipeline+Maven+Ansible+Tomcat_git_11](https://s2.51cto.com/images/blog/202204/17230912_625c2d9859bb866183.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
再次拉取,就会有tag
<img src="https://gitee.com/youngfit/typora/raw/master/images/image-20211019175813977.png" alt="image-20211019175813977" style="zoom:50%;" />
node {
gitee_url = "git@gitee.com:youngfit/easy-springmvc-maven.git"
value = "=========================================================="
stage('拉取代码'){
print "${value}"
git branch: "master", url: "${gitee_url}", credentialsId: "250"
print "${tag}"
sh "git checkout ${tag}"
}
stage('编译打包'){
print "${value}"
sh "mvn clean package"
}
stage('发布启动tomcat'){
sh "ansible-playbook /etc/ansible/jenknis_scp.yaml"
sh 'ansible java-server1 -m shell -a "nohup /opt/script/ &"'
}
}
 
 
                     
            
        













 
                    

 
                 
                    