8.Devops实战篇之——jenkins制作自定义镜像并推送、运行
Jenkins制作镜像,推送至目标服务器,并在目标服务器运行为容器。
目录
1.Jenkins容器内部使用docker
#让jenkins容器使用宿主机docker
#要实现要配置三个点
-
docker.sock的文件权限和所属
-
docker可执行文件
-
/etc/docker/daemon.json
[root@k8smaster run]# chown root:root /var/run/docker.sock
[root@k8smaster run]# chmod o+rw /var/run/docker.sock
[root@k8smaster run]# ls -l /var/run/docker.sock
srw-rw-rw- 1 root root 0 May 9 22:01 /var/run/docker.sock
#第一点ok
[root@k8smaster run]# vim /usr/local/docker/jenkins_docker/docker-compose.yml
volumes:
- /usr/local/docker/jenkins_docker/data/:/var/jenkins_home/
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /etc/docker/daemon.json:/etc/docker/daemon.json
#第二、三点ok
#最后重启jenkins容器验证即可
[root@k8smaster jenkins_docker]# docker compose up -d
[root@k8smaster jenkins_docker]# docker exec -it jenkins bash
jenkins@a64a7bb33ec7:/$ docker info | tail -n 7
Insecure Registries:
192.168.64.21:80
127.0.0.0/8
Registry Mirrors:
https://frtqcj69.mirror.aliyuncs.com/
Live Restore Enabled: false
2.jenkins制作镜像并推送到harbor
#可以删掉这个在目标服务器上构建镜像的步骤了,因为我们要用jenkins制作镜像
#增加构建步骤——执行shell
mv target/*.jar docker/
docker build -t mytest:$tag docker/
#构建后就可以看到v4.0.0的镜像,说明真的制作镜像ok了。(记得在Gitlab打v4.0.0的tag)
#执行shell部分添加内容,推送镜像到harbor
mv target/*.jar docker/
docker build -t mytest:$tag docker/
docker login -u admin -p Harbor12345 http://192.168.64.21:80
docker tag mytest:$tag 192.168.64.21:80/repo/mytest:$tag
docker push 192.168.64.21:80/repo/mytest:$tag
3.jenkins通知目标服务器拉取镜像并运行
#一、流程:
-
1.告知目标服务器拉取哪个镜像
-
2.判断当前服务器是否正在运行容器,需要删除
-
3.如果目标服务器已经存在当前镜像,需要删除
-
4.目标服务器拉取harbor上的镜像
-
5.将拉取下来的镜像运行成容器
#如果全让jenkins来做的话成本就会比较高,这里在目标服务器准备一个脚本,包括以上内容,再让jenkins通知目标服务器运行脚本即可。
#二、脚本需要知道哪些东西:
-
harbor地址/harbor仓库/镜像名:镜像版本
-
容器运行需要的端口号
harbor_addr=$1 harbor_repo=$2 project=$3 version=$4 port=$5
#这五个信息,会让jenkins给到目标服务器
[root@k8snode1 ~]# vim deploy.sh
#!/bin/bash
harbor_addr=$1
harbor_repo=$2
project=$3
version=$4
host_port=$5
container_port=$6
#完整的镜像名称
imagename=$harbor_addr/$harbor_repo/$project:$version
#判断容器是否正在运行
containerid=`docker ps -a | grep ${project} | awk '{print $1}'`
echo $containerid
#如果容器在运行就停止并删除容器
if [ "$containerid" != "" ];then
docker stop $containerid
docker rm $containerid
fi
#判断镜像是否存在,获取版本号
tag=`docker images | grep ${project} | awk '{print $2}'`
echo $tag
#如果版本号中包含jenkins提供的版本号,那么删除掉这个镜像
if [ "$tag" == "$version" ];then
docker rmi -f $imagename
fi
#登录镜像仓库并拉取镜像
docker login -u admin -p Harbor12345 $harbor_addr
docker pull $imagename
echo "拉取镜像: $imagename 成功"
#运行容器
docker run -d -p $host_port:$container_port --name $project $imagename
echo "容器运行: $project 成功"
[root@k8snode1 ~]# chmod a+x deploy.sh
[root@k8snode1 ~]# cp deploy.sh /usr/bin/
[root@k8snode1 ~]# ./deploy.sh 192.168.64.21:80 repo mytest1 v3.0.0 8081 8080
#测试成功
#服务器脚本ok,接下来要搞定jenkins通知服务器来运行这个脚本即可。
#添加端口参数
#构建后操作
deploy.sh 192.168.64.21:80 repo ${JOB_NAME} $tag $port
#再次构建即可,去目标服务器检查容器是否运行。
#这里我把镜像构建的名称改为了test2,因为我的jenkins项目名也就是${JOB_NAME}改为了test2,不然会找不到harbor上的test2镜像。这里根据自己的情况来。
#构建成功的话可以 看到
#至此ok
更多推荐
所有评论(0)