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 shutil


projectName = '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 True
        else:
            print("package complete error=======")

    return False


def removeDir(oldPath):
    if (verifyFileExist(oldPath)):
    	# remove只能删除无子文件目录
        shutil.rmtree(oldPath)
        print("删除本地文件成功" + oldPath)
    return True

def verifyFileExist(path):
    exist = os.path.exists(path)
    print(path + " exist is " + str(exist))
    return exist


def 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 " + env
        print("===============" + 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 测试环境名

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初识MySQL(一)(创建数据库,查看删除数据库,备份和恢复,创建表,数据类型)

目录 客户端 ------> MySQL服务(3306) 数据库三层结构-破除MySQL神秘 创建数据库 查看删除数据库 备份恢复数据库 创建表 MySQL常用的数据类型(列类型) ​编辑 ​编辑整型 bit类型 小数类型 字符串类型 日期类型的使用 客户端 ------> MySQL服务(3306) 连接…

【斗破年番】毒宗决战万蝎门,小医仙惨遭背叛,斗宗巅峰蝎毕岩

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 深度爆料斗破年番第七十话剧情解析,万蝎门宗主蝎毕岩,也算是这片大陆上的一小小块势力。一年前,他曾与小医仙正面交锋,即使当时的蝎毕岩已经站在了四星斗宗&…

2023年【广东省安全员B证第四批(项目负责人)】考试及广东省安全员B证第四批(项目负责人)试题及解析

题库来源:安全生产模拟考试一点通公众号小程序 广东省安全员B证第四批(项目负责人)考试考前必练!安全生产模拟考试一点通每个月更新广东省安全员B证第四批(项目负责人)试题及解析题目及答案!多…

若依系统富文本框上传图片报错!

报错如下: 原因:如图,富文本路径中存在 / 字符,导致上传出错。 解决方案:将富文本框内容在前端进行加密,后端再解密。 前端: 安装 crypto-js 插件 npm install crypto-js 创建工具类 :在 sr…

阿里云国际站:应用实时监控服务

文章目录 一、阿里云应用实时监控服务的概念 二、阿里云应用实时监控服务的优势 三、阿里云应用实时监控服务的功能 四、写在最后 一、阿里云应用实时监控服务的概念 应用实时监控服务 (Application Real-Time Monitoring Service) 作为一款云原生可观测产品平台&#xff…

微服务拆分的一些基本原则

文章首发公众号:海天二路搬砖工 单一职责原则 什么是单一职责原则 单一职责原则原本是面向对象设计中的一个基本原则,它指的是一个类只负责一项职责,不要存在多于一个导致类变更的原因。 在微服务架构中,一个微服务也应该只负…

使用vitis调试时debug按钮灰化无法进行操作

问题 使用vitis调试时debug按钮灰化无法进行操作。 原因 bitstream文件配置有误。 解决办法 重新配置正确的bitstream文件,如下:

Vue基础之组件通信(二)

个人名片: 😊作者简介:一名大二在校生 🤡 个人主页:坠入暮云间x 🐼座右铭:懒惰受到的惩罚不仅仅是自己的失败,还有别人的成功。 🎅**学习目标: 坚持每一次的学习打卡 文章…

通过实例fpmarkets讲解三智者交易策略

今天fpmarkets和大家一起用实例解释三智者交易策略。 在每日BTCUSD图中,椭圆形区域标志着多头反转棒线。它创下了当地新低,但收盘时接近最高点。它标志着下半年的市场情绪更加乐观。酒吧在鳄鱼嘴的外面。 多头进场放在多头发散棒顶部上方。在这里fpmarke…

深度神经网络算子参数量和计算量分析—卷积篇

前言 在用于计算机视觉任务的深度神经网络模型中,卷积算子作为一种重要的特征提取方式被广泛应用,本文针对常见的卷积算子参数量和计算量的计算方法进行分析,主要包括普通卷积、深度可分离卷积、分组卷积,以及自动计算模型参数量和…

【Cookie 和 session 的区别】

会话(Session) 跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。cookie和session都是用来跟踪浏览器用户身份的会话方式。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 我们目前使用…

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

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

热敏电阻B值含义

1.B值(材料常数) 也称为β值,该热敏电阻规格是NTC热敏电阻的电阻与温度之间关系的特定曲线。它是一个描述热敏电阻材料物理特性的参数,也是热灵敏度指标,B值越大,表示热敏电阻器的灵敏度越高。应注意的是&a…

如何利用反欺诈(羊毛盾)API提升电商平台交易安全性?

前言 近年来,随着网络交易的普及和互联网金融的快速发展,各类网络欺诈事件层出不穷。面对这些问题,电商平台必须采取有效的措施来保障交易安全。而反欺诈(羊毛盾)API正是一种高效、智能的解决方案,能够帮助…

postswigger 靶场(CSRF)攻略-- 2.令牌验证

靶场地址: What is CSRF (Cross-site request forgery)? Tutorial & Examples | Web Security Academy (portswigger.net)https://portswigger.net/web-security/csrf 令牌(token)验证取决于请求方法 题目中已告知易受攻击的是电子邮件的更改功能&#xff0…

web自动化框架之四测试报告的搭建

现状: 看过前面的文章,楼主用的是python,所以在搭建测试报告这块的时候使用的是unittesthtmlTestRunner;然后发现生成出来的报告,总是有那么不完美的地方,比如想增加图片,比如显示风格改变下&a…

DBever连接PG库

一、简介 DBeaver是一种通用数据库管理工具,适用于需要以专业方式使用数据的每个人;适用于开发人员,数据库管理员,分析师和所有需要使用数据库的人员的 免费(DBeaver Community) 的多平台数据库工具,支持 Windows、Li…

【哈夫曼树的构造和查找最小的的权值结点代码,哈夫曼编码的算法实现】

文章目录 哈夫曼树的构造和查找最小的的权值结点代码哈夫曼编码思想哈夫曼编码的算法实现 哈夫曼树的构造和查找最小的的权值结点代码 #include<iostream> using namespace std;typedef struct {int parent, lch, rch;//双亲结点和孩子结点的下标int weight;//权值 }htN…

ChinaSoft 论坛巡礼|开源软件供应链论坛

2023年CCF中国软件大会&#xff08;CCF ChinaSoft 2023&#xff09;由CCF主办&#xff0c;CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办&#xff0c;将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

Go语言安装教程

【Go系列-1】-Go安装教程 环境提前准备 安装的时候可以选择自己的目录进行环境管理 E:\Z_Enviroment\Go创建文件夹&#xff1a; E:\Z_Enviroment\Go E:\Z_Enviroment\GoWorks E:\Z_Enviroment\GoWorks\bin E:\Z_Enviroment\GoWorks\pkg E:\Z_Enviroment\GoWorks\src环境变量…