第一个案例
这个脚本包括从Git仓库拉取代码、进行Maven构建,并将构建好的jar包复制到指定服务器。
pipeline {agent anystages {stage('Prepare') {steps {script {// 判断是否存在目录,没有则克隆,有则拉取if (!fileExists('supervise-cloud')) {echo "Cloning repository"sh 'git clone ssh://git@192.168.0.99:9981/zhjg/zhengke/supervise-cloud.git'} else {echo "Pulling latest changes"sh '''cd supervise-cloudgit pull'''}}}}stage('Build') {steps {echo "Maven build start"sh '''export MAVEN_HOME=/root/apache-maven-3.9.2export JAVA_HOME=/usr/local/java/jdk-1.8.0export PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATHcd supervise-cloudmvn clean compile package -Dmaven.test.skip=true'''}}stage('Deploy') {steps {echo "Deploying artifacts"sh '''scp supervise-cloud/supervise-auth/target/supervise-auth.jar root@192.168.0.106:/rootscp supervise-cloud/supervise-other-module/target/*.jar root@192.168.0.106:/root'''}}}
}
详细说明:
- Prepare 阶段:这个阶段会检查本地是否已经存在项目目录。如果不存在,则执行
git clone
克隆仓库;如果存在,则执行git pull
拉取最新代码。 - Build 阶段:设置环境变量并进入项目目录,使用 Maven 进行构建。这里跳过了测试并且指定了项目和pom文件位置。
- Deploy 阶段:使用
scp
命令将构建好的jar
包复制到远程服务器上。这里需要确保 Jenkins 服务器有权限访问目标服务器,并且ssh密钥已正确设置。
第二个案例
需要在Jenkins流水线中停止supervise-gateway.jar应用,可以通过设置一个专门的停止阶段来实现。这个阶段将会使用kill
命令或其他方式来停止正在运行的Java进程。
Jenkinsfile 示例
假设应用是通过一个Java命令启动的,并且知道这个应用相关的一些信息(如使用的jar文件名),你可以在Jenkins流水线中这样写:
pipeline {agent anystages {stage('Stop Application') {steps {script {// 查找正在运行的Java应用的PIDsh '''PID=$(ps aux | grep '[s]upervise-gateway.jar' | awk '{print $2}')if [ -z "$PID" ]; thenecho "No application running."elseecho "Stopping application with PID: $PID"kill $PID# 确认进程是否已经停止while kill -0 $PID 2> /dev/null; do echo "Waiting for application to stop..."sleep 1doneecho "Application stopped."fi'''}}}}
}
这个流水线脚本做了以下几件事:
-
查找Java进程:使用
ps
和grep
命令查找包含supervise-gateway.jar
的Java进程。这里使用[s]upervise-gateway.jar
的搜索模式是为了避免匹配grep
命令自己的进程。 -
停止进程:使用
kill
命令发送终止信号到找到的进程ID。如果找到多个进程,这个脚本将会停止第一个找到的进程。 -
确认停止:脚本会检查进程是否停止,如果没有停止,它会每秒检查一次直到进程停止。