Centos7.4部署Jenkins,利用Python实现Gitlab,Jenkins的联用,版本的发布和回滚

Gitlab服务器,前面的一篇博客中,已经部署完毕。在Gitlab服务器上,有myproject这样一个项目,里面有一个index.html文件,分别是版本1.0和2.0.本文的目标是,Jenkins服务器可以根据Gitlab的tags,分别构建和发布不同版本的index.html文件下去。然后通过Python脚本,实现程序的自动化部署,升级和回滚。

一、安装Jenkins,官网下载到稳定版本的2.176版本。

rpm -ivh jenkins-2.176.3-1.1.noarch.rpm

二、由于Jenkins的服务依赖于Java-jdk,所以安装依赖。

yum -y install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64

systemctl restart Jenkins

systemctl enable jenkins

三、Jenkins的默认端口是8080,访问之,然后修改密码,安装插件git,git parameter

修改密码后,登录名为admin,密码为修改后的密码

Manage Jenkins-----Manage Plugins管理插件,在已安装处,如果有所需的插件即可

四、构建项目

1、新建任务

输入任务的名称,选择自由风格

启用git parameter 参数名为mpver,参数的类型为分支或者标签。

代码管理选择git,路径使用http协议的路径,指定的分支使用变量获得tags

指定构建工程后,生成的子目录

Jenkins服务器安装httpd服务,用于分发代码,把默认的路径改为/var/www/deploy

chown -R jenkins:jenkins /var/www/deploy

构建中执行shell

这里命令的含义是

定义发布路径

复制构建后的项目的目录到发布路径下

删除发布路径下构建项目路径下的git隐藏文件

切换到发布路径下

打包项目

删除项目的目录

计算项目包的md5值,然后传递给md5值文件

最后应用,保存。

然后build项目即可。

根据tags选择版本,开始构建。

文件已经生成。那么接下来。我们还需要构建多一个工程,用于发布版本信息的。作用在于让python脚本判断

新建任务,名称live_version,使用自由风格

参数类型使用字符串类型

构建中执行shell命令

定义live_version

定义last_version

判断,如果当前版本文件存在,那么就把当前文件的内容,写入到上个版本文件

把版本变量,写入当前版本文件

build工程,输入当前版本号码。构建

当前版本文件已经放到了发布目录下了。

编写Python脚本,实现所有web服务器,从jenkins服务器的发布目录,拉取最新版本,进行更新

代码如下:

#!/usr/bin/env python3
'''功能函数:
1、获取版本信息
2、利用版本信息,获取最新的软件包
3、获取最新软件包的MD5值
4、计算已获取的最新的软件包的MD5值
5、如果MD5值一致,解压软件包
6、从软件包目录中,制作软连接到本地的web目录。这样可以实现版本回滚的效果。'''
import os
import requests
import hashlib
import tarfile
from urllib import request

def get_info(url):
    r = requests.get(url)
    ver = r.text.strip()
    return ver

def download(url, fname):
    r = request.urlopen(url)
    with open(fname, 'wb') as fobj:
        while True:
            data = r.read(1024)
            if not data:
                break
            fobj.write(data)

def check_md5(fname):
    m = hashlib.md5()
    with open(fname, 'rb') as fobj:
        while True:
            data = fobj.read(1024)
            if not data:
                break
            m.update(data)
    return m.hexdigest()

def deploy(file_path, fname):
    tar = tarfile.open(file_path, 'r:gz')
    tar.extractall(path='/packages')
    dir_name = fname.replace('.tar.gz', '')
    src = os.path.join('/packages/', dir_name)
    dest = '/var/www/html/mysite'
    if os.path.exists(dest):
        os.unlink(dest)
    os.symlink(src, dest)

if __name__ == '__main__':
    ver_url = 'http://192.168.122.2/live_version'
    version = get_info(ver_url)
    live_file = 'myproject_%s.tar.gz' % version
    local_file = '/packages/%s' % live_file
    file_url = 'http://192.168.122.2/%s' % live_file
    download(file_url, local_file)
    md5_url = 'http://192.168.122.2/%s.md5' % live_file
    live_md5 = get_info(md5_url)
    local_md5 = check_md5(local_file)
    if live_md5 == local_md5:
        deploy(local_file, live_file)

效果1:

我们现在在jenkins上构建版本2.0

运行自动部署脚本

工作的流程参考python脚本

获取版本号,下载最新版本的文件,解压文件,判断软连接是否存在,如果存在,取消。把最新版本文件解压出来的目录,软连接到web目录。达到更新的目的。

这里假设2.0版本出问题了。我们想回滚到1.0版本。这样操作

jenkins构建1.0工程-------执行自动部署脚本即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值