docker 搭建 jenkins + springboot + gitee
创建 jenkins 容器
docker run -d --name jenkins \
-p 8088:8080 -p 50088:50000 \
-e JAVA_OPTS="-Dmail.smtp.starttls.enable=true -Dmail.smtp.ssl.checkserveridentity=false" \
-v /usr/local/docker/jenkins/conf/jenkins_home:/var/jenkins_home \
-v /etc/timezone:/etc/timezone \
-v /etc/localtime:/etc/localtime \
-v /usr/local/docker/jenkins/data:/data \
-v /usr/local/docker/jenkins/apache-maven-3.8.5:/usr/local/maven \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
--restart always \
jenkins/jenkins:lts
注意:要想容器使用宿主机的 docker 命令,以下两行不能少
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
jenkins 环境执行宿主机的 docker 时会出现 permission denied 的情况
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
dial unix /var/run/docker.sock: connect: permission denied
-
查看宿主机 docker 文件属组情况

-
宿主机属组 id

-
jenkins 容器内的文件情况

从图中可知,docker.sock 的属组是 998,由于容器内部没有组 id 为 998 的组,所以显示 998,而 jenkins 容器内的默认用户是 jenkins 用户,所以我们需要创建组 id 为 998 的组,把 jenkins 用户添加到 id 为998的组,就能满足 jenkins 容器访问容器外的 docker。
首先以 root 权限进去 jenkins 容器
docker exec -it -u root jenkins bash
然后创建组 id 为 998 的组
groupadd -g 998 docker
这时, jenkins 容器内的文件情况

然后把 jenkins 用户加入到 docker 组中

退出容器,以 jenkins 用户进入容器,输入 docker version,如果没有权限的话不能看到服务端

重启 jenkin 容器,就能在 jenkins 页面上使用容器外的 docker 了。
Dockerfile 参考
#这是基础镜像
FROM adoptopenjdk/openjdk8-openj9:alpine-slim
ENV LANG en_US.UTF-8
LABEL maintainer="everan@aliyun.com"
VOLUME /tmp
# 将容器的8081端口暴露,给外部访问。
EXPOSE 8081
#复制 jar 包到镜像中,并且将名字改成 snowy-main.jar
ADD target/snowy-main.jar snowy-main.jar
#在容器启动的时候运行命令,来启动我们的项目(这其实就是一段Linux命令)
ENTRYPOINT ["java", "-Xmx2G", "-Xms200M", "-Xshareclasses", "-Xquickstart", "-Duser.timezone=GMT+08", "-jar","snowy-main.jar"]
shell 脚本参考
echo "BUILD_ID: $BUILD_ID"
#项目名称
PROJECT_NAME="love-letter-snowy-main"
#打印当前目录WORKSPACE,可以查看 可用的环境变量列表,workspace默认目录时jenkins安装目录下/var/jenkins_home/workspace/
echo "work dir: $WORKSPACE"
#进入项目目录,执行打包生成jar包
cd $WORKSPACE && mvn clean package
#进入构建目录
cd "snowy-main"
#生成镜像
docker build -f Dockerfile . -t $PROJECT_NAME
#这里判断服务是否启动,如果启动需要停止并删除运行容器,然后重启启动
if [ $(docker ps -aq --filter name=$PROJECT_NAME) ]; then
#停止服务
docker stop $PROJECT_NAME
#删除启动容器
docker rm -f $PROJECT_NAME
#清空重复镜像
docker image prune -f
#清空未使用挂载缓存目录
docker volume prune -f
fi
echo "启动容器开始............."
#启动容器
docker run -dit -e "SERVER_PORT=8081" --name $PROJECT_NAME -p 8081:8081 $PROJECT_NAME
echo "启动容器结束............."
参考:[https://blog.csdn.net/u014595589/article/details/107028711]

浙公网安备 33010602011771号