飞道的博客

Jenkins+docker发布Springbot服务

323人阅读  评论(0)

1.开发Springbot应用

新建多个环境的配置文件

bootstrap.yaml

 通过变量获取不同环境active 

bootstrap-dev.yml

 bootstrap-pre.yaml

预发布及生产环境配置文件走nacos

二.配置docker

新增Dockerfile文件

 

Dockerfile内容


  
  1. # Docker image for springboot file run
  2. # VERSION 0.0.1
  3. # Author: eangulee
  4. # 基础镜像使用java
  5. FROM openjdk:8
  6. # 作者
  7. MAINTAINER qql <xxx@qq.com>
  8. # VOLUME 指定了临时文件目录为/tmp。
  9. # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
  10. VOLUME /tmp
  11. # 设置时区
  12. ENV TZ=Asia/Shanghai
  13. RUN ln -snf /usr/share/zoneinfo/ $TZ /etc/localtime && echo $TZ > /etc/timezone
  14. # 将jar包添加到容器中并更名为app.jar
  15. ARG JAR_FILE
  16. ADD target/cdc-0.0.1-SNAPSHOT.jar /app.jar #替换成你项目打包后的文件名称
  17. #配置项目端口
  18. EXPOSE 8020
  19. # 运行jar包
  20. RUN bash -c 'touch /app.jar'
  21. ENTRYPOINT [ "java", "-jar", "/app.jar", "--spring.profiles.active=${env}"] #通过变量传递不同的环境

在服务器项目下新增docker-composer.yaml文件 ,不要放在代码版本库


  
  1. version: '3'
  2. services:
  3. project-demo:
  4. container_name: cdcd-demo #自定义容器名称
  5. image: qql/cdcd:0.0.1 #镜像名称
  6. restart: always
  7. environment:
  8. env: dev #环境,不同环境使用不同环境名称
  9. volumes:
  10. # 同步时间
  11. - /etc/localtime:/etc/localtime:ro
  12. # 如果项目有些日志或者写文件,需要同步到宿主机器,也需要定义相应的卷
  13. # - ./data:/etc/project-demo/data
  14. # - ./log:/etc/project-demo/log
  15. ports:
  16. - 8080:8020

三.配置Jenkins

新增部署shell脚本


  
  1. #!/bin/bash
  2. echo "当前位置"
  3. pwd
  4. mvn clean package -Dmaven.test.skip= true
  5. #切换到项目目录
  6. cd cdc
  7. pwd
  8. #获取最新版本tag
  9. LatestTag=$(git describe --tags `git rev-list --tags --max-count=1`)
  10. echo -e "最新版本tag......"
  11. echo -e "$LatestTag"
  12. echo -e "镜像地址"
  13. #获取本机IP
  14. local_ip=`ifconfig eth0 | grep 'inet' | awk '{print $2}' | sed -e "s/addr\://"`
  15. echo ${local_ip}
  16. #制作docker镜像
  17. docker build -f Dockerfile -t qql/cdc:1.0 .
  18. echo "制作成功"
  19. cd ../docker
  20. pwd
  21. #根据docker-composer.yaml文件新建获取重新构建docker容器
  22. docker-compose -f docker-composer.yaml -p cdc up -d
  23. step=1 #间隔的秒数,不能大于60
  24. content= ""
  25. for (( i = 0; i < 60; i=(i+step) )); do
  26. status_code=$(curl -I -m 10 -o /dev/null -s -w %{http_code} 127.0.0.1:8080/index/index) #访问服务一个接口验证容器是否启动
  27. echo $status_code
  28. if [ $status_code != 200 ]; then
  29. sleep $step
  30. echo "服务还没有启动,耗时" $i "秒"
  31. else
  32. echo "服务已经启动,耗时" $i "秒"
  33. break
  34. fi
  35. if [ $i == 59 ]; then
  36. echo "启动失败"
  37. exit -1
  38. fi
  39. done
  40. {
  41. docker rmi `docker images | grep none | awk '{print $3}'` && /
  42. } || {
  43. echo 'delete null images error(不需要处理)'
  44. }

 保存,则就可以执行部署

执行构建 


转载:https://blog.csdn.net/qq_36514588/article/details/129185721
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场