侧边栏壁纸
博主头像
Blog博主等级

行动起来,活在当下

  • 累计撰写 211 篇文章
  • 累计创建 94 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

传统运维技术篇08

使用jenkins自动化部署tomcat业务

一、部署前环境

运维机(81)上部署jenkins,使用jenkins创建任务自动拉取gitee上源代码,运行源代码中deploy.sh部署脚本进行本地tomcat业务部署。

所需软件:

jenkins-2.332.3-1.1.noarch.rpm ---Jenkins软件包

jenkins-2.332.3-plugins.tar.gz --- Jenkins插件包

git

二、部署过程

运维机(81)安装jenkins

软件包上传到运维机(81)上。安装、查看jar包路径、java运行。

[root@jx-ops-81 opt]# yum install -y jenkins-2.332.3-1.1.noarch.rpm
[root@jx-ops-81 opt]# rpm -ql jenkins
/etc/init.d/jenkins
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins
/usr/bin/jenkins
/usr/lib/systemd/system/jenkins.service
/usr/sbin/rcjenkins
/usr/share/java/jenkins.war
/usr/share/jenkins
/usr/share/jenkins/migrate
/var/cache/jenkins
/var/lib/jenkins
/var/log/jenkins
[root@jx-ops-81 opt]# nohup java -jar /usr/share/java/jenkins.war & 

默认的用户是admin,密码在`/root/.jenkins/secrets/initialAdminPassword`。

把插件包解压到`/root/.jenkins/plugins`内。重启Jenkins。

tar -zxvf jenkins-2.332.3-plugins.tar.gz -C /root/.jenkins/plugins

至此jenkins部署完毕。

我们需要做一条映射,在网关服务器(254)上添加一条指向运维服务器(81)的8080端口。并且虚拟机也要做一条映射。

# 254 网关映射
iptables -t nat -A PREROUTING -d 10.0.3.15/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 10.10.10.81:8080
# 虚拟机映射
127.0.0.1 8080 -> 8080

我们可以通过访问http://127.0.0.1/a.html网址访问业务。

1.Jenkins任务创建过程

新建任务-》创建一个自由风格的软件项目名称叫做jx1206-》源码管理选择git(这里需要gitee项目网址我们一会在说怎样获取)-》构建选择执行shell->(bash -x deploy.sh)保存。

jenkins01-min.webp

gitee项目网址获取:

在运维机(81)上输入git remote -v 。

[root@jx-ops-81 jx1206]# git remote -v 
origin	https://gitee.com/smithlee/jx1206.git (fetch)
origin	https://gitee.com/smithlee/jx1206.git (push)

jenkins03-min.webp

我们点击工程jx1206,左侧点击立即构建,任务开始执行,执行过程可以点击控制台输出查看详情。

jenkins02-min.webp

我们来看控制台的输出

Started by user admin
Running as SYSTEM
Building in workspace /root/.jenkins/workspace/jx1206
The recommended git tool is: NONE
No credentials specified
 > git rev-parse --resolve-git-dir /root/.jenkins/workspace/jx1206/.git # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url https://gitee.com/smithlee/jx1206.git # timeout=10
Fetching upstream changes from https://gitee.com/smithlee/jx1206.git
 > git --version # timeout=10
 > git --version # 'git version 2.27.0'
 > git fetch --tags --force --progress -- https://gitee.com/smithlee/jx1206.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
Checking out Revision dd3afa1cdcc23ff7f32839786c8b9e0b4368b567 (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f dd3afa1cdcc23ff7f32839786c8b9e0b4368b567 # timeout=10
Commit message: "添加脚本运行环境变量"
 > git rev-list --no-walk 4518fa79d1d6c6873c6d41bbeb3bb3e55c32a946 # timeout=10
[jx1206] $ /bin/sh -xe /tmp/jenkins5849578395838537736.sh
+ bash -x deploy.sh
+ export BUILD_ID=dontkillme
+ BUILD_ID=dontkillme
+ mvn package
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------------< com.jx:virstu >----------------------------
[INFO] Building virstu 0.0.1-SNAPSHOT
[INFO] --------------------------------[ war ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ virstu ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ virstu ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ virstu ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /root/.jenkins/workspace/jx1206/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ virstu ---
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ virstu ---
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-war-plugin:3.2.3:war (default-war) @ virstu ---
[INFO] Packaging webapp
[INFO] Assembling webapp [virstu] in [/root/.jenkins/workspace/jx1206/target/virstu]
[INFO] Processing war project
[INFO] Copying webapp resources [/root/.jenkins/workspace/jx1206/src/main/webapp]
[INFO] Webapp assembled in [39 msecs]
[INFO] Building war: /root/.jenkins/workspace/jx1206/target/virstu.war
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.3.2.RELEASE:repackage (repackage) @ virstu ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.239 s
[INFO] Finished at: 2024-12-21T14:58:20+08:00
[INFO] ------------------------------------------------------------------------
+ ps -ef
+ grep tomcat
+ grep -v grep
+ awk '{print $2}'
+ xargs kill
kill: not enough arguments
+ rm /opt/tomcat8/webapps/ROOT /opt/tomcat8/webapps/ROOT.war -rf
+ cp /root/.jenkins/workspace/jx1206/target/virstu.war /opt/tomcat8/webapps/ROOT.war
+ true
++ netstat -anp
++ grep 80 -w
+ have=
+ '[' -n '' ']'
+ break
+ /opt/tomcat8/bin/startup.sh
Tomcat started.
+ true
+ curl 127.0.0.1/a.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (7) Failed to connect to 127.0.0.1 port 80: Connection refused
+ '[' 7 -eq 0 ']'
+ sleep 3
+ true
+ curl 127.0.0.1/a.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100    18  100    18    0     0    243      0 --:--:-- --:--:-- --:--:--   243
<p>ffffffffff</p>
+ '[' 0 -eq 0 ']'
+ break
+ echo 'deploy done...'
deploy done...
[jx1206] $ /bin/sh -xe /tmp/jenkins4548583400132320619.sh
Finished: SUCCESS

它先从gitee拉取最新代码到工作区`/root/.jenkins/workspace/jx1206/`,后面的所有操作都在工作区进行。

他的工作路径可以使用`echo $WORKSPACE`获取。

执行完任务后我们测试业务发现无法访问,查看tomcat进程发现没有进程。通过网上查资料发现jenkins中启动tomcat程序后退出后会杀掉该进程。

需要保留进程,我们需要在部署脚本(`deploy.sh`)中代码最开始添加环境变量参数。

#添加环境变量不要杀掉脚本
export BUILD_ID=dontkillme

再次执行jenkins后,业务访问成功了。

2.部署脚本

deploy.sh

#!/bin/bash
#拉取最新代码
#git pull --all
#添加环境变量不要杀掉脚本
export BUILD_ID=dontkillme
#自定义获取包版本号
sed -i "s/__ver/ver:$BUILD_NUMBER/g" src/main/webapp/WEB-INF/cgi/head.sh
# 打包
mvn package
# 结束tomcat进程
#killall java 
ps -ef | grep tomcat |grep -v grep | awk '{print $2}' | xargs kill
# 删除旧war包
rm  /opt/tomcat8/webapps/* -rf 
# 更新war包

cp $WORKSPACE/target/virstu.war /opt/tomcat8/webapps/ROOT.war
#循环等待80端口释放
while true; do 
 have=$(netstat -anp | grep 80 -w)
 if [ -n "$have" ]; then
  sleep 2
 else
  break
 fi
done
# 启动tomcat程序
/opt/tomcat8/bin/startup.sh 
# 测试127.0.0.1
while true; do
 curl 127.0.0.1/a.html
 if [ $? -eq 0 ]; then
  break
 fi
 sleep 3
done

echo "deploy done..."

注意脚本这里:

我们使用jenkins工作空间路径或者用相对路径,不可以用绝对路径。因为它是先把代码拷贝一份到工作路径,后续所有动作都是基于工作路径的。

cp $WORKSPACE/target/virstu.war /opt/tomcat8/webapps/ROOT.war

0

评论区