jenkins上线脚本模板(部署或者回滚)

node项目启动为例,传递部署参数则进行部署,判断是否今日第一次上线。如果第一次上线,则进行备份,如果不是第一次上线则不备份。传递回滚参数将今日第一次上线时备份项目覆盖到项目目录,重启项目,回滚完成。
python script.py deploy 部署
python script.py rollback 回滚

script.py

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
#author:tangyl
import os
import sys
import time
import shutil
import tarfile
class Go_Online(object):
    def __init__(self):
        self.package_name="project_name" #项目名称变量
        self.upload_path="/opt/uploadwar/" #传输中继目录(Jenkins讲项目打包传送到到这个目录)
        self.deploy_path = "project_path" #项目路径(项目执行时候路径)
        self.back_path = "back_path" #备份路径(上线前将项目备份的目录)
        self.date = time.strftime('%Y-%m-%d',time.localtime(time.time()))
        self.bak_date = self.back_path+str(self.date)
    def Bak(self):
        # 判断今日备份目录是否存在,如果不存在就创建目录,并且进行备份
        if os.path.exists(self.bak_date):
        # shutil.move(deploy_path,bak_date)
            print("再次部署!")
        else:
            print("今日首次上线,进行备份!")
            os.mkdir(self.bak_date)
            shutil.move(self.deploy_path+self.package_name,self.bak_date)
    def Deploy(self):
        self.Bak()
        # 部署代码
        try:
            t = tarfile.open(self.upload_path+self.package_name+".tar.gz","r:gz")
            file_name = os.path.dirname(self.deploy_path+self.package_name+"/")
            # os.chdir(deploy_path)
            t.extractall(path=file_name)
        except Exception as e:
            print("项目部署失败!")
        else:
            self.Start_Project()
    def Rollback(self):
        # 回滚操作
        try:
            shutil.rmtree(self.deploy_path+self.package_name)
            shutil.copytree(self.bak_date+"/"+self.package_name,self.deploy_path+self.package_name)
            print("进行回滚")
        except Exception as e:
            print("回滚失败")
        else:
            self.Start_Project()
    def Start_Project(self):
        # 启动项目
        n_env="serApiTest"
        os.system("cd {0} && export NODE_ENV={1} && pm2 start ./bin/www --name={2} && pm2 restart ./bin/www --name={3}".format(self.deploy_path+self.package_name,n_env,self.package_name,self.package_name))
        os.system("pm2 list")
        os.system("pm2 save")
if __name__ == "__main__":
    start_Go_Online = Go_Online()
    v1 = sys.argv
    if v1[1].strip() == "deploy":
        start_Go_Online.Deploy()
    else:
        start_Go_Online.Rollback()


        
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值