Azure Devops實踐(5)- 構建springboot項目打包docker鏡像及容器化部署

使用Azure Devops構建java springboot項目,創建鏡像並容器化部署

1、創建一個springboot項目,我用現有的項目

  • 目錄結構如下,使用provider項目

    image

  • 在根目錄下添加Dockerfile文件,文件內容如下

    image

  • 參考程式碼:
      # Docker image for springboot file run
      # VERSION 0.0.1
      # Author: xujk
      # 基礎鏡像使用java
      FROM java:8
      # 作者
      MAINTAINER xujk <[email protected]>
      # 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程式碼倉庫連接

    image

  • 選擇模板,maven項目

    image

  • 選擇Default代理池

    image

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

    image

  • 後面默認的設置即可,先測試打包功能

    運行管道,報錯:在池 Default 中找不到滿足指定要求的代理: maven, Agent.Version -gtVersion 2.144.0
    分析應該是代理池主機上,沒有安裝maven,安裝maven,參考url://www.cnblogs.com/wqlken/p/14090525.html, 在代理主機上安裝maven

  • 安裝完後,還是不行,重啟了一下虛擬機,運行管道,maven打包springboot項目

    image

  • jar包重新構建完成

    image

  • 修改pom.xml文件配置,構建provider項目

    image
    點擊取消鏈接,修改pom.xml文件路徑,改為構建provider,重新下構建打包,成功
    image

    image

  • 添加一個作業,生成docker鏡像,並推送到鏡像伺服器

    image

    image

  • 運行管道,構建鏡像並推送到docker hub上

    image

    image

  • 添加刪除鏡像步驟,腳本可參考前面兩篇構架.netcore的文章

    image

    注意:鏡像名稱都是小寫,不知為何名稱指定有大寫,但是生成完只會都變成小寫

    image
    運行完之後,就只剩下最新的鏡像了,老版本都已刪除

3、新建發布管道,部署應用

  • 新建一個空作業

    image

  • 配置好項目

    image

  • 寫入發布腳本

    image

  • 腳本參考
      #!/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
    
  • 發布,部署應用

    image

  • 訪問服務://192.168.231.139:8003/hello

    image

  • 部署成功