docker+jenkins+gitlab构建可持续发布架构

Docker+Jenkins+Gitlab构建可持续发布架构

本文主要介绍利用docker+jenkins+gitlab构建可持续发布python的架构,jenkins,gitlab并没有使用传统安装方法,全部为容器运行。docker的安装这里就不再赘述了,可以参考docker官方文档

gitlab安装

首先我们要有一个代码库统一管理代码,个人比较喜欢git,所以使用gitlab去管理。怎么利用docker安装gitlab呢。其实很简单啦!

  • 下载镜像
docker pull gitlab/gitlab-ce
  • 运行容器
    由于容器销毁之后容器内容就丢失了,而你不想你的代码在gitlab消失之后也随之烟消云散吧,所以就需要挂载存储到容器,以持久化存储些配置、数据等,这里我们使用最简单的本地卷。
    在本地创建存放配置,数据,log的文件。
 mkdir -p /chenxf/gitlab/config
 mkdir -p /chenxf/gitlab/logs
 mkdir -p /chenxf/gitlab/data
sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 4431:443 --publish 8090:80 --publish 223:22 \
    --name gitlab \
    --restart always \
    --volume /chenxf/gitlab/config:/etc/gitlab \
    --volume /chenxf/gitlab/logs:/var/log/gitlab \
    --volume /chenxf/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest
docker logs -f gitlab

查看容器日志,运行成功,就可以http://ip:8090登录了,初始会设置初始密码,登录进去之后就可以创建项目了。

  • 创建代码库
    gitlab有丰富的权限管理,可以不同用户,不同用户组对代码不同权限,这里就不多解释了。直接使用我们初始化的管理员账号来操作。
    docker+jenkins+gitlab构建可持续发布架构_第1张图片
    • 推送代码到代码库
      在本地项目根目录git init初始化git 仓库,然后git add . ,git commit提交到本地仓库,对了,如果你有些文件不想提交到git上怎么办,创建个.gitignore文件,将你不希望提交的文件写进去即可。
      添加远程仓库git remote add db http://10.15.1.33:8090/root/myproject.git这里仓库地址就是我们刚刚复制的地址,对了!,因为gitlab默认端口为80,而我在运行容器时做了映射,所以这里要加上端口号,不然可是连接不上我们的git的。
      最后推送到gitlab上git add db master然后输入用户名密码即可。登录gitlab查看代码仓库,可以看到代码推送过来了。
      docker+jenkins+gitlab构建可持续发布架构_第2张图片

运行jenkins

jenkins同样我们利用docker来运行:
拉取镜像

docker pull jenkins/jenkins:lts

接下来该做啥了?运行容器?wait on,这里我们先停下,思考一个问题,
怎么在jenkins容器里使用docker命令去build镜像,推送镜像,运行容器呢??
哦,你可能会说,那简单,在jenkins里安装个docker不就完了么???好吧,这个也是我考虑过的,可是这个方法也太那啥了吧,而且官方也不推荐运行docker in docker的方式,这里我们换个思路,可以用 ssh解决?的确可以,但是,等等。我们有万能的python啊。为什么不能用python调用我们要部署的远程主机上的docker呢??这样只要运行python脚本就好了啊,啊哈哈,这倒是个好方法哈,ok,想好就干。
首先在主机上开放docker远程端口,因为我这是内网环境所以可以这样搞,要是外网环境可就得多想想了,这样等同于把你主机暴露在外了(连密码都不需要!!)
怎么利用python调用docker呢,官方已经有API给我们使用了。
我们只需要安装个库:

pip install docker

开放docker端口:

vim /etc/docker/daemon.json

添加如下json:
这里写图片描述
重启docker:

systemctl daemon-reload
systemctl restart docker

现在我们试下:

[root@chenxf ~]#python
>>>import docker
>>>client = docker.DockerClient("tcp://10.15.1.33:2376")
>>>client.containers.list()
>>>[, 897d64703b>]

说明ok了,接下来该做什么?那么我们得有个build.py脚本去build镜像,运行容器。
现在开始编写脚本:

import docker
container_name = 'myproject' #容器名
image_name = 'myproject:v1'#镜像名
port = {'8005/tcp': 8008}#要暴露的端口 -p 8008:8005
client = docker.DockerClient('tcp://10.15.1.33:2376')
myproject_container_id = client.containers.list(all=True, filters={'name':container_name})
for container in myproject_container_id: #先把以前的容器删除如果有
    container.remove(force=True)
client.images.build(path='./', tag=image_name)# build镜像,成功后你也可以推送到镜像仓库
client.containers.run(image=image_name, name=container_name, ports=port, detach=True)#运行镜像

我们刚刚拉下来的jenkins镜像里可没有docker库,所以我们要在jenkins镜像基础之上构建一个含有docker库的新镜像。下面是我的Dockerfile:

FROM jenkins/jenkins:lts
MAINTAINER chenxf@chinaskycloud.com
USER 0 # 使用root用户不然没法进行下面操作。
RUN echo deb http://mirrors.163.com/debian/ jessie main non-free contrib \
deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib \
deb http://mirrors.163.com/debian/ jessie-backports main non-free contrib \
deb-src http://mirrors.163.com/debian/ jessie main non-free contrib \
deb-src http://mirrors.163.com/debian/ jessie-updates main non-free contrib \
deb-src http://mirrors.163.com/debian/ jessie-backports main non-free contrib \
deb http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib \
deb-src http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib > /etc/apt/sources.list && \
apt-get update  -y && apt-get install  -y python-pip && apt-get clean && pip install -i https://pypi.douban.com/simple docker

构建镜像:

docker build -t $IMAGENAME:$TAG .

好了,接下来就可以运行jenkins了。现在本地创建一个jenkins用户,
然后mkdir -p /opt/jenkins_home用来存放jenkins数据。将这个目录所属用户改为jenkinschown -lR jenkins /opt/jenkins_home
然后id jenkins得到jenkins用户id
运行jenkins:

docker run -d -v /opt/jenkins_home:/var/jenkins_home -p 8088:8080 \ 
-p 50002:50000   --name jenkins  -u $jenkinsId  $IMAGENAME:$TAG

然后查看日志,我们会看到一个jenkins密码这个复制下来接下来会有用:
初始启动需要点时间,耐心等待

docker logs -f jenkins

登录http://ip:8088/输入刚刚密码,创建用户密码配置插件等安装完插件就可以登录到主页了。
配置项目

  • 安装插件
    点击 Manage Jenkins,Manage Plugins,搜索Git Plugin插件安装。
  • 配置项目
    new 一个自由风格的project,填写项目,到配置界面,先配置git,
    地址是你的项目地址,branch选择master也可以填你想填的branch
    docker+jenkins+gitlab构建可持续发布架构_第3张图片
    点击添加 Credentials,这里我用username and password,你也可以用ssh方式,都行,填写用户名密码,点击save,选择我们刚刚添加的Credentials,如果没出错,就不会有提示信息,否则在界面会有提错信息。
    docker+jenkins+gitlab构建可持续发布架构_第4张图片
    配置build脚本,运行我们刚刚创建的脚本。
    docker+jenkins+gitlab构建可持续发布架构_第5张图片
  • Build
    save,点击build now即可看到build是否成功。
    docker+jenkins+gitlab构建可持续发布架构_第6张图片
    如果有多个项目需要构建,可以添加构建后执行操作,这样就能把整个项目串起来了。
    如果不成功怎么办,可以发送邮件,这个就不多说了,有需要的童鞋可以自己尝试下。

你可能感兴趣的:(软件开发)