文章目录
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
远程部署项目
构建项目并查看结果 |
---|
![]() |
![]() |
![]() |
完毕,集成成功!