云计算之gitlab+jenkins持续集成持续开发

开发运维一体化,网站软件等都在不断的更新升级,没个新版本的出现就意味着要部署新的环境,替换老的环境,如果这一步不能实现自动化,那么工作会非常繁忙,在此,结合公司需求,搭建了gitlab+jenkins实现持续开发持续集成。

步骤1:部署开发人员写的代码到代码管理服务器

代码管理平台还是比较多的,如github,gitlab 和 svn,github是存储在国外网站平台上,上传下载都需要带宽,每天都要上传下载,使用不划算,所以可以选择gitlab或者svn,此处使用gitlab做本地代码管理服务器。

1) 配置git

 yum -y install git

git –version        #查看版本

git config --global user.name "MX-Steve"

git config --global user.email "[email protected]"

git config --global core.editor vim

mkdir /devops

cd devops/

echo 'print("hello world!")' > hello.py

git init #初始化本地仓库信息

git status #查看仓库里文件状态

git add hello.py

git commit -m "hello.py"

2) 自建gitlab服务器

网上下载gitlab中文版软件包,此处将gitlab搭建在docker上

docker load < /path/to/gitlab_zh.tar

docker run -d -h gitlab --name gitlab -p 443:443 -p 80:80 -p 22:22 --restart always -v /srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /srv/gitlab/data gitlab_zh:latest

注意:物理机的443,80和22端口供docker容器gitlab使用,物理机地址为192.168.1.200

浏览器打开http://192.168.1.200,创建工作组devops,根据开发人员名称创建用户,创建项目,并将用户加入到项目中,此处管理员root,密码12345678

将gitlab容器中生成的秘钥导入到gitlab网页中

git remote add origin [email protected]::devops/core_py.git

git push origin master # 可以将本地git与gitlab代码管理服务器管理上传即成功

步骤2:安装配置使用jenkins,服务器ip地址为192.168.1.201,jenkins默认启动8080端口

yum -y install jenkins

systemctl start jenkins

systemctl enable jenkins

浏览器打开http://192.168.1.201:8080

cat /var/lib/Jenkins/secrets/initialAdminPassword

登录输入管理员秘钥

选择插件git安装,使用admin账户继续操作,在管理员->设置里面可以修改管理员密码

因为此处为非工作环境,因此使用wordpress作为开发人员写的软件,下载wordpress-4.8和wordpress-5.0两个版本,模拟项目开发过程中的软件升级操作

unzip wordpress-4.8-zh_CN.zip

cd wordpress/ 

git init

git add .

git commit -m "wordpress-1.0"

git tag v1.0

git push

第一个开发版本上传到gitlab中

cd ..

unzip wordpress-5.0-zh_CN.zip #将第一个版本覆盖掉

git add .

git commit -m "wordpress-2.0"

git tag v2.0

git push

第二个开发版本上传到gitlab中

在gitlab上创建远程仓库wordpress

步骤3:构建工程

新建任务=>选择自由风格=>添加Git Parameter参数=>源码管理采用git

1)源码采用git

2)将源码checkout到子目录

构建工程,构建tag为v1.0的源码

1)构建工程

2)选择指定的标签

检验结果

1)选择指定标签

2)查看日志输出

3)查看本地结果,构建好的项目出现在/var/lib/jinkens目录下

修改构建工程,编写插入shell脚步,实现自动部署

创建版本文件,便于区分当前版本与上一个版本,有利于版本回滚

步骤4:发布应用

vim deploy_web.py

import requests

import os

import hashlib

import tarfile

from urllib import request

#使用url进行get请求,获取网站文本信息,获取当前版本

def get_webdata(url):

r = requests.get(url)

return r.text

#将网址内容下载到fname文件中

def download(url, fname):

html = request.urlopen(url)

with open(fname, 'wb') as fobj:

while True:

data = html.read(1024)

if not data:

break

fobj.write(data)

#检查文件MD5值

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 deploy(app): # /var/www/packages/myproject_2.0.tar.gz

#切换路径到/var/www/packages路径下

os.chdir('/var/www/packages')

#解压缩myproject_2.0.tar.gz文件

tar = tarfile.open(app, 'r:gz')

tar.extractall()

tar.close()

#将.tar.gz替换成空字符串

src = app.replace('.tar.gz', '')

#创建/var/www/html/mysite软链接

dst = '/var/www/html/mysite'

if os.path.exists(dst):    #如果文件存在

os.unlink(dst)            #删除

os.symlink(src, dst)        #否则创建软链接

if __name__ == '__main__':

#调用get_webdata()函数,目的是以发布服务器'http://192.168.1.201/live_version'网址为参数获取当前版本,ver结果为2.0

ver = get_webdata('http://192.168.1.201/live_version').strip()

app_name = 'myproject_%s.tar.gz' % ver

#app_url为下载myproject_2.0.tar.gz文件网址

app_url = 'http://192.168.1.201/packages/' + app_name

#目标文件

app_path = os.path.join('/var/www/packages', app_name)

#调用download()函数,目的是从app_url网址读取数据存入目标文件

download(app_url, app_path)

#调用check_md5()函数,目的是计算目标文件MD5值

local_md5 = check_md5(app_path)

#调用get_webdata()函数,目的从发布服务器网址获取md5值

remote_md5 = get_webdata(app_url + '.md5').strip()

#如果目标文件md5值和发布服务器提供的md5值相等,确认下载的文件无误,调用deploy()函数,以目标文件作为参数进行部署

if local_md5 == remote_md5:

deploy(app_path)

步骤5:配合周期性计划任务实现自动运维

猜你喜欢

转载自blog.csdn.net/mx_steve/article/details/85616250