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、执行

相关文章:
Jenkins-CICD-python/Java包升级与回退
Jenkins- CICD流水线 python/Java代码升级与回退 1、执行思路 1.1、代码升级 jenkins上点击 upgrade和 代码版本号 --${tag} jenkins 推送 代码 和 执行脚本 到目标服务器/opt目录下 执行命令 sh run.sh 代码名称 版本号 upgrade 版本号 来自jenkins的 构建参数中的 标签…...
模糊测试面面观 | 模糊测试工具知多少
自1988年威斯康星大学的Barton Miller首次提出模糊测试这一概念以来,模糊测试领域经历了持续长久发展。模糊测试作为一种软件测试方法,旨在通过向程序输入模糊、随机、异常的数据,探测和发现潜在的漏洞和错误。这种方法备受安全研究人员的青睐…...
esp8266+电压检测模块检测电池电压
该模块5v时输出1v,因esp8266 ADC引脚(A0)支持电压范围是0v-1v,所以该方案仅支持0-5v电压检测 接线: - 接 esp8266GND 可不接 S 接 ADC esp8266 为 A0 VCC 被检测直流电 GND 被检测直流电- #include <Wire.h>const int adcPin A0; // …...
MongoDB增删改查操作
数据库操作: 在MongoDB中,文档集合存在数据库中。 要选择使用的数据库,请在mongo shell程序中发出 use <db> 语句 // 查看有哪些数据库 show dbs;// 如果数据库不存在,则创建并切换到该数据库,存在则直接切换到…...
Python | Package | Python的三种包安装方式(pip/whl/tar.gz)
文章目录 PIP 安装与卸载Source 安装与卸载Whell 安装与卸载 PIP 安装与卸载 pip install xxx pip install xxxversion_numberpip install captcha pip install captcha0.4# XXX/anaconda3/envs/py373/lib/python3.7/site-packages pip uninstall captchaSource 安装与卸载 p…...
1. 微信小程序开发环境搭建
下载 微信的小程序开发需要使用到微信开发者工具,通过https://developers.weixin.qq.com/miniprogram/dev/devtools/stable.html可以下载 下载完成后 安装...
Redis五大基本数据类型及其使用场景
文章目录 **一 什么是NoSQL?****二 redis是什么?****三 redis五大基本类型**1 String(字符串)**应用场景** 2 List(列表)**应用场景** 3 Set(集合)4 sorted set(有序集合…...
优于立方复杂度的 Rust 中矩阵乘法
优于立方复杂度的 Rust 中矩阵乘法 迈克克维特 跟随 发表于 更好的编程 6 分钟阅读 7月 <> 143 中途:三次矩阵乘法 一、说明 几年前,我在 C 年编写了 Strassen 矩阵乘法算法的实现,最近在 Rust 中重新实现了它,因为我继续…...
CentOS gcc介绍及快速升级
1.gcc介绍 GCC(GNU Compiler Collection)是一个开源的编译器套件,由 GNU(GNUs Not Unix!的递归缩写) 项目开发和维护。它是一个功能强大且广泛使用的编译器,支持多种编程语言,包括 C、C、Objective-C、Fortran、Ada 和…...
IO多路复用中select的TCP服务器模型和poll服务模型
select的TCP服务器模型 服务器端 #include <head.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #include <sys/select.h> #include <sys/time.h>#define PORT 6666 //1024~4…...
AI工程师招募;60+开发者AI工具清单;如何用AI工具读懂插件源码;开发者出海解读;斯坦福LLM课程 | ShowMeAI日报
👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 一则AI工程师招募信息:新领域需要新技能 Vision Flow (目的涌现) 是一家基于 AGI 原生技术的创业公司,是全球探…...
Mysql 使用JSON_SEARCH函数 判断多表查询时,某个拼接字段是否包含另外一个字段
场景 两个表管理查询 关联字段为A表id, B表的ids A表id是正常的整数, B的ids是id拼接成的字符类型, 格式是111,222,333这样的. A: B: id ids11 11,22,3322 33,44,5533 …...
C++头文件
C头文件 一般头文件特殊头文件windows.hbits/stdc.h 一般头文件 C头文件是一种包含预定义函数、类和变量声明的文件。它们通常用于在源代码文件中引入外部库或模块的功能。 头文件的作用是提供程序所需的声明信息,以便在源代码文件中使用这些声明。当你在源代码文…...
无脑入门pytorch系列(四)—— scatter_
本系列教程适用于没有任何pytorch的同学(简单的python语法还是要的),从代码的表层出发挖掘代码的深层含义,理解具体的意思和内涵。pytorch的很多函数看着非常简单,但是其中包含了很多内容,不了解其中的意思…...
【Spring源码】Spring扩展点及顺序
Spring扩展点及顺序 01-调用BeanFactoryPostProcessor的构造器 02-调用了BeanFactoryPostProcessor的postProcessBeanFactory 03-调用了BeanPostProcessor构造器 04-调用InstantiationAwareBeanPostProcessor构造方法 05-调用了InstantiationAwareBeanPostProcessor接口的Befo…...
广州华锐互动:3D数字孪生开发编辑器助力企业高效开发数字孪生应用
3D数字孪生开发编辑器是一种新兴的技术,它可以帮助企业更好地管理和维护其物联网设备。这些工具可以帮助企业实现对设备的实时监控、故障排除和优化,从而提高生产效率和降低成本。 数字孪生系统是一种将物理世界与数字世界相结合的技术,它可以…...
【脚踢数据结构】图(纯享版)
(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,Linux基础,ARM开发板,软件配置等领域博主🌍快上🚘,一起学习,让我们成为一个强大的攻城狮!送给自己和读者的…...
[leetcode] 707 设计链表
707. 设L计链表 中等 902 相关企业 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向链表,则还需…...
JIRA:项目管理的秘密武器
引言 在当今动态且快速变化的商业环境中,项目管理已经成为任何组织成功的关键因素。能够有效地管理项目,保证项目在设定的时间和预算内按照预期的质量完成,是每个项目经理的目标。为了实现这个目标,项目经理需要依赖强大的工具&a…...
ARM 作业1
一、思维导图 二、 1. 2. .text 文本段 .globl _start 声明_start:mov r0,#0mov r1,#0fun:cmp r1,#100bhi stopadd r0,r0,r1add r1,r1,#1b fun stop:b stop .end...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
