基于Docker+Jenkins+Gitlab搭建持续集成环境

基于Docker+Jenkins+Gitlab搭建持续集成环境

  • 随着DevOps理念和敏捷理念的发展,我们希望通过自动化技术,加快项目的迭代。尤其是当使用微服务方案后,面临在大量的项目构建和部署工作,借助于jenkins的持续集成,可以快速把应用打包成docker镜像,实现自动部署。
    在这里插入图片描述
    如图演示了以下的场景:
  • 开发者向自己的gitlab网站提交了代码;
  • jenkins通过定时任务检测到了代码有变化,执行自动化构建过程;
  • jenkins在自动化构建脚本中调用docker命令将构建好的镜像push 到私有仓库;
  • 同时,jenkins也可以直接执行remote shell启动构建好的容器;
  • 构建失败或者成功,可以及时将结果推送给相关人员,比如测试人员,安排测试;
  • 服务端可以手动通过docker命令,从镜像仓库中心拉取镜像,进行手动部署。

实验环境

主机名(IP)服务
server1(172.25.11.1)gitlab
server2(172.25.11.2)jenkins+docker

server1虚拟机内存需要3G,server2虚拟机内存需要2G
在进行此实验之前两台虚拟机需要分别做好各自的环境。
我这里的仓库是本地仓库 私有的,以下是操作步骤:

实验过程

server1(gitlab)
  • 在/root/demo目录下写dockerfile如下(多层构建):
[root@server1 demo]# vim Dockerfile

# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ARG Asia/Shanghai     #修改时区

RUN mkdir -p /opt/var/cache/nginx && \
    cp -a --parents /usr/lib/nginx /opt && \
    cp -a --parents /usr/share/nginx /opt && \
    cp -a --parents /var/log/nginx /opt && \
    cp -aL --parents /var/run /opt && \
    cp -a --parents /etc/nginx /opt && \
    cp -a --parents /etc/passwd /opt && \
    cp -a --parents /etc/group /opt && \
    cp -a --parents /usr/sbin/nginx /opt && \
    cp -a --parents /usr/sbin/nginx-debug /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpcre.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libc.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libdl.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpthread.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libcrypt.so.* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \
    cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtime

FROM gcr.io/distroless/base
COPY --from=base /opt /

COPY index.html  /usr/share/nginx/html/index.html     #访问容器时会看到index.html中的内容
EXPOSE 80 443

ENTRYPOINT ["nginx", "-g", "daemon off;"]
server2(jenkins+docker)
  • 1.首先在浏览器中安装docker的插件:倒数第二个dockerbees docker build and publish
    在这里插入图片描述
    在这里插入图片描述
  • 下载docker 开启服务。
    下载并导入三个镜像 nginx.tar,distroless.tar,registry2.tar
[root@server2 ~]# docker load -i registry2.tar   #本地仓库
[root@server2 ~]# docker load -i nginx.tar   
[root@server2 ~]# docker load -i distroless.tar
  • 3.搭建docker的私有仓库,运行仓库的容器,将端口映射为5000。
[root@server2 ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry:2 
[root@server2 ~]# docker ps -a
[root@server2 ~]# netstat -antlp   查看5000端口有没有开启

[root@server2 gitlab]# curl http://localhost:5000/v2/_catalog
{"repositories":["nginx"]}

这样就可以在本机运行一个私有仓库。

  • 4.给用户授权,否则后面会报错:
[root@server2 run]# vim /etc/sudoers
jenkins ALL=(ALL)       NOPASSWD: ALL
  • 5.修改sock文件权限为666:
chmod 666 /var/run/docker.sock
  • 6.浏览器中构建环境:
修改仓库名:nginx
tag:取变量
docker host url:本机docker文件的路径:unix:///var/run/docker.sock
docker registry url:http://localhost:5000
不强制拉取

在这里插入图片描述
在这里插入图片描述

server1
  • 修改index.html
[root@server1 demo]# vim index.html
zhangyiwen
!!
[root@server1 demo]# git add Dockerfile
[root@server1 demo]# git commit -m "add dockerfile"
[root@server1 demo]# git push -u origin master
  • 浏览器:控制台查看状态
    在这里插入图片描述
    在这里插入图片描述

  • 新建一个任务,选择第一个构建一个自由风格的软件项目 dockertest。
    在这里插入图片描述

  • 构建触发器 其他工程构建后触发 选择之前已经新建的gitlab任务
    在这里插入图片描述

  • 保证80端口没有被占用。
    构建执行shell,命令为:

sudo docker ps | grep webserver && sudo docker rm -f webserver
sudo docker run -d --name webserver -p 80:80 localhost:5000/nginx
根据返回值判断有没有此容器 有的话删除,再运行 

在这里插入图片描述

测试
  • 浏览器访问172.25.11.2 ,此时访问不到,因为gitlab没有修改,所以没有触发dockertest。
  • 在server1修改index.html文件
[root@server1 demo]# git add index.html
[root@server1 demo]# git commit -m "v3"
[root@server1 demo]# git push -u origin master
  • 修改后重新推送至暂存区 提交 再在浏览器中访问 。
    在这里插入图片描述
  • 如上所示,此时我们就实现了开发人员提交dockerfile代码,而我们自动的将镜像进行构建并运行容器的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值