jenkins+linux+gitee+maven自动化集成部署项目
<p><span style="font-size: 18px"><strong>jenkins+linux+gitee+maven自动化集成部署项目</strong></span></p><p><strong><span style="font-size: 18px">一、jenkins</span>概述</strong></p>
<p>1.1 Jenkins介绍与优势</p>
<p>Jenkins是一个基于Java开发的开源的、易操作的CI/CD工具软件,其主要用于持续、自动的构建/测试/部署软件项目、监控外部任务的运行。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行(Jenkins通常作为一个独立的应用程序在其自己的流程中运行,内置Java servlet容器/应用程序服务器)。</p>
<p>Jenkins作为一个第三方独立的CI/CD系统,具有开源、简单、可视化web管理、跨平台部署(Windows/Linux/Docker)、功能/插件丰富等优势(注意Jenkins本身是不具备任何功能的,只提供CI/CD管理环境,Jenkins中所有的功能全部来自于插件)。另一个比较流行的CI/CD工具是GitLab Runner(可与Gitlab完美集成,此处不用耦合性高)。</p>
<p>1.2 CI/CD整合实现思路</p>
<p>(1)开发者将新版本代码 push 到 GitLab 远程仓库上;<br>(2)随后 GitLab 会通知 Jenkins 来进行拉取最新代码到本地(通过 Web Hook 或定时检测);<br>(3)最后 Jenkins 会根据事先配置好的任务脚本执行进行Build和部署;<br>(4)返回结果信息给GitLab/其他Web服务器;<br>(5)GitLab/其他服务器发送邮件通知给开发者/测试人员,提示结果信息;</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725222224070-1512788815.png"></p>
<p><span style="font-size: 18px"><strong>二、环境</strong></span></p>
<p>服务器:linux系统</p>
<p>java环境:jdk11</p>
<p>代码管理:gitee</p>
<p>项目jar包管理:apache-maven-3.8.8</p>
<p>自动化部署工具:jenkins-2.415-1.1.noarch.rpm</p>
<p>打包方式:jar包</p>
<p><strong><span style="font-size: 18px">三、Linux部署安装jenkins</span></strong></p>
<p>1、安装</p>
<p>官网下载jenkins,我们选择rpm包进行安装:</p>
<p>地址:https://mirrors.jenkins-ci.org/redhat/</p>
<p>https://get.jenkins.io/redhat-stable/ 以及 https://pkg.jenkins.io/redhat-stable/<br>下载好的rpm包上传到服务器,执行命令安装:</p>
<div class="cnblogs_code">
<pre>rpm -ivh jenkins-2.415-1.1.noarch.rpm</pre>
</div>
<p>2、配置</p>
<p>修改jenkins配置文件:</p>
<div class="cnblogs_code">
<pre>vim /etc/sysconfig/jenkins</pre>
</div>
<p>主要是修改两个地方:<br>第一个是账户:因为Jenkins默认的账户是jenkins的账户,这个账户我们没有,而且为了不因为权限出现各种问题,这里直接使用root,当然你也可以创建一个名叫jenkins的账户<br>第二个是端口:Jenkins的默认端口是8080,为了避免端口冲突,我们将它改掉</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">JENKINS_HOME="/var/lib/jenkins" ##jenkins工作目录
JENKINS_USER="root" ##启动jenkins的用户
JENKINS_PORT="8082" ##jenkins服务监听端口<br></span></pre>
</div>
<p>注意:修改/etc/init.d/jenkins脚本,修改do_start函数的check_tcp_port命令,将端口8080改为8182,最新版本中端口号已经从配置文件中动态获取,无需修改。</p>
<p>如果第一次成功启动后,后续需要修改端口号,请修改这里</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">vim /usr/lib/systemd/system/jenkins.service
修改
Environment="JENKINS_PORT=8082"
# 重新加载配置文件
systemctl daemon-reload</span></pre>
</div>
<p>配置jenkins 启动信息:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">vim /etc/init.d/jenkins #编辑jenkins启动配置
#修改candidates部分增加java可选路径:/usr/java/jdk1.8.0_333/bin/java
candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-11.0/bin/java
/usr/lib/jvm/jre-11.0/bin/java
/usr/lib/jvm/java-11-openjdk-amd64
/usr/bin/java
#以上是原来的,下面是新增本地的
/usr/local/java/jdk1.8.0_333/bin/java</span></pre>
</div>
<p>修改权限</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># chmod -R 777 /var/lib/jenkins
# chmod -R 777 /var/cache/jenkins
# chmod -R 777 /var/log/jenkins</span></pre>
</div>
<p>修改完之后重新加载一下配置文件,使其生效:</p>
<div class="cnblogs_code">
<pre>systemctl daemon-reload</pre>
</div>
<p>3、启动</p>
<p>jenkins启动,并且加入开机启动</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># firewall-cmd --zone=public --add-port=8182/tcp --permanent
success
# systemctl reload firewalld
# systemctl daemon-reload
# systemctl enable jenkins
# systemctl start jenkins</span></pre>
</div>
<pre>安装踩坑:</pre>
<div class="cnblogs_Highlighter">
<pre class="brush:java;gutter:true;">#(1)方法一: 直接使用脚本启动jenkins(可行,猜测jenkins没法识别/激活自定义的java环境)
#进入 /etc/init.d
./jenkins start 开启jenkins
./jenkins status 查看状态
./jenkins stop 停止jenkins
#(2)方法二: https://blog.csdn.net/zwjzone/article/details/125170820
#(3)方法三: 离线安装(先下载在上传也可)--没试
wget https://pkg.jenkins.io/redhat/jenkins-2.156-1.1.noarch.rpm
rpm -ivh jenkins-2.156-1.1.noarch.rpm
#修改配置
vim /etc/sysconfig/jenkins
#(4)方法4: 官网推荐步骤安装,使用open-jdk(https://www.jenkins.io/doc/book/installing/linux/#red-hat-centos)(可行)
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
#只升级所有本地yum包,不升级软件和系统内核,软件和内核保持原样。
sudo yum upgrade
# Add required dependencies for the jenkins package
sudo yum install java-11-openjdk
sudo yum install jenkins
sudo systemctl daemon-reload
#(5)方法5: 添加软连接配置。(可行,初次启动较慢,多试几次)
ln -s /usr/local/java/jdk1.8.0_333/bin/java /usr/bin/java</pre>
</div>
<p>4、jenkins使用</p>
<p>在浏览器输入:ip:8082,直接访问jenkens</p>
<p>密码存储位置:/var/lib/jenkins/secrets/initialAdminPassword</p>
<p>系统自动创建的用户 jenkins 1qaaxsw6</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725230404015-1425744124.png"></p>
<p>5、安装Jenkin相关插件</p>
<ul>
<li>三个插件</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">Gitee
Maven Integration
Pipeline Maven Integration</span></pre>
</div>
<ul>
<li>安装Jenkin相关插件</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># 安装Jenkin相关插件
# 作用:在Jenkins中辅助相关功能的实现,插件的实现一般还需要调用并配合本地程序,并在全局配置中声明本地程序信息,让插件知道本地程序在哪。
Credentials # 签名证书管理插件
Gitlab # 安装后从 GitLab 获取代码
Git 和 Git Client # 用于 Jenkins 在 GitLab 中拉取源码
Generic Webhook Trigger #GitLab 触发 Jenkins 构建项目, Gitlab Hook这个插件被代替了
Gitlab Authentication # GitLab 和 Jenkins 认证插件
SSH Plugin # 进程执行 Shell 脚本
Publish Over SSH # 用于通过 SSH 部署应用</span></pre>
</div>
<p>6、卸载</p>
<p>6.1、rpm卸载</p>
<div class="cnblogs_Highlighter">
<pre class="brush:java;gutter:true;">rpm -e jenkins</pre>
</div>
<p>6.2、检查是否卸载成功</p>
<div class="cnblogs_Highlighter">
<pre class="brush:java;gutter:false;">rpm -ql jenkins</pre>
</div>
<p>6.3、彻底删除残留文件:</p>
<div class="cnblogs_code">
<pre>find / -iname jenkins | xargs -n 1000 rm -rf</pre>
</div>
<p>原文链接:https://blog.csdn.net/weixin_43804995/article/details/126801501</p>
<p><span style="font-size: 18px"><strong>四、Jenkins环境设置</strong></span></p>
<p>4.1、jenkins全局环境设置</p>
<p>•设置位置: 设置 - Global Tool Configuration - 配置:其实际的操作过程相当于配置全局的环境变量,以便Jenkins能够通过对应插件调用该工具,然后进行本地操作。<br>•插件作用: 在Jenkins中辅助相关功能的实现,插件的实现还需要调用并配合本地程序,因此本地也需要安装相关程序,并在Jenkins中配置信息(也可以在Jenkins中配置自动安装)。比如Git插件:git插件为Jenkins项目提供基本的git交互操作。它可以轮询、获取、签出、分支、列表、合并、标记和推送存储库。<br>4.2、Java全局环境设置</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725231130235-879767032.png"></p>
<p> 4.3、Git全局环境设置</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725231215310-1531345502.png"></p>
<p>注意: 这里的git位置必须是可执行文件的地址,即是git/bin/下的可执行文件 git的目录地址!不配置git本地程序的话,无法创建执行任务,拉取程序到本地管理。 </p>
<p>4.4、maven全局环境设置</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725231520923-882246520.png"></p>
<p><span style="font-size: 18px"><strong>五、jenkins创建<strong>新任务</strong></strong></span></p>
<p>5.1、新建item:即新建一个任务,进入后会出现下面的界面</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725231744846-1906611549.png"></p>
<p> 在这个地方,我们会发现没有maven的项目,所以我们需要去安装一个插件</p>
<p>进入Plugin Manager,在这里面去安装我们所需要的一些插件</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725231855751-592610341.png"></p>
<p> 回到之前新建item那个页面,便可以去创建一个maven的item了</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725231934166-1877509383.png"></p>
<p> 5.2、创建maven任务</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725232017151-1027827889.png"></p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725232147710-1436952959.png"></p>
<p>General:项目概述,在这个里面去进行一些项目说明</p>
<p>源码管理:我们需要使用git去拉源代码,所以需要配置git的一些选项</p>
<p>在Jenkins的服务器(Linux)上,也需要去安装git,在服务器上直接yum便可以完成安装</p>
<div class="cnblogs_code">
<pre>yum install -y git</pre>
</div>
<p>Credentials:这个选项里面是添加凭证,有一些项目不是公开的,所以需要去添加一些凭证,我在这里选择的是公共的项目,公开的,所以便不需要去添加</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725232356830-653809336.png"></p>
<p> 构建触发器:默认勾选上的是下面的选项:Jenkins将会去寻找之前已经构建过的pom依赖(如果有之前构建过的相同的pom文件),直接使用之前的镜像,便不会再去重新的解析了,暂时便先保持默认的,不去进行修改</p>
<p>构建环境:在这里面,勾选上对应的内容,将去做一些额外的处理,在这里也是想保持默认的,什么都不去勾选</p>
<p>Pre Steps:这个配置说明的是在构建之前可以做的那些操作,在这个选项里面可以去添加一系列的脚本,在这里,我们也是先保持默认的选项</p>
<p>Build:</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725232635247-1296109376.png"></p>
<p> Root POM:这个pom,是相对于git的整体的目录的,<br>如下,如果我们的项目的pom文件地址在下面这个目录</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725232747048-968799340.png"></p>
<p> 则,我们需要将Root POM 修改为</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725232809504-1088696280.png"></p>
<p> Goals and options:这个选项我们也暂时先不去管,保持默认的空即可</p>
<p>Post Steps:这个配置,说明的是:在项目构建完成之后,接下来需要做的内容</p>
<p>在这里,我们需要将构建完的项目,打成的包传到我们的测试服务器上,也是在这里去进行配置的</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725232904889-2112823900.png"></p>
<p> 其他:剩下的两个配置,便先暂时不去配置,直接保存</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725232933849-749006818.png"></p>
<h4><span style="font-size: 18px"><strong>六、构建自动化脚本</strong></span></h4>
<p> 将启动的shell脚本和停止的shell脚本,写到服务器的文件夹中(和发布的项目在一起)</p>
<div class="cnblogs_code">
<pre>#!/bin/<span style="color: rgba(0, 0, 0, 1)">sh
export GATEWAY</span>=les-<span style="color: rgba(0, 0, 0, 1)">gateway.jar
export AUTH</span>=les-<span style="color: rgba(0, 0, 0, 1)">auth.jar
export WMS</span>=modules-wms-<span style="color: rgba(0, 0, 0, 1)">system.jar
export MASTERDATA</span>=les-modules-<span style="color: rgba(0, 0, 0, 1)">masterData.jar
export LES</span>=modules-les-<span style="color: rgba(0, 0, 0, 1)">system.jar
export JOB</span>=les-modules-<span style="color: rgba(0, 0, 0, 1)">job.jar
export FILE</span>=les-modules-<span style="color: rgba(0, 0, 0, 1)">file.jar
export GATEWAY_port</span>=8080<span style="color: rgba(0, 0, 0, 1)">
export AUTH_port</span>=9205<span style="color: rgba(0, 0, 0, 1)">
export WMS_port</span>=9201<span style="color: rgba(0, 0, 0, 1)">
export MASTERDATA_port</span>=8085<span style="color: rgba(0, 0, 0, 1)">
export LES_port</span>=9203<span style="color: rgba(0, 0, 0, 1)">
export JOB_port</span>=9211<span style="color: rgba(0, 0, 0, 1)">
export FILE_port</span>=9300
<span style="color: rgba(0, 0, 255, 1)">case</span> "$1"<span style="color: rgba(0, 0, 0, 1)"> in
start)
## 启动gateway
echo </span>"--------开始启动GATEWAY---------------"<span style="color: rgba(0, 0, 0, 1)">
nohup java </span>-jar $GATEWAY >/dev/<span style="color: rgba(0, 0, 255, 1)">null</span> 2>&1 &<span style="color: rgba(0, 0, 0, 1)">
GATEWAY_pid</span>=`lsof -i:$GATEWAY_port|grep "LISTEN"|awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
until [ </span>-n "$GATEWAY_pid"<span style="color: rgba(0, 0, 0, 1)"> ]
</span><span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
GATEWAY_pid</span>=`lsof -i:$GATEWAY_port|grep "LISTEN"|awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
done
echo </span>"GATEWAY pid is $GATEWAY_pid"<span style="color: rgba(0, 0, 0, 1)">
echo </span>"---------GATEWAY 启动成功-----------"<span style="color: rgba(0, 0, 0, 1)">
## 启动auth
echo </span>"--------开始启动AUTH---------------"<span style="color: rgba(0, 0, 0, 1)">
nohup java </span>-jar $AUTH >/dev/<span style="color: rgba(0, 0, 255, 1)">null</span> 2>&1 &<span style="color: rgba(0, 0, 0, 1)">
AUTH_pid</span>=`lsof -i:$AUTH_port|grep "LISTEN"|awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
until [ </span>-n "$AUTH_pid"<span style="color: rgba(0, 0, 0, 1)"> ]
</span><span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
AUTH_pid</span>=`lsof -i:$AUTH_port|grep "LISTEN"|awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
done
echo </span>"AUTH pid is $AUTH_pid"<span style="color: rgba(0, 0, 0, 1)">
echo </span>"---------AUTH 启动成功-----------"<span style="color: rgba(0, 0, 0, 1)">
## 启动MASTERDATA
echo </span>"--------MASTERDATA 开始启动--------------"<span style="color: rgba(0, 0, 0, 1)">
nohup java </span>-jar $MASTERDATA >/dev/<span style="color: rgba(0, 0, 255, 1)">null</span> 2>&1 &<span style="color: rgba(0, 0, 0, 1)">
MASTERDATA_pid</span>=`lsof -i:$MASTERDATA_port|grep "LISTEN"|awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
until [ </span>-n "$MASTERDATA_pid"<span style="color: rgba(0, 0, 0, 1)"> ]
</span><span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
MASTERDATA_pid</span>=`lsof -i:$MASTERDATA_port|grep "LISTEN"|awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
done
echo </span>"MASTERDATA pid is $MASTERDATA_pid"<span style="color: rgba(0, 0, 0, 1)">
echo </span>"--------MASTERDATA 启动成功--------------"<span style="color: rgba(0, 0, 0, 1)">
## 启动LES
echo </span>"--------开始启动LES---------------"<span style="color: rgba(0, 0, 0, 1)">
nohup java </span>-jar $LES >/dev/<span style="color: rgba(0, 0, 255, 1)">null</span> 2>&1 &<span style="color: rgba(0, 0, 0, 1)">
LES_pid</span>=`lsof -i:$LES_port|grep "LISTEN"|awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
until [ </span>-n "$LES_pid"<span style="color: rgba(0, 0, 0, 1)"> ]
</span><span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
LES_pid</span>=`lsof -i:$LES_port|grep "LISTEN"|awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
done
echo </span>"LES pid is $LES_pid" sleep 10<span style="color: rgba(0, 0, 0, 1)">
echo </span>"---------LES 启动成功-----------"<span style="color: rgba(0, 0, 0, 1)">
## 启动WMS
echo </span>"--------开始启动WMS---------------"<span style="color: rgba(0, 0, 0, 1)">
nohup java </span>-jar $WMS >/dev/<span style="color: rgba(0, 0, 255, 1)">null</span>2>&1 &<span style="color: rgba(0, 0, 0, 1)">
WMS_pid</span>=`lsof -i:$WMS_port|grep "LISTEN"|awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
until [ </span>-n "$WMS_pid"<span style="color: rgba(0, 0, 0, 1)"> ]
</span><span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
WMS_pid</span>=`lsof -i:$WMS_port|grep "LISTEN"|awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
done
echo </span>"WMS pid is $WMS_pid"<span style="color: rgba(0, 0, 0, 1)">
echo </span>"---------WMS 启动成功-----------"<span style="color: rgba(0, 0, 0, 1)">
## 启动FILE
echo </span>"--------开始启动FILE---------------"<span style="color: rgba(0, 0, 0, 1)">
nohup java </span>-jar $FILE >/dev/<span style="color: rgba(0, 0, 255, 1)">null</span>2>&1 &<span style="color: rgba(0, 0, 0, 1)">
FILE_pid</span>=`lsof -i:$FILE_port|grep "LISTEN"|awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
until [ </span>-n "$FILE_pid"<span style="color: rgba(0, 0, 0, 1)"> ]
</span><span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
FILE_pid</span>=`lsof -i:$FILE_port|grep "LISTEN"|awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
done
echo </span>"FILE pid is $FILE_pid"<span style="color: rgba(0, 0, 0, 1)">
echo </span>"---------WMS 启动成功-----------"<span style="color: rgba(0, 0, 0, 1)">
## 启动JOB
echo </span>"--------开始启动JOB---------------"<span style="color: rgba(0, 0, 0, 1)">
nohup java </span>-jar $JOB >/dev/<span style="color: rgba(0, 0, 255, 1)">null</span>2>&1 &<span style="color: rgba(0, 0, 0, 1)">
JOB_pid</span>=`lsof -i:$JOB_port|grep "LISTEN"|awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
until [ </span>-n "$JOB_pid"<span style="color: rgba(0, 0, 0, 1)"> ]
</span><span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
JOB_pid</span>=`lsof -i:$JOB_port|grep "LISTEN"|awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
done
echo </span>"JOB pid is $JOB_pid"<span style="color: rgba(0, 0, 0, 1)">
echo </span>"---------JOB 启动成功-----------"<span style="color: rgba(0, 0, 0, 1)">
echo </span>"===startAll success==="<span style="color: rgba(0, 0, 0, 1)">
;;
stop)
P_ID</span>=`ps -ef | grep -w $GATEWAY | grep -v "grep" | awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
</span><span style="color: rgba(0, 0, 255, 1)">if</span> [ "$P_ID" == ""<span style="color: rgba(0, 0, 0, 1)"> ]; then
echo </span>"===GATEWAY process not exists or stop success"
<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">
kill </span>-9<span style="color: rgba(0, 0, 0, 1)"> $P_ID
echo </span>"GATEWAY killed success"<span style="color: rgba(0, 0, 0, 1)">
fi
P_ID</span>=`ps -ef | grep -w $FILE| grep -v "grep" | awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
</span><span style="color: rgba(0, 0, 255, 1)">if</span> [ "$P_ID" == ""<span style="color: rgba(0, 0, 0, 1)"> ]; then
echo </span>"===FILE|process not exists or stop success"
<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">
kill </span>-9<span style="color: rgba(0, 0, 0, 1)"> $P_ID
echo </span>"FILE|killed success"<span style="color: rgba(0, 0, 0, 1)">
fi
P_ID</span>=`ps -ef | grep -w $AUTH | grep -v "grep" | awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
</span><span style="color: rgba(0, 0, 255, 1)">if</span> [ "$P_ID" == ""<span style="color: rgba(0, 0, 0, 1)"> ]; then
echo </span>"===AUTH process not exists or stop success"
<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">
kill </span>-9<span style="color: rgba(0, 0, 0, 1)"> $P_ID
echo </span>"AUTH killed success"<span style="color: rgba(0, 0, 0, 1)">
fi
P_ID</span>=`ps -ef | grep -w $WMS | grep -v "grep" | awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
</span><span style="color: rgba(0, 0, 255, 1)">if</span> [ "$P_ID" == ""<span style="color: rgba(0, 0, 0, 1)"> ]; then
echo </span>"===WMS process not exists or stop success"
<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">
kill </span>-9<span style="color: rgba(0, 0, 0, 1)"> $P_ID
echo </span>"WMS killed success"<span style="color: rgba(0, 0, 0, 1)">
fi
P_ID</span>=`ps -ef | grep -w $MASTERDATA | grep -v "grep" | awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
</span><span style="color: rgba(0, 0, 255, 1)">if</span> [ "$P_ID" == ""<span style="color: rgba(0, 0, 0, 1)"> ]; then
echo </span>"===MASTERDATA process not exists or stop success"
<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">
kill </span>-9<span style="color: rgba(0, 0, 0, 1)"> $P_ID
echo </span>"MASTERDATA killed success"<span style="color: rgba(0, 0, 0, 1)">
fi
P_ID</span>=`ps -ef | grep -w $LES | grep -v "grep" | awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
</span><span style="color: rgba(0, 0, 255, 1)">if</span> [ "$P_ID" == ""<span style="color: rgba(0, 0, 0, 1)"> ]; then
echo </span>"===LES process not exists or stop success"
<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">
kill </span>-9<span style="color: rgba(0, 0, 0, 1)"> $P_ID
echo </span>"LES killed success"<span style="color: rgba(0, 0, 0, 1)">
fi
P_ID</span>=`ps -ef | grep -w $JOB | grep -v "grep" | awk '{print $2}'<span style="color: rgba(0, 0, 0, 1)">`
</span><span style="color: rgba(0, 0, 255, 1)">if</span> [ "$P_ID" == ""<span style="color: rgba(0, 0, 0, 1)"> ]; then
echo </span>"===JOB process not exists or stop success"
<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">
kill </span>-9<span style="color: rgba(0, 0, 0, 1)"> $P_ID
echo </span>"JOB killed success"<span style="color: rgba(0, 0, 0, 1)">
fi
echo </span>"===stop success==="<span style="color: rgba(0, 0, 0, 1)">
;;
restart)
$</span>0<span style="color: rgba(0, 0, 0, 1)"> stop
sleep </span>2<span style="color: rgba(0, 0, 0, 1)">
$</span>0<span style="color: rgba(0, 0, 0, 1)"> start
echo </span>"===restart success==="<span style="color: rgba(0, 0, 0, 1)">
;;
esac
exit </span>0</pre>
</div>
<p><span style="font-size: 18px"><strong>七、构建</strong></span></p>
<p> 进入Dashboard的首页后,会将我们之前创建的任务直接显示在这个地方</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725233116092-410362129.png"></p>
<p>点击右边的“播放”按钮,手动去构建一下,点击后的情况如下</p>
<p>左边的“构建执行状态”便会显示如下</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725233140834-606488735.png"></p>
<p> 点击红框内容,进入界面,选择“控制台输出”,便可以查看构建的过程,知道现在在做什么</p>
<p>构建成功:在这里可以知道当前打成的jar包的位置等信息</p>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230725233239667-146283773.png"></p>
<p><strong>最后:部署中遇到的问题</strong></p>
<p>1、jenkins部署后应用不启动</p>
<p>在jenkins控制台看启动脚本执行(start.sh)完毕,ps查看进程发现没有对应进程,在linux服务器上直接执行start.sh发现可以启动成功。Jenkins默认会在Build结束后Kill掉所有的衍生进程,用官方的话来说就是:</p>
<div class="cnblogs_code">
<pre>To reliably kill processes spawned by a job during a build, Jenkins contains a bit of <span style="color: rgba(0, 0, 255, 1)">native</span> code to list up such processes and kill them.</pre>
</div>
<p>解决方法:<br>Jenkins-->Manage Jenkins-->Configure System 在Global properties下,新增新的环境变量,然后保存。</p>
<div class="cnblogs_code">
<pre> key=<span style="color: rgba(0, 0, 0, 1)">BUILD_ID
value</span>=allow_to_run_as_daemon start_my_service </pre>
</div>
<p><img src="https://img2023.cnblogs.com/blog/1405715/202307/1405715-20230724230621450-1999894133.png"></p>
<p>参考链接:</p>
<p>https://blog.csdn.net/qq_40772692/article/details/125715726</p>
<p>https://blog.csdn.net/weixin_43804995/article/details/126801501</p>
<p>https://blog.csdn.net/xxxxssss12/article/details/102455021</p>
<div style="position: absolute; display: none"> </div>
<p>https://blog.csdn.net/Q17532573105/article/details/129345051</p>
<div style="position: absolute; display: none"> </div>
<div class="goog-te-spinner-pos"> </div>
<div class="goog-te-spinner-pos"> </div><br><br>
来源:https://www.cnblogs.com/qiantao/p/17578589.html
頁:
[1]