文教设施网站制作方案,wordpress 全局广告,建设网站破解版,台州企业建站程序Jenkins- CICD流水线 python/Java代码升级与回退
1、执行思路
1.1、代码升级 jenkins上点击 upgrade和 代码版本号 --${tag} jenkins 推送 代码 和 执行脚本 到目标服务器/opt目录下 执行命令 sh run.sh 代码名称 版本号 upgrade 版本号 来自jenkins的 构建参数中的 标签…Jenkins- CICD流水线 python/Java代码升级与回退
1、执行思路
1.1、代码升级 jenkins上点击 upgrade和 代码版本号 --${tag} jenkins 推送 代码 和 执行脚本 到目标服务器/opt目录下 执行命令 sh run.sh 代码名称 版本号 upgrade 版本号 来自jenkins的 构建参数中的 标签参数标签值从gitee处获取 run.sh 升级代码执行逻辑 1、在目标服务器上 新代码名称标签 cp 到 bak目录下 2、停服新代码 mv 到执行目录下启动 1.2、代码回退 jenkins上点 rollbak 和 代码版本号 run.sh 回退代码执行逻辑 停服cp bak/代码-版本号 到执行目录启动 2、gitee代码如下 run.sh 执行脚本 test_flask.py python代码 2.1、执行脚本run.sh代码如下
#!/bin/bash# cd dirname $0
APP_NAME$1
APP_file/opt/test/${APP_NAME}
tag$2#使用说明用来提示输入参数
usage() {echo Usage: ./run.sh [start|stop|status|restart|upgrade]exit 1
}#检查程序是否在运行
is_exist(){# pidjps -l|grep $APP_NAME|grep -v grep|awk {print $1} 此次获取java进程pid pidcurl localhost:10080/pid 2/dev/null#如果不存在返回1存在返回0 if [ -z ${pid} ]; thenecho pid不存在return 1elsereturn 0fi
}#启动方法
start(){echo ${APP_file} is starting ...is_existif [ $? -eq 0 ]; thenecho ${APP_file} is already running. pid${pid}else# nohup java -Xmx100m -Xms100m -jar ${APP_file} --server.port8181 /dev/null 21 此处启动java jar包 nohup python3 test/test_flask.py echo START...sleep 5is_existif [ $? -eq 0 ]; thenecho ${APP_file} is running success. pid${pid}fifi
}#停止方法
stop(){echo ${APP_file} is stopping ...is_existif [ $? -eq 0 ]; thenkill -15 $pidecho ...sleep 2is_existif [ $? -eq 0 ]; thenecho ${APP_file} still in the running. pid${pid}elseecho ${APP_file} has stopped running.fielseecho ${APP_file} is not runningfi
}#输出运行状态
status(){is_existif [ $? -eq 0 ]; thenecho ${APP_file} is running. Pid is ${pid}elseecho ${APP_file} is NOT running.fi
}#重启
restart(){echo ${APP_file} is restarting ...stop#sleep 5start
}#程序升级
#upgrade(){
# ./run.sh stop
# cd ..
# mv $APP_NAME $backup
# cp $rjxf ./
# ./bin/run.sh start
#}upgrade(){cd /opt/cp ./${APP_NAME} ./bak/${APP_NAME}-${tag}./run.sh ${APP_NAME} ${tag} stopmv ${APP_NAME} test/${APP_NAME}./run.sh ${APP_NAME} ${tag} start;exit
}rollback(){cd /opt/./run.sh ${APP_NAME} ${tag} stopcp ./bak/${APP_NAME}-${tag} test/${APP_NAME}./run.sh ${APP_NAME} ${tag} startecho slepp 5s ...sleep 5
}#根据输入参数选择执行对应方法不输入则执行使用说明
case $3 instart)start;;stop)stop;;status)status;;restart)restart;;upgrade)upgrade;;rollback)rollback;;*)usage;;
esac2.1、python代码如下
from flask import Flask
import time,osapp Flask(__name__)app.route(/)
def status():msg time.strftime(%Y-%m-%d %H:%M:%S)\tMyPid: str(os.getpid())\tv2.1.0\nreturn msgapp.route(/pid)
def pid():msg str(os.getpid()) \nreturn msgif __name__ __main__:app.run(port10080,host0.0.0.0)2.3、pipeline流水线Jenkinsfile配置如下
pipeline {agent anystages {stage(代码部署) {when {expression { params.ACTION upgrade}}steps {script {echo 从git上拉取代码checkout scmGit(branches: [[name: */master]], extensions: [], userRemoteConfigs: [[credentialsId: c2b40745-be98-4627-93af-5cc975b0e355, url: https://gitee.com/****/test.git]])echo 新代码tag标签 推送到目标服务器备份目录下sshPublisher(publishers: [sshPublisherDesc(configName: aly-arm, transfers: [sshTransfer(cleanRemote: false, excludes: , execCommand: , execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: [, ], remoteDirectory: , remoteDirectorySDF: false, removePrefix: , sourceFiles: test_flask.py,run.sh)], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])sshPublisher(publishers: [sshPublisherDesc(configName: aly-arm, transfers: [sshTransfer(cleanRemote: false, excludes: , execCommand: cd /opt;chmod x run.sh;sh run.sh test_flask.py ${tag} ${ACTION};exit, execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: [, ], remoteDirectory: , remoteDirectorySDF: false, removePrefix: , sourceFiles: ,usePty: true)], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}}}stage(代码回退) {when {expression { params.ACTION rollback}}steps {script {sshPublisher(publishers: [sshPublisherDesc(configName: aly-arm, transfers: [sshTransfer(cleanRemote: false, excludes: , execCommand: cd /opt;sh run.sh test_flask.py ${tag} ${ACTION};exit, execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: [, ], remoteDirectory: , remoteDirectorySDF: false, removePrefix: , sourceFiles: ,usePty: true)], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}}}}
}3、Jenkins配置
3.1、添加2个构建化参数 1、选项参数用于选择upgrade升级或者rollback回退 2、git参数用于从gitee上拉取对于标签的值 3.2、添加流水线配置 3.3、执行