python打包部署脚本

linux可使用expect来实现自动交互,windows想要写出同样的功能脚本,只能使用python或者安装ActiveTcl

1、安装python

  • Microsoft Store搜索python直接安装,默认会直接添加到环境变量
  • https://www.python.org/官网下载,点击安装时会提示是否添加到环境变量
    在这里插入图片描述

2、添加检查环境变量

检查是否配置了多个,多个会按顺序查找使用,对后期出现问题不好排查
cmd检查版本 python --version
cmd检查安装路径,确保当前使用的环境与环境变量的相匹配 :

which python
或
python  
import sys 
print(sys.executable) 

3、安装模块

pip install paramiko
pip install scp

如果是用pyCharm开发后再在cmd中执行报错,出现module not found,
导致这个问题的原因之一是pyCharm中创建项目时默认设置的为环境版本隔离,可修改默认选项
在这里插入图片描述

4、开发脚本

测试环境为k8s容器
命令可服务器source ~/.bash_profile中进行简化

import paramiko
import scp
import sys
import os
import shutilprojectName = 'myproject'
env = sys.argv[1]
projectPath = os.getcwd()
# 本地编译jar的路径
localPath = r"{}\{}\\target\{}\lib".format(projectPath, projectName, projectName)
# 远程部署jar路径
remotePath = "/data/{}/{}/{}/".format(env, projectName, projectName)def mvnPackage():os.chdir(projectPath)targetPath = projectPath + "\\" + projectName + "\\target"success = removeDir(targetPath)if (success):os.system("mvn clean package -Dmaven.test.skip=true")exist = verifyFileExist(targetPath)if (exist):print("package complete success=======")return Trueelse:print("package complete error=======")return Falsedef removeDir(oldPath):if (verifyFileExist(oldPath)):# remove只能删除无子文件目录shutil.rmtree(oldPath)print("删除本地文件成功" + oldPath)return Truedef verifyFileExist(path):exist = os.path.exists(path)print(path + " exist is " + str(exist))return existdef restart(sshClient):print("======restart pod start===============")podCmd = "kubectl get pods -n {} | grep {} | awk {}".format(env, projectName, "'{print $1}'")print(podCmd)stdin, stdout, stderr = sshClient.exec_command(podCmd)# 'kubectl get pods -n ' + env + ' | grep ' + projectName + ' | awk \'{print $1}\'')podId = stdout.read().decode()stderr = stderr.read().decode()# 输出命令执行结果print("======podId :" + podId + " " +  stderr)if len(podId) == 0:print(projectName + "查询不到podId,请检查是否部署")else:podId = podId.replace("\n", "")deleteCmd = "kubectl delete pod " + podId + " -n " + envprint("===============" + deleteCmd)stdin, stdout, stderr = sshClient.exec_command(deleteCmd)error = stderr.read().decode()if (len(error) != 0):print("====restart 异常:" + error)else:print("======restart pod end===============" + stdout.read().decode())def uploadJar(sshClient):scpClient = scp.SCPClient(sshClient.get_transport())print("localPath:" + localPath + "\nremotePath:" + remotePath)scpClient.put(localPath, remotePath, recursive=True)scpClient.close()print("========上传成功")if __name__ == '__main__':print("=====================" + projectName)success = mvnPackage()if (success == False):print("打包失败")else:sshClient = paramiko.SSHClient()sshClient.set_missing_host_key_policy(paramiko.AutoAddPolicy())sshClient.connect('hostName', username='userName', password='password')uploadJar(sshClient)restart(sshClient)sshClient.close()print("部署成功")

5、使用

放入项目中
打开terminal窗口
python publish.py 测试环境名

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

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

相关文章

lua 时间差功能概略

简介 在进行程序设计过程中,经常需要对某些函数、某些程序片断从开始运行到运行结束所耗费的时间进行一些量化。这种量化实际上就是计算时间差。 获取函数耗时情景如下: function time_used() --开始计时-- do something at here. --结束计时--时间差&…

tomcat下载与使用教程

1. tomcat下载 官网:https://tomcat.apache.org/ 镜像地址:https://mirrors.huaweicloud.com/apache/tomcat/ 1、选择一个版本下载,官网下载速度缓慢,推荐镜像 2、对压缩包进行解压,无需进行安装,解压放…

Java 算法篇-深入了解单链表的反转(实现:用 5 种方式来具体实现)

🔥博客主页: 小扳_-CSDN博客 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 单链表的反转说明 2.0 单链表的创建 3.0 实现单链表反转的五种方法 3.1 实现单链表反转 - 循环复制(迭代法) 3.2 实现单链表反转 - 头插法 3…

OpenGL_Learn10(颜色)

1. 颜色 我们在现实生活中看到某一物体的颜色并不是这个物体真正拥有的颜色,而是它所反射的(Reflected)颜色。换句话说,那些不能被物体所吸收(Absorb)的颜色(被拒绝的颜色)就是我们能够感知到的物体的颜色。例如,太阳光…

计算机提示“找不到emp.dll,无法继续执行代码”,这几种解决办法都可以解决

