Jenkins集成Harbor


1、Harbor介绍

前面在部署项目时,我们主要采用Jenkins推送jar包到指定服务器,再通过脚本命令让目标服务器对当前jar进行部署,这种方式在项目较多时,每个目标服务器都需要将jar包制作成自定义镜像再通过docker进行启动,重复操作比较多,会降低项目部署时间。

我们可以通过Harbor作为私有的Docker镜像仓库。让Jenkins统一将项目打包并制作成Docker镜像发布到Harbor仓库中,只需要通知目标服务,让目标服务统一去Harbor仓库上拉取镜像并在本地部署即可。

Docker官方提供了Registry镜像仓库,但是Registry的功能相对简陋。Harbor是VMware公司提供的一款镜像仓库,提供了权限控制、分布式发布、强大的安全扫描与审查机制等功能


2、Harbor安装

这里采用原生的方式安装Harbor。

下载Harbor安装包:https://github.com/goharbor/harbor/releases/download/v2.11.2/harbor-offline-installer-v2.11.2.tgz

上传到Linux服务器并解压:

tar -zxvf harbor-offline-installer-v2.11.2.tgz -C /usr/local/

修改Harbor配置文件:

首先复制一份harbor.yml配置

cp harbor.yml.tmpl harbor.yml

编辑harbor.yml配置文件

配置Harbor文件

启动Harbor

./install.sh
查看日志

登录Harbor

登录Harbor

首页信息

首页信息

3、Harbor使用方式

Harbor作为镜像仓库,主要的交互方式就是将镜像上传到Harbor上,以及从Harbor上下载指定镜像

在传输镜像前,可以先使用Harbor提供的权限管理,将项目设置为私有项目,并对不同用户设置不同角色,从而更方便管理镜像。


1_添加用户构建项目

创建用户

创建用户

构建项目(设置为私有)

构建项目

给项目追加用户

追加用户管理

切换测试用户

切换测试用户

2_发布镜像到Harbor

修改镜像名称,名称要求:harbor地址/项目名/镜像名:版本

修改镜像名称

修改daemon.json,支持Docker仓库,并重启Docker

修改daemon.json,支持Docker仓库

设置登录仓库信息

docker login -u 用户名 -p 密码 Harbor地址

推送镜像到Harbor

推送镜像到Harbor

3_从Harbor拉取镜像

跟传统方式一样,不过需要先配置/etc/docker/daemon.json文件

{
    "insecure-registries": [
        "192.168.150.117:80"
    ]
}

为了避免以后Jenkins使用HTTPS,最好指定80端口(这里不是Jnekins使用就不指定了)

拉取镜像

4、Jenkins集成

接下来让Jenkins集成Harbor实现远程服务器自动从私有仓库拉取镜像并部署容器的操作


1_Jenkins容器使用宿主机Docker

构建镜像和发布镜像到harbor都需要使用到docker命令,而在Jenkins容器内部安装Docker官方推荐直接采用宿主机带的Docker即可

设置Jenkins容器使用宿主机Docker,先设置宿主机docker.sock权限:

sudo chown root:root /var/run/docker.sock
sudo chmod o+rw /var/run/docker.sock

添加数据卷,将docker执行的相关文件映射进来

version: "3.1"
services:
  jenkins:
    image: jenkins/jenkins
    container_name: jenkins
    ports:
      - 8080:8080
      - 50000:50000
    volumes:
      - ./data/:/var/jenkins_home/
      - /usr/bin/docker:/usr/bin/docker
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/docker/daemon.json:/etc/docker/daemon.json

2_添加构建操作

将自定义镜像构建后推送到Harbor服务器中

制作自定义镜像

如果不指定80端口,Jenkins会使用HTTPS的443端口,所以需要补上

mv target/*.jar docker/
docker build -t ${JOB_NAME}:$tag docker/
docker login -u admin -p Harbor12345 192.168.150.117:80
docker tag ${JOB_NAME}:$tag 192.168.150.117:80/repo/${JOB_NAME}:$tag
docker push 192.168.150.117:80/repo/${JOB_NAME}:$tag
docker image prune -f

执行Jenkins自由风格Build,查看结果

最终可以看到镜像推送成功

3_编写部署脚本

部署项目需要通过Publish Over SSH插件,让目标服务器执行命令。

为了方便一次性实现拉取镜像和启动的命令,推荐采用脚本文件的方式。

添加脚本文件到目标服务器,再通过Publish Over SSH插件让目标服务器执行脚本即可。

编写脚本文件,添加到目标服务器

harbor_url=$1
harbor_project_name=$2
project_name=$3
tag=$4
host_port=$5
container_port=$6


imageName=$harbor_url/$harbor_project_name/$project_name:$tag

containerId=`docker ps -a | grep ${project_name} | awk '{print $1}'`
if [ "$containerId" != "" ] ; then
    docker stop $containerId
    docker rm $containerId
    echo "Delete Container Success"
fi

imageId=`docker images | grep ${project_name} | awk '{print $3}'`

if [ "$imageId" != "" ] ; then
    docker rmi -f $imageId
    echo "Delete Image Success"
fi

docker login -u DevOps -p Harbor12345 $harbor_url

docker pull $imageName

docker run -d -p $host_port:$container_port --name $project_name $imageName

echo "Start Container Success"
echo $project_name

并设置权限为可执行

chmod a+x /usr/local/bin/deploy.sh

文件需要放到PATH环境变量目录下

如图

4_配置构建后操作

添加新的构建后操作,使其在远程服务器上部署项目

执行脚本文件
在这里插入图片描述

执行命令内容如下:

deploy.sh 192.168.150.117:80 repo ${JOB_NAME} $tag $host_port $container_port

远程部署项目

构建项目并查看结果

完毕,集成成功!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

duration~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值