Jenkins 集成docker 插件,实现热spring项目部署

流程图

build Success
push success
通过 Git 拉取源码
maven 编译打包
编译成功
Docker build
docker push
清除本地image
连接远程服务器进行 docker pull及run

jenkins 全局配置

  • jdk 配置(yum 安装)
    jdk配置
  • git 配置(yum 安装)
    在这里插入图片描述
  • maven 配置,需要自行下载解压
    在这里插入图片描述
  • docker 配置(yum安装)

在这里插入图片描述

  • Jenkins 系统配置
    在这里插入图片描述
  • docker 服务配置(需要先开启docker外部访问端口)
    在这里插入图片描述
  • 开启docker外部访问端口
    • vim /lib/systemd/system/docker.service
    • 在 ExecStart 行增加 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock 最终如下:
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
          --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
          --default-runtime=docker-runc \
          --exec-opt native.cgroupdriver=systemd \
          --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
          --init-path=/usr/libexec/docker/docker-init-current \
          --seccomp-profile=/etc/docker/seccomp.json \
          $OPTIONS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $ADD_REGISTRY \
          $BLOCK_REGISTRY \
          $INSECURE_REGISTRY \
          $REGISTRIES
          
          
          
          
修改后 重启docker:

1、重启守护进程
systemctl daemon-reload

2、重启docker
service docker restart

3、用浏览器访问验证
http://ip:2375/images/json

搭建Docker Registry (私有仓库,用于存储docker images)

docker pull registry 
创建本地用于存放镜像的目录,然后映射到仓库的目录中 
cd /usr
mkdir docker-registry
docker run -d -v /usr/docker-registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry 

vim /etc/docker/daemon.json 

添加如下配置 { "insecure-registries" : ["10.10.10.224:5000"] } 
重启docker使之生效 
systemctl daemon-reload 
systemctl restart docker

项目配置

  • jenkins 新建一个 maven 项目

  • 配置项目构建历史保存设置(建议加上此配置,否则历史编译文件会占用服务器空间)
    在这里插入图片描述

  • 配置项目仓库地址,我采用了git账号密码的方式,当然也可以使用 ssh 方式拉取源码
    在这里插入图片描述

  • 项目编译设置

    • 跳过测试环节 clean package -Dmaven.test.skip=true
      在这里插入图片描述
  • docker image编译,及push 配置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 执行脚本如下:针对不同的项目只需要修改上部定义的三个变量加映射端口的配置

BUILD_ID=DONTKILLME

IMAGE_NAME=10.10.10.224:5000/docker.io/eureka
TAG=latest
CONTAINER_NAME=eureka

#判断是否存在已启动的容器,有则停止并删除
CONTAINER_ID=`sudo docker ps | grep ${CONTAINER_NAME} | awk '{print $1}'`
if [ -n "$CONTAINER_ID" ]; then
    sudo docker stop $CONTAINER_ID
    sudo docker rm $CONTAINER_ID
else #如果容器启动时失败了,就需要docker ps -a才能找到那个容器
    CONTAINER_ID=`sudo docker ps -a | grep ${CONTAINER_NAME} | awk '{print $1}'`
    if [ -n "$CONTAINER_ID" ]; then  # 如果是第一次在这台机器上拉取运行容器,那么docker ps -a也是找不到这个容器的
        sudo docker rm $CONTAINER_ID
    fi
fi

# 删除历史 image
IMAGE_ID=`sudo docker images | grep ${IMAGE_NAME} | awk '{print $3}'`
if [ -n "${IMAGE_ID}" ];then
    sudo docker rmi ${IMAGE_ID}
fi

echo "----------------pull docker.io/eureka:latest---------------------"
sudo docker pull ${IMAGE_NAME}:${TAG}

echo "----------------run docker.io/eureka:latest---------------------"
sudo docker run -d -p 8761:8761 --name ${CONTAINER_NAME} ${IMAGE_NAME}:${TAG}
  • 附上项目的 Dockerfile 脚本 (JVM 参数可根据实际需求自行调整,我的配置只可参考)
FROM openjdk:8-jre-alpine
ENV LANG en_US.UTF-8
ENV JAVA_OPTS "-XX:InitialHeapSize=521m -XX:MaxHeapSize=521m -XX:NewSize=362m -XX:MaxNewSize=362m -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=10 -XX:ThreadStackSize=1m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=logs/"
WORKDIR /app
RUN rm -rf /etc/localtime && ln -svf /usr/share/zoneinfo/Asia/Shanghai /etc/
ENV APP_NAME dg-eureka.jar
ENV APP_PATH target
# 将当前项目的jar包添加到容器中
ADD "$APP_PATH/$APP_NAME" "$APP_NAME"
EXPOSE 8761
ENTRYPOINT ["sh","-c","java $JAVA_OPTS -Duser.timezone=Asia/Shanghai -Djava.security.egd=file:/dev/./urandom -jar /app/$APP_NAME"]

至此,咱们的项目已经配置完成,可以正常的拉取、编译、docker build、push
然后通过ssh插件在其他服务器进行 docker pull,docker run 启动项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值