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]

posted @ 2022-03-28 18:04  Java-练习生  阅读(11)  评论(0)    收藏  举报