云计算之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 "MX-Steve@163.com"

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 git@192.168.1.200::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:配合周期性计划任务实现自动运维

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.Docker入门    1.1 Docker为什么火    1.2 Docker是什么    1.3 为什么要使用Docker    1.4 Docker与虚拟化区别    1.5 Docker Engine    1.6 Docker 体系结构    1.7 Docker 应用场景2.Docker安装    2.1 安装Docker2.1.1 调整镜像源从国内获取2.1.2 调整docker数据存储位置    2.2 如何快速运行一个容器3.Docker镜像    3.1 什么是镜像?    3.2 镜像能干什么?    3.3 如何使用镜像运行容器    3.4 镜像的基本操作。搜索、下载、查看、导入、导出、删除、上传4.Docker容器    4.1 什么是容器    4.2 容器能运行什么    4.3 启动第一个容器    4.4 容器运行的参数含义    4.5 如何运行一个自启动的容器    4.6 容器暴露    4.7 容器的整个生命周期5.Docker数据管理    5.1 数据持久化介绍    5.2 数据持久化-Data Volume (db)    5.3 数据持久化-Bind Mounting  ( web )6.Docker镜像构建    6.1 如何将运行的容器打包成镜像    6.2 如何实现自动化构建镜像    6.3 Dockerfile介绍    6.4 Dockerfile语法    6.5 dockerfile构建-案例1    6.5 dockerfile构建-案例2    6.7 dockerfile构建-案例3    6.8 dockerfile构建-案例4 (搞清楚ENTRYPOINT与CMD之间的关系与区别)7.Docker私有仓库    7.1 什么是私有仓库    7.2 为什么要有私有仓库    7.3 私有仓库种类    7.2 搭建私有仓库registry     7.3 为registry添加basic认证    7.3 如何将本地镜像存放私有仓库    7.4 如何获取私有仓库的docker镜像    7.5 企业级私有仓库harbor https    7.6 实战a主机推送镜像至仓库,b主机拉取镜像启动为容器8.Docker网络    8.1 docker容器互联是什么?--link    8.2 docker容器互联项目实践( python )    8.3 docker网络模式 ( bridge、host、container、none )9.Docker单机编排    9.1 Compose基本介绍    9.2 Compose三大概念   project(services、volumes、networks)    9.3 Compose编排博客系统    9.4 Compose编排Python-web    9.5 Compose实现水平扩展    9.6 Compose实现负载均衡    9.7 Compose编排投票系统 (python、node、java、db、redis)10.Docker图形化与监控    10.1 docker图形工具 Portainer    10.2 docker监控工具 cAdvisor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值