轻松部署Jenkins+harbor+gitlab实现docker的CICD


总述

需求:
利用Jenkins+gitlab实现代码自动上线,自动部署服务到应用服务器

难点:

如何把新构建镜像自动拉取到应用服务器并自动部署容器?


一、环境

流程:

服务器列表
提示:Jenkins、harbor、应用测试主机安装docker19.03.10。

角色 主机名 IP 软件
持续集成 jenkins 192.168.42.4 git、jenkins-2.222
代码托管 git 192.168.42.5 gitlab-ce-10.2.2
harbor harbor 192.168.42.6 harbor、docker-compose 1.18.0
应用测试 app 192.168.42.3 运行centos7容器

基础环境搭建:

1)所有服务器关闭防火墙、安全策略
systemctl stop firewalld
setenforce 0

2)ssh互信
jenkins主机操作:必须能在所有其他主机登录, git、 harbor、app
ssh-keygen -t rsa
mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
scp -r /root/.ssh/ 192.168.42.5:/root
scp -r /root/.ssh/ 192.168.42.6:/root
scp -r /root/.ssh/ 192.168.42.3:/root

git主机操作:仅需要与Jenkins做ssh互信
ssh-keygen -t rsa
mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
scp -r /root/.ssh/ 192.168.42.4:/root

Git的web需要重新添加key

二、步骤

1、安装harbor

1)解压

将harbor包解压到/usr/local/下

tar -zxf harbor-offline-installer-v1.7.4.tgz -C /usr/local/

2)修改配置文件

vim habor/harbor.yml

hostname: 192.168.42.1
修改域名(由于没有做DNS,所以写IP地址)

3)安装docker-compse工具

重命名
mv docker-compose-Linux-x86_64 docker-compose

移动至系统默认搜索路径
mv docker-compose /usr/local/bin/

增加执行权
chmod +x /usr/local/bin/docker-compose

查看依赖包有无安装
rpm -q yum-utils device-mapper-persistent-data lvm2

4)安装harbor

cd /usr/local/harbor
./install.sh

启动harbor,必须在 /usr/local/harbor目录(因为需要调用此目录的yaml文件)

docker-compose start

5)创建管理用户zhangsan并加入项目仓库web
在这里插入图片描述
在这里插入图片描述

2、安装gitlab
详见Git搭建与基础用法
启动
gitlab-ctl start

3、安装Jenkins
详见Jenkins部署及操作

无需创建jenkins的项目目录(创建项目,执行build,会自动在下面路径生成目录)

/var/lib/jenkins/workspace/web
和Jenkins的item name名称一样(这也是脚本会从git下载的代码存到哪的目录)
在这里插入图片描述
Jenkins手动构建,手动测试脚本

注意:Jenkins、harbor、APP服务器均需要修改docker配置文件,否则,没有权限使用harbor。

1)修改docker配置文件

vim /usr/lib/systemd/system/docker.service
在这里插入图片描述
重启docker
systemctl daemon reload
systemctl restart docker

2)创建脚本

vim /root/auto.sh

#!/bin/bash
WORKDIR=/var/lib/jenkins/workspace/web/
WEB_DIR=/root
cangkuIP=192.168.42.6
#PORT=100
IP=192.168.42.3
TIME=`date +%F-%H-%M-%S`
cd $WORKDIR && tar zcf /tmp/web-${TIME}.tar.gz ./*
scp -rp /tmp/web-${TIME}.tar.gz $cangkuIP:$WEB_DIR
ssh root@$cangkuIP "cd $WEB_DIR && tar xf web-${TIME}.tar.gz"
ssh root@$cangkuIP "cd $WEB_DIR && docker build -t web ."
ssh root@$cangkuIP "cd $WEB_DIR && docker login -u zhangsan -p Harbor12345 192.168.42.6"
ssh root@$cangkuIP "cd $WEB_DIR && docker tag web 192.168.42.6/web/web"
ssh root@$cangkuIP "cd $WEB_DIR && docker push 192.168.42.6/web/web"
ssh root@$IP "cd $WEB_DIR && docker pull 192.168.42.6/web/web"
ssh root@$IP "cd $WEB_DIR && docker tag 192.168.42.6/web/web web"
ssh root@$IP "docker run -dit web /bin/bash"

赋予执行权:
chmod +x /root/auto.sh

3)验证:
查看harbor仓库是否自动上传镜像:
在这里插入图片描述
APP服务器自动运行容器:
在这里插入图片描述

4、关联脚本,自动上传

1)将脚本添加到Jenkins里(省略source code management、build triggers配置)
在这里插入图片描述

在这里插入图片描述
2)在gitlab关联Jenkins(添加钩子)
在这里插入图片描述

3)在gitlab上push代码,测试自动构建上传
在这里插入图片描述
vim /var/lib/jenkins/workspace/web/dockerfile

FROM centos:7
RUN echo 123456 > /tmp/a.txt
CMD /bin/bash

4)验证:
Jenkins无人工干预执行,实现持续交付、部署
在这里插入图片描述
也可看到过程,最后Finished: SUCCESS
在这里插入图片描述
查看APP服务器:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Friendsofthewind/article/details/121770685