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

这篇具有很好参考价值的文章主要介绍了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代码

Jenkins-CICD-python/Java包升级与回退,Jenkins,ci/cd,jenkins,运维,gitlab

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}" ]; then
    echo "pid不存在"
		return 1
	else
		return 0
	fi
}

#启动方法
start(){
  echo "${APP_file} is starting ..."
	is_exist
	if [ $? -eq 0 ]; then
		echo "${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 5
		is_exist
		if [ $? -eq 0 ]; then
			echo "${APP_file} is running success. pid=${pid}"
		fi
	fi
}

#停止方法
stop(){
  echo "${APP_file} is stopping ..."
  is_exist
  if [ $? -eq "0" ]; then
    kill -15 $pid
    echo "..."
    sleep 2
    is_exist
    if [ $? -eq 0 ]; then
      echo "${APP_file} still in the running. pid=${pid}"
    else
      echo "${APP_file} has stopped running."
    fi
  else
    echo "${APP_file} is not running"
  fi  
}

#输出运行状态
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_file} is running. Pid is ${pid}"
  else
    echo "${APP_file} is NOT running."
  fi
}

#重启
restart(){
  echo "${APP_file} is restarting ..."
  stop
  #sleep 5
  start
}

#程序升级
#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} stop
  mv ${APP_NAME}  test/${APP_NAME}
  ./run.sh ${APP_NAME} ${tag} start;exit
}

rollback(){
  cd /opt/
  ./run.sh ${APP_NAME} ${tag} stop
  cp ./bak/${APP_NAME}-${tag} test/${APP_NAME}
  ./run.sh ${APP_NAME} ${tag} start
  echo "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,os

app = 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 msg

if __name__ == '__main__':
    app.run(port=10080,host="0.0.0.0")

2.3、pipeline流水线,Jenkinsfile配置如下

pipeline {
    agent any

    stages {
        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上拉取对于标签的值

Jenkins-CICD-python/Java包升级与回退,Jenkins,ci/cd,jenkins,运维,gitlab
Jenkins-CICD-python/Java包升级与回退,Jenkins,ci/cd,jenkins,运维,gitlab

3.2、添加流水线配置

Jenkins-CICD-python/Java包升级与回退,Jenkins,ci/cd,jenkins,运维,gitlab

3.3、执行

Jenkins-CICD-python/Java包升级与回退,Jenkins,ci/cd,jenkins,运维,gitlab文章来源地址https://www.toymoban.com/news/detail-648116.html

到了这里,关于Jenkins-CICD-python/Java包升级与回退的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • jenkins的cicd操作

    持续集成( Continuous Integration) 持续频繁的(每天多次)将本地代码“集成”到主干分支,并保证主干分支可用 持续交付(Continuous Delivery) 是持续集成的下一步,持续频繁地将软件的新版本交付到类生产环境(类似于预发),交付给测试、产品验收。 持续交付强调的是“

    2024年02月14日
    浏览(21)
  • 基于Jenkins的CICD

    已安装docker并设置为开机自启 已安装Docker-Compose 基于docker安装Jenkins jenkins官网 编写docker-compose.yml文件 首次启动会因为数据卷data目录没有权限导致启动失败,设置data目录写权限(/usr/local/docker/jenkins_docker/data) 启动jenkins 在/usr/local/docker/jenkins_docker目录下执行 访问地址 账号密码

    2024年04月22日
    浏览(22)
  • Jenkins CICD过程常见异常

    Exception when publishing, exception message [Exec exit status not zero. Status [126] 1.1 报错日志 1.2 原因 Jenkins调用的脚本文件权限不够 1.3 解决方案 chmod增加权限 Exception when publishing, exception message [Exec exit status not zero. Status [127]] 2.1 报错日志 2.2 原因 脚本文件目录错误 2.3 解决方案 将Jenkins配置

    2024年02月03日
    浏览(16)
  • Jenkins和gitlab实现CICD

    在开发TracerBackend服务的时候,每次更改代码之后需要推送到gitlab,然后ssh登录到Ubuntu的服务器上部署新的代码。服务成功启动之后,在本地执行测试用例,觉得这一套操作流程还是挺复杂的。想起公司的代码发布流程,只要个人分支的代码测试通过之后,合并到master分支的时

    2024年04月22日
    浏览(17)
  • 【CICD】Jenkins 常用操作手册

    词汇 说明 Node 作为 Jenkins 环境的一部分并能够执行Pipeline或项目的机器,无论是 Master 还是Agent 都被认为是 Node。 Master 存储配置,加载插件以及为 Jenkins 呈现各种用户界面的主控节点 Agent 通常是一台主机或容器,连接到 Jenkins 主控节点,并执行主控节点下发的任务 Executor 节

    2024年03月19日
    浏览(20)
  • CICD中的Jenkins和Ansible解决方案

    每一次重装系统或者是需要在服务器上正确运行软件,我们都需要重新安装所有的package、dependency并进行相应配置的微调。而这一过程可能就会因为疏忽导致错误,因此需要自动化部署 持续整合,持续交付(CI/CD)的实践,我们能够周期性的对产品进行各种专业测试,如果出

    2024年02月01日
    浏览(16)
  • CICD 流程学习(五)Jenkins后端工程构建

    案例1:数据库服务部署 MySQL部署 Redis部署 案例2:Jenkins全局工具配置 配置JDK环境    配置Git工具  配置Maven工具 配置邮件工具   案例3:Jenkins后端工程构建 Jenkins中创建HIS-BACKEND工程    测试HIS-BACKEND工程构建   案例4:Jenkins后端自动发布 添加SSH服务器     HIS-BACKEND工程配置

    2024年02月08日
    浏览(18)
  • linux系统从零开始搭建CICD jenkins环境

    本文教你从零开始搭建jenkins环境,开始你的CICD之旅。 1.1 系统与安装环境 本文的环境为云服务器环境,系统为linux Red-hat系统。版本信息如下: Linux version 3.10.0-1160.88.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP 如果是linux其它系统,也

    2024年02月04日
    浏览(22)
  • 实战:Docker+Jenkins+Gitee构建CICD流水线

    持续集成和持续交付一直是当下流行的开发运维方式,CICD省去了大量的运维时间,也能够提高开发者代码集成规范。开发者在开发完需求功能后可以直接提交到gitee,然后jenkins直接进行代码编译和一体化流水线部署。通过流水线部署可以极大的提高devops效率,也是企业信息自

    2024年02月14日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包