自动发版脚本

这是一个使用Fabric进行远程服务器自动化部署的Python脚本。它包括了更新代码、打包服务、停止服务、备份服务、上传服务、重载服务等步骤。主要操作涉及git更新、maven打包、服务的启动与停止,以及文件的备份与上传。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/usr/bin/python
# -*- coding: utf-8 -*-

from fabric.api import *
from fabric.colors import *
import time

# env.use_ssh_config = True
env.roledefs = {'root': ['root@xx.xx.xx.xx']}
env.password='123456'

# project name
project_name = "project-name";

# local source home
source_home = "/home/root/workspace/project-name"
# target home
target_home = "/home/root/project-name"

# profile
maven_profile = "500"

@task
def pull_source_code():
    """
    update (eg: project_name) code
    """
    with lcd(source_home):
        local("git fetch")
        local("git checkout git-500")
        local("git pull")
        print "update tigress code finished!"

@task
def package_service():
    """
    maven package
    """
    with lcd(source_home):
        local("mvn clean package deploy -am -U -pl cod-web -Dmaven.test.skip -P{maven_profile}".format(maven_profile=maven_profile))
        print "mvn package finished!"


@roles('root')
@task
def stop_service():
    """
    stop service
    """
    with settings(warn_only=True):
        with cd("{target_home}".format(target_home=target_home)):
            run("{project_name}/bin/{project_name} stop".format(project_name=project_name))
            print "stop service finished!"


@roles('root')
@task
def prepare_service():
    """
    build (eg: project_name) user(eg: user) and upload to server
    """
    backup_service()
    upload_service()


@roles('root')
@task
def backup_service():
    """
    backup service
    """
    with settings(warn_only=True):
        run("[ -e {target_home} ] || mkdir -p {target_home}".format(target_home=target_home))
        with cd("{target_home}".format(target_home=target_home)):
            """run("[ -e {project_name}.tar.gz.bak ] && rm {project_name}.tar.gz.bak".format(project_name=project_name))"""
            run("[ -e {project_name}.tar.gz ] && mv {project_name}.tar.gz {project_name_v}.tar.gz".format(project_name=project_name,project_name_v=project_name+"-"+time.strftime('%Y%m%d%H%M%S')))
            print "backup service finished!"


@roles('root')
@task
def upload_service():
    """
    upload to server
    """
    with lcd("{source_home}".format(source_home=source_home)):
        with lcd("web/target/jsw"):
            local("tar zcf {project_name}.tar.gz {project_name}".format(project_name=project_name))
            put("{project_name}.tar.gz".format(project_name=project_name),"{target_home}".format(target_home=target_home))


@roles('root')
@task
def reload_service():
    """
    reload service (eg: project_name) and start
    """
    with settings(warn_only=True):
        with cd("{target_home}".format(target_home=target_home)):
            run("{project_name}/bin/{project_name} stop".format(project_name=project_name))
            run("[ -e {project_name} ] && rm -rf {project_name}".format(project_name=project_name))
            run("tar zxf {project_name}.tar.gz".format(project_name=project_name))
            run("chmod u+x {project_name}/bin/*".format(project_name=project_name))
            run("{project_name}/bin/{project_name} start".format(project_name=project_name))
            print "reload service finished!"


@task(default=True)
def deploy():
    pull_source_code()
    print "beging to deploy service"
    package_service()
    execute(stop_service)
    execute(prepare_service)
    execute(reload_service)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值