Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

使用Azure Devops构建java springboot项目,创建镜像并容器化部署

1、创建一个springboot项目,我用现有的项目

  • 目录结构如下,使用provider项目

    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

  • 在根目录下添加Dockerfile文件,文件内容如下

    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

  • 参考代码:
      # Docker image for springboot file run
      # VERSION 0.0.1
      # Author: xujk
      # 基础镜像使用java
      FROM java:8
      # 作者
      MAINTAINER xujk <xjk27400861@163.com>
      # VOLUME 指定了临时文件目录为/tmp。
      # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
      VOLUME /tmp
      # 将jar包添加到容器中并更名为app.jar
      ADD target/provider-0.0.1-SNAPSHOT.jar app.jar
      # 运行jar包
      RUN bash -c 'touch /app.jar'
      ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    
      #设置时区
      RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
    

2、在Devops创建项目,添加管道

  • 添加git代码仓库连接

    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

  • 选择模板,maven项目

    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

  • 选择Default代理池

    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

  • 配置maven pom.xml文件的路径

    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

  • 后面默认的设置即可,先测试打包功能

    运行管道,报错:在池 Default 中找不到满足指定要求的代理: maven, Agent.Version -gtVersion 2.144.0
    分析应该是代理池主机上,没有安装maven,安装maven,参考url:https://www.cnblogs.com/wqlken/p/14090525.html, 在代理主机上安装maven

  • 安装完后,还是不行,重启了一下虚拟机,运行管道,maven打包springboot项目

    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

  • jar包重新构建完成

    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

  • 修改pom.xml文件配置,构建provider项目

    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署
    点击取消链接,修改pom.xml文件路径,改为构建provider,重新下构建打包,成功
    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

  • 添加一个作业,生成docker镜像,并推送到镜像服务器

    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

  • 运行管道,构建镜像并推送到docker hub上

    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

  • 添加删除镜像步骤,脚本可参考前面两篇构架.netcore的文章

    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

    注意:镜像名称都是小写,不知为何名称指定有大写,但是生成完只会都变成小写

    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署
    运行完之后,就只剩下最新的镜像了,老版本都已删除

3、新建发布管道,部署应用

  • 新建一个空作业
    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署
  • 配置好项目
    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署
  • 写入发布脚本
    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署
  • 脚本参考
      #!/bin/bash
       name="springboot01"
      	cid=`docker inspect --format '{{.Id}}' ${name} 2>/dev/null`
      	if [[ ${#cid} -gt 0 ]]; then
             docker stop $name
             docker rm $name
             echo "successed deleted container ${name}"
          fi
        imageid=`docker images --format {{.ID}} $name`
        echo "准备删除旧镜像${imageid}"
        if [[ ${#imageid} -gt 0 ]]; then
           docker rmi -f $imageid
           echo "successed deleted old image ${name}"
        fi
        docker pull docker.io/xjk27400861/springbootapp:$(Build.BuildId)
        docker tag docker.io/xjk27400861/springbootapp:$(Build.BuildId) springbootapp:$(Build.BuildId)
        docker run -it -d -p 8003:8080 --name springboot01 --privileged=true springbootapp:$(Build.BuildId)
        docker logs springboot01
    
  • 发布,部署应用
    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署
  • 访问服务:http://192.168.231.139:8003/hello
    Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署
  • 部署成功
上一篇:GitLab + Rainbond 打造Devops流程


下一篇:DevOps系列之 —— 持续开发与集成(六)静态代码检查