文章目录
实战项目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服务器配置解析
12.2 Jenkins服务器Ansible配置
[root@jenkins-server1 ~]# yum -y install epel-release
[root@jenkins-server1 ~]# 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
[root@jenkins-server1 ~]# ansible java-server1 -m ping //测试连通性
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 }}
12.4 后端服务器jdk、tomcat配置
[root@java-server ~]# tar -xvzf jdk-8u211-linux-x64.tar.gz -C /usr/local/
[root@java-server ~]# 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
[root@java-server ~]# mkdir /root/upload/ #创建接受war包的目录。我这里脚本定义的是此目录
[root@java-server ~]# rm -rf /data/application/tomcat/webapps/*
12.5 后端服务器配置脚本
[root@java-server ~]# mkdir /opt/script
[root@java-server ~]# vim /opt/script/app-jenkins.sh #编写重启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/app-jenkins.sh
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 "nohup /opt/script/app-jenkins.sh $"'
}
}
来到Jenkins服务器上查看:
来到java后端服务器上查看: