网站的设计路线,做游戏用什么电脑系统下载网站好,百度付费推广的费用,涉县全员核酸检测目录 11、自由风格的CI操作#xff08;最终#xff09;Jenkins容器化实现方案修改 docker.sock 权限修改 Jenkins 启动命令后重启 Jenkins构建镜像推送到Harbor修改 daemon.json 文件Jenkins 删除构建后操作Jenkins 添加 shell 命令重新构建 Jenkins通知目标服务器拉取镜像目… 目录 11、自由风格的CI操作最终Jenkins容器化实现方案修改 docker.sock 权限修改 Jenkins 启动命令后重启 Jenkins构建镜像推送到Harbor修改 daemon.json 文件Jenkins 删除构建后操作Jenkins 添加 shell 命令重新构建 Jenkins通知目标服务器拉取镜像目标服务器修改 daemon.json 文件定义脚本文件Jenkins 添加端口号参数Jenkins 添加构建后操作重新构建工程 11、自由风格的CI操作最终 前面的架构存在的问题是若有多个目标服务器都需要使用该镜像那么每个目标服务 器都需要在本地构建镜像形成系统资源浪费。若能够在 Jenkins 中将镜像构建好并推送到 Harbor 镜像中心那么无论有多少目标服务器需要该镜像都只需要从 Harbor 拉取即可。
Jenkins容器化实现方案 如果想在Jenkins中构建镜像则需要Jenkins中有Docker引擎指的是Jenkins容器内有Docker因为我们的Jenkins是用docker起的可以在Jennkins内再安装docker但这种方式不太方便不好维护可以使用与宿主机共享Docker引擎。
修改 docker.sock 权限 /var/run/docker.sock 文件是 docker client 和 docker daemon 在本地进行通信的 socket 文件。默认的组为 docker且 other 用户不具有读写权限这样 Jenkins 是无法来操作该文 件的。 将其组调整为 root且为其分配读写权限 修改 Jenkins 启动命令后重启
首先强制删除正在运行的 Jenkins 容器。
[rootjenkins run]# docker rm -f jenkins
jenkins然后在 Jenkins 启动命令中新增/var/run/docker.sockdocker 命令文件/usr/bin/docker 及/etc/docker/daemon.json 文件为数据卷。 重启 Jenkins 容器。
[rootjenkins run]# docker run --name jenkins \--restart always \-p 8080:8080 \-p 50000:50000 \-v /var/jenkins_home:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker \-v /etc/docker/daemon.json:/etc/docker/daemon.json \ # 实现推送harbor时使用的http信任而不是https-d jenkins/jenkins:lts进入Jenkins容器查看是否可以使用docker了。 Jenkins构建镜像推送到Harbor 先把idea的compose.yml文件删除push到gitlab因为我们使用jenkins帮忙构建镜像然后推送到Harbor不需要到目标服务器进行本地制作镜像并启动容器。操作没截图自己记得删除
修改 daemon.json 文件 Jenkins 是 Harbor 的客户端需要修改/etc/docker/daemon.json 文件。修改后重启 Docker。
[rootjenkins ~]# vim /etc/docker/daemon.json
[rootjenkins ~]# cat /etc/docker/daemon.json
{insecure-registries: [192.168.40.138:8888 # harbor服务器所在的IP和端口]
}重启
[rootjenkins my_hellojenkins]# service docker restartJenkins 删除构建后操作 原来的 Jenkins 中配置的“构建后操作”完成的是将代码推送到目标服务器后让目标服务器通过 docker compose 完成镜像的构建与启动。但现在不需要了因为镜像构建任务要由 Jenkins 自己完成了。在 Jenkins 当前任务下的“配置”中删除。 Jenkins 添加 shell 命令 在 sonarqube 对代码质量检测完毕后再添加一个“构建步骤”。这个构建步骤通过 shell 命令方式完成。 mv target/*.jar docker/
cd docker
docker build -t hellojenkins .
docker login -u admin -p Harbor12345 192.168.40.138:8888
docker tag hellojenkins 192.168.40.138:8888/jks/hellojenkins
docker image prune -f
docker push 192.168.40.138:8888/jks/hellojenkins重新构建 Jenkins 中在返回的任务首页中再次执行立即构建。构建成功后在 Jenkins 主机中可以查看到构建好的镜像与重新tag 过的镜像。 在 harbor 的仓库中也可以看到推送来的镜像。 Jenkins通知目标服务器拉取镜像
目标服务器修改 daemon.json 文件 目标服务器是 Harbor 的客户端需要修改/etc/docker/daemon.json 文件。修改后重启 Docker。 定义脚本文件 在目标服务器 PATH 路径下的任意目录中定义一个脚本文件 deploy.sh。例如定义在/usr/local/bin目录下。然后再为其赋予可执行权限。这样该 deploy.sh命令就可以在任意目录下运行了。
文件内容如下
#!/bin/bash
#harbor的IP地址和端口
harbor_addr_port$1
#harbor的项目名
harbor_proj$2
#harbor里的镜像名
image_repo$3
#标签
image_tag$4
#容器内部端口
app_port$5
#宿主机端口
export_port$6
#镜像名
image$harbor_addr_port/$harbor_proj/$image_repo:$image_tag
#如果容器已经存在就删除容器
exist_container_iddocker ps -a | grep $image_repo | awk {print $1}
if [ -n $exist_container_id ];thendocker stop $exist_container_iddocker rm $exist_container_id
fi
#判断tag是否存在如果存在就删除然后拉取最新镜像
exist_image_tagdocker images | grep $harbor_addr_port/$harbor_proj/$image_repo | awk {print $2}
if [[ $exist_image_tag ~ $image_tag ]]; thendocker rmi -f $image
fi
docker login -u admin -p Harbor12345 $harbor_addr_port
docker pull $image
docker run --name $image_repo -d -p $export_port:$app_port $image
echo SUCCESS授予可执行权限
[roottarget bin]# chmod x deploy.sh 执行脚本后可以看到 修改idea代码 再次构建构建完成之后执行脚本 浏览器查看 Jenkins 添加端口号参数 Jenkins 添加构建后操作
还是在 Jenkins 当前任务下的“配置”中为任务添加构建后操作 重新构建工程 这次重新构建可以看到出现了 export_port 的文本框。在这里可以修改容器对外暴露的端口号。 构建成功后可以看到目标服务器中增加了新的镜像该镜像是从 harbor 拉取的还可以看到该镜像的容器也已经启动。 浏览器访问没有问题