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

Posted Friends of the wind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了轻松部署Jenkins+harbor+gitlab实现docker的CICD相关的知识,希望对你有一定的参考价值。


总述

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

难点:

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


一、环境

流程:

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

角色主机名IP软件
持续集成jenkins192.168.42.4git、jenkins-2.222
代码托管git192.168.42.5gitlab-ce-10.2.2
harborharbor192.168.42.6harbor、docker-compose 1.18.0
应用测试app192.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服务器:

以上是关于轻松部署Jenkins+harbor+gitlab实现docker的CICD的主要内容,如果未能解决你的问题,请参考以下文章

jenkins+gitlab+harbor部署CICD

Docker+Harbor+Jenkins+Gitlab自动化CICD构建

Jenkins + Gitlab + harbor + Kubernetes实现CI/CD

Jenkins + Gitlab + harbor + Kubernetes实现CI/CD

Gitlab+Harbor+Jenkins pipeline实现利用tag部署docker容器

jenkins+docker+gitlab+harbor+pipeline快速部署发版流程