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工程-------执行自动部署脚本即可