day 15 jenkins 信息获取

import requests
import os
import hashlib
import tarfile
from urllib.request import urlopen

def get_pack_name(version):
    '返回下载的软件包url'
    version_url = 'http://192.168.122.17/deploy/%s_version' % version
    r = requests.get(version_url)
    ver = r.text.strip()
    url = 'http://192.168.122.17/deploy/packages/wordpress-%s.tar.gz' % ver
    return url

def check_md5(fname):
    m = hashlib.md5()

    with open(fname, 'rb') as fobj:
        while True:
            data = fobj.read(4096)
            if not data:
                break
            m.update(data)

    return m.hexdigest()


def download(url):
    '下载软件包,返回软件包的绝对路径'
    html = urlopen(url)
    fname = url.split('/')[-1]
    fname = os.path.join('/var/tmp', fname)

    with open(fname, 'wb') as fobj:
        while True:
            data = html.read(4096)
            if not data:
                break
            fobj.write(data)
    html.close()

    return fname


def check_package(fname):
    '校验软件包是否完好,没问题返回True,否则返回False'
    local_md5 = check_md5(fname)
    local_name = os.path.basename(fname)
    url = 'http://192.168.122.17/deploy/packages/' + local_name + '.md5'
    r = requests.get(url)
    remote_md5 = r.text.strip()
    if local_md5 == remote_md5:
        return True

    return False

def deploy(fname):
    '将下载的软件包部署到web服务器'
    web_root = '/var/www'
    os.chdir(web_root)
    tar = tarfile.open(fname, 'r:gz')
    tar.extractall()
    tar.close()
    dst_fname = fname.replace('.tar.gz', '')
    dst_fname = os.path.basename(dst_fname)
    dst_fname = os.path.join(web_root, dst_fname)
    link = '/var/www/html/wordpress'
    if os.path.islink(link):
        os.unlink(link)
    os.symlink(dst_fname, '/var/www/html/wordpress')

if __name__ == '__main__':
    prompt = """(0) 最新版本
(1) 上一个版本
请选择(0/1):"""
    choice = input(prompt)
    if choice == '0':
        version = 'live'
    elif choice == '1':
        version = 'last'
    url = get_pack_name(version)
    fname = download(url)
    fileok = check_package(fname)
    if fileok:
        deploy(fname)
    else:
        print('下载的文件已损坏,请重新下载')

猜你喜欢

转载自blog.csdn.net/weixin_40447206/article/details/81319196