在计算机使用过程中,我们可能会遇到各种问题,其中之一就是系统文件丢失。emp.dll文件是Windows操作系统中的一个重要组件,如果丢失或损坏,可能会导致系统运行不稳定甚至无法正常启动。本文将详细介绍emp.dll文件丢失恢复的4个方法…

【中间件篇-Redis缓存数据库04】Redis底层原理持久化、分布式锁

Redis底层原理 持久化 Redis虽然是个内存数据库,但是Redis支持RDB和AOF两种持久化机制,将数据写往磁盘,可以有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。 RDB RDB持久化是把当…

C语言--1,5,10人民币若干,现在需要18元,一共有多少种?

今天小编给大家分享一下穷举法的一道典型例题 一.题目描述 1,5,10人民币若干,现在需要18元,一共有多少种? 二.思路分析 总共有18块钱,设1元有x张,5元有y张,10元有z张,则有表达式:x5y10z18,穷举法最重要的…

模型部署:量化中的Post-Training-Quantization(PTQ)和Quantization-Aware-Training(QAT)

模型部署:量化中的Post-Training-Quantization(PTQ)和Quantization-Aware-Training(QAT) 前言量化Post-Training-Quantization(PTQ)Quantization-Aware-Training(QAT) 参…

AIGC|如何将Milvus集成到LangFlow中?详细代码演示!

目录 一、基本介绍 二、修改langflow代码使其支持milvus 三、效果演示 langflow是一个LangChain UI,它提供了一种交互界面来使用LangChain,通过简单的拖拽即可搭建自己的实验、原型流。通过在langflow中引入Milvus,用户可以更方便地存储和…

【Java 进阶篇】JQuery DOM操作:通用属性操作的绝妙魔法

在前端的舞台上,JQuery犹如一位魔法师,为我们展现了操纵HTML元素的奇妙技巧。而在这个技巧的精妙组成中,通用属性操作是一门绝妙的魔法。在本篇博客中,我们将深入研究JQuery DOM操作中的通用属性操作,揭示这段魔法的神…

业务出海之服务器探秘

这几年随着国内互联网市场的逐渐饱和,越来越多的公司加入到出海的行列,很多领域都取得了很不错的成就。虽然出海可以获得更加广阔的市场,但也需要面对很多之前在国内可能没有重视的一些问题。集中在海外服务器的选择维度上就有很大的变化。例…

“第六十七天”

各位,昨天查找子串的方法想起来了,就是那个KMP算法......自己理解都有点困难,还看看能不能想一下,确实很困难啊。 不要忘了toupper函数和tolower函数不是直接改变字符的大小写,而是返回对应的大小写的值,需…

2023nacos源码解读第2集——nacos-server的启动

nacos 是一个典型的server-client中间件,server这里安装最新的nacos-server 2.3.0-BETA版本 1.docker启动nacos-server 镜像详情参考nacos-docker项目的readme ,很方便,但是官方提供的nacos-server镜像往往可能滞后,且不便于后续…

Libhybris之线程局部存储TLS实例(五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

【STM32 CAN】STM32G47x 单片机FDCAN作为普通CAN外设使用教程

STM32G47x 单片机FDCAN作为普通CAN外设使用教程 控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。CAN协议用于汽…

Apache Druid连接回收引发的血案

问题 线上执行大批量定时任务,发现SQL执行失败的报错: CommunicationsException, druid version 1.1.10, jdbcUrl : jdbc:mysql://xxx?useUnicodetrue&characterEncodingUTF-8&zeroDateTimeBehaviorconvertToNull,testWhileIdle true, idle …

Java事务详解

一、事务的理解: 1、事务的特性: 1) 原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单位,对于其数据修改,要么全部执行,要么全部不执行。 2) 一致性…

Vatee万腾外汇数字化策略:Vatee科技决策力的未来引领

在外汇市场,Vatee万腾通过其前瞻性的外汇数字化策略,正引领着科技决策的未来。这一数字化策略的崭新愿景为投资者提供了更智慧、更高效的外汇投资体验,成为科技决策领域的翘楚。 Vatee万腾的外汇数字化策略是科技决策力未来引领的典范。通过运…

消息队列之初识Rabbit及安装

文章目录 一、MQ的相关概念1.什么是MQ?2.为什么要用MQ2.1流量消峰2.2应用解耦2.3异步处理 3.MQ 的分类3.1.ActiveMQ3.2.Kafka3.3.RocketMQ3.4.RabbitMQ 4.MQ 的选择4.1.Kafka4.2.RocketMQ4.3.RabbitMQ 二、RabbitMQ的相关概念1.四大核心概念2.RabbitMQ 核心部分3.Ra…

游戏AI:游戏开发和运营的新增长点

游戏AI(Game AI)是指在游戏开发运营的过程中模拟人类玩家或创建虚构性对手行为的人工智能技术。游戏AI的目标是增强游戏的互动性、可玩性和挑战性,使游戏中的角色能够智能地做出决策和行为。在游戏的开发和运营过程中使用人工智能技术&#x…