python脚本通过Jenkins自动化部署git服务器中的web网站

11 篇文章 0 订阅

python脚本通过Jenkins自动化部署git服务器中的web网站

本脚本实现Jenkins中持续部署的文件来编译部署web网站。
具体代码实现如下:

import os
import requests
import wget
import hashlib
import tarfile


def has_new_ver(ver_fname, ver_url):
    '用于判断是否有新版本,有新版本返回True'
    # 如果本地没有版本文件,则有新版本;本地和远程版本不一样,有新版本
    if not os.path.isfile(ver_fname):
        return True

    # 取出远程版本号
    r = requests.get(ver_url)

    # 远程版本与本地版本比较
    with open(ver_fname) as fobj:
        local_ver = fobj.read()

    if local_ver != r.text:
        return True
    else:
        return False


def check_app(app_fname, md5_url):
    '用于校验软件包是否完好,完好返回True'
    # 计算文件的md5值
    m = hashlib.md5()
    with open(app_fname, 'rb') as fobj:
        while 1:
            data = fobj.read(4096)
            if not data:
                break
            m.update(data)

    # 在网上取出公布的md5值
    r = requests.get(md5_url)

    # 判断两个值是否相等
    if m.hexdigest() == r.text.strip():
        return True
    else:
        return False

def deploy(app_fname, deploy_dir):
    '部署软件包到web服务器'
    # 解压到部署目录
    tar = tarfile.open(app_fname)
    tar.extractall(path=deploy_dir)
    tar.close()

    # 拼接出解压目录的绝对路径
    dest = app_fname.split('/')[-1]
    dest = dest.replace('.tar.gz', '')
    dest = os.path.join(deploy_dir, dest)

    # 创建链接
    link = '/var/www/html/nsd1905'
    if os.path.exists(link):  # 如果链接文件已存在,先删除它
        os.remove(link)
    os.symlink(dest, link)


if __name__ == '__main__':
    # 没有新版本软件,则退出
    ver_fname = '/var/www/deploy/live_ver'
    ver_url = 'http://192.168.4.6/deploy/live_ver'
    if not has_new_ver(ver_fname, ver_url):
        print('未发现新版本。')
        exit(1)

    # 下载新版本软件包
    r = requests.get(ver_url)
    ver = r.text.strip()  # 去除文件结尾的\n
    app_url = 'http://192.168.4.6/deploy/pkgs/website-%s.tar.gz' % ver
    download_dir = '/var/www/download'
    wget.download(app_url, download_dir)

    # 校验软件包是否完好,软件包已损坏的话,删除损坏的包,退出
    md5_url = app_url + '.md5'
    app_fname = app_url.split('/')[-1]
    app_fname = os.path.join(download_dir, app_fname)
    if not check_app(app_fname, md5_url):
        os.remove(app_fname)
        print('文件已损坏。')
        exit(2)

    # 部署软件包
    deploy_dir = '/var/www/deploy'
    deploy(app_fname, deploy_dir)

    # 更新本地软件版本文件
    if os.path.exists(ver_fname):
        os.remove(ver_fname)
    wget.download(ver_url, ver_fname)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值