Jenkins-CICD-python/Java包升级与回退

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(){# pid=`jps -l|grep $APP_NAME|grep -v grep|awk '{print $1}'` >> 此次获取java进程pid <<pid=`curl 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.port=8181 >/dev/null 2>&1 & >> 此处启动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 running"fi  
}#输出运行状态
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" in"start")start;;"stop")stop;;"status")status;;"restart")restart;;"upgrade")upgrade;;"rollback")rollback;;*)usage;;
esac

2.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"+"\n"return msg@app.route("/pid")
def pid():msg = str(os.getpid()) + "\n"return msgif __name__ == '__main__':app.run(port=10080,host="0.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、执行

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/90979.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

冠达管理:融券卖出交易规则?

融券卖出买卖是指投资者在没有实际持有某只股票的情况下&#xff0c;经过借入该股票并卖出来取得赢利的一种股票买卖方式。融券卖出买卖规矩针对不同市场、不同证券公司之间可能会存在一些差异&#xff0c;但基本的规矩包含如下几个方面。 一、融资融券的资历要求 在进行融券卖…

list模拟实现

list模拟实现 结点类的模拟实现构造函数 迭代器类的模拟实现迭代器类存在的意义迭代器类的模板参数构造函数!运算符重载运算符重载*运算符重载->运算符的重载运算符的重载- -运算符的重载 list模拟实现构造函数拷贝构造函数赋值运算符重载函数与迭代器相关的函数begin与end …

uniapp封装组件,选中后右上角显示对号√样式(通过css实现)

效果&#xff1a; 一、组件封装 1、在项目根目录下创建components文件夹&#xff0c;自定义组件名称&#xff0c;我定义的是xc-button 2、封装组件代码 <template><view class"handle-btn"><view :class"handleIdCode 1 ? select : unSelec…

2023.8.14论文阅读

文章目录 ESPNet: Efficient Spatial Pyramid of Dilated Convolutions for Semantic Segmentation摘要本文方法实验结果 DeepFusion: Lidar-Camera Deep Fusion for Multi-Modal 3D Object Detection摘要本文方法实验结果 ESPNet: Efficient Spatial Pyramid of Dilated Convo…

一、Kubernetes介绍与集群架构

Kubernetes介绍与集群架构 一、认识容器编排工具 docker machine 主要用于准备docker host现已弃用建议使用docker desktop docker compose Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose&#xff0c;您可以使用 YAML 文件来配置应用程序的服务。…

STM32定时器TIM控制

一、CubeMX的设置 1、新建工程&#xff0c;进行基本配置 2、配置定时器TIM2 1&#xff09;定时器计算公式&#xff1a;&#xff08;以下两条公式相同&#xff09; Tout ((ARR1) * PSC1)) / Tclk TimeOut ((Prescaler 1) * (Period 1)) / TimeClockFren Tout TimeOut&…

一生一芯3——ubuntu下显示器扩展

刚进ubuntu时不知道如何完成屏幕扩展&#xff0c;查阅后发现是显卡驱动问题&#xff0c;这里需要调整内置显示器的驱动 打开附加驱动 选择显卡驱动如上&#xff08;其他没试过&#xff09; 应用更改 -> 下载后重启 重启完成后扩展显示器上就有显示了 在设置中调整显示屏顺…

电商3D产品渲染简明教程

3D 渲染让动作电影看起来更酷&#xff0c;让建筑设计变得栩栩如生&#xff0c;现在还可以帮助营销人员推广他们的产品。 从最新的《阿凡达》电影到 Spotify 的上一次营销活动&#xff0c;3D 的应用让一切变得更加美好。 在营销领域&#xff0c;3D 产品渲染可帮助品牌创建产品的…

2023-08-15 linux mipi 屏幕调试:有一个屏幕开机时候不显示,开机后按power 按键休眠唤醒就可以显示。原因是reset gpio 被复用

一、现象&#xff1a;今天更新了一个新版本的buildroot linux sdk &#xff0c;调试两个mipi 屏幕&#xff0c;这两个屏幕之前在其他的sdk都调好了的&#xff0c;所有直接把配置搬过来。但是有一个屏幕可以正常显示&#xff0c;有一个屏幕开机时候不显示&#xff0c;开机后按po…

银河麒麟安装php7.1.33

银河麒麟V10兼容CentOS 8 安装过程与CentOS类似。 TencentOS3.1安装PHPNginxredis测试系统_乐大师的博客-CSDN博客 可以参考之前我写的文章。 不过有2个细节不同&#xff0c;下面说下。 问题1&#xff1a;编译错误提示“error:off_t undefined” 解决方法&#xff1a; 编…

运维监控学习笔记7

Zabbix的安装&#xff1a; 1、基础环境准备&#xff1a; 安装zabbix的yum源&#xff0c;阿里的yum源提供了zabbix3.0。 rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm 这个文件就是生成了一个zabbix.repo 2、安…

华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架的UNet-2D案例实现

目录 一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例 二、环境准备与数据读取三、模型解析Transformer基本原理Attention模块 Transformer EncoderViT模型的输入整体构建ViT 四、模型训练与推理模型训练模型验证模型推理 近些年&#xff0c;随着基于自注意&…

UI设计师个人工作感悟5篇

UI设计师个人工作感悟一 工作一年了&#xff0c;结合我自身谈谈UI设计的重要性。现在主流的论坛建站程序有两种 Phpwind 和Discuz(Phpwind被阿里巴巴收购 Discuz被腾讯收购这两个论坛程序都是开源免费的)&#xff0c;利用这两种程序我都分别建立过论坛&#xff0c;我第一次用的…

C++入门篇7---string类

所谓的string类&#xff0c;其实就是我们所说的字符串&#xff0c;本质和c语言中的字符串数组一样&#xff0c;但是为了更符合C面向对象的特性&#xff0c;特地将它写成了一个单独的类&#xff0c;方便我们的使用 对其定义有兴趣的可以去看string类的文档介绍&#xff0c;这里…

Rabbitmq延迟消息

目录 一、延迟消息1.基于死信实现延迟消息1.1 消息的TTL&#xff08;Time To Live&#xff09;1.2 死信交换机 Dead Letter Exchanges1.3 代码实现 2.基于延迟插件实现延迟消息2.1 插件安装2.2 代码实现 3.基于延迟插件封装消息 一、延迟消息 延迟消息有两种实现方案&#xff…

微软杀入Web3:打造基于区块链的AI产品

作者&#xff1a;秦晋 2023年1月&#xff0c;微软向 ChatGPT 创建者 OpenAI 投资 100 亿美元&#xff0c;在AI业界引发格外关注。此举也让微软在AI的战略探索上提前取得有利位置。 2023年3月&#xff0c;微软软件工程师 Albacore 披露微软正在为Edge 浏览器测试内置的非托管加密…

全新 – Amazon EC2 M1 Mac 实例

去年&#xff0c;在 re: Invent 2021 大会期间&#xff0c;我写了一篇博客文章&#xff0c;宣布推出 EC2 M1 Mac 实例的预览版。我知道你们当中许多人请求访问预览版&#xff0c;我们尽了最大努力&#xff0c;却无法让所有人满意。不过&#xff0c;大家现在已经无需等待了。我很…

LeNet中文翻译

Gradient-Based Learning Applied to Document Recognition 基于梯度的学习应用于文档识别 摘要 使用反向传播算法训练的多层神经网络构成了成功的基于梯度的学习技术的最佳示例。给定适当的网络架构&#xff0c;基于梯度的学习算法可用于合成复杂的决策表面&#xff0c;该决策…

C++ STL priority_queue

目录 一.认识priority_queue 二. priority_queue的使用 三.仿函数 1.什么是仿函数 2.控制大小堆 3.TopK问题 四.模拟实现priority_queue 1.priority_queue的主要接口框架 2.堆的向上调整算法 3.堆的向下调整算法 4.仿函数控制大小堆 五.priority_queue模拟实现整体代码和测…

用js快速生成一个简单的css原子库 例如: .mr-18 .pl-18

第三方css原子库的缺点 比如 tailwindcss&#xff0c;有学习成本最开始写的时候效率可能还没有我们自己手写效率高&#xff0c;需要配置&#xff0c;会有原始样式被覆盖的问题&#xff1b;总之就是一个字重 自己搓的优点 学习成本低灵活不会有副作用 <!DOCTYPE html>…