Azure Devops實踐(5)- 構建springboot專案打包docker映象及容器化部署

xjk27400861發表於2021-10-13

使用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 <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程式碼倉庫連線

    image

  • 選擇模板,maven專案

    image

  • 選擇Default代理池

    image

  • 配置maven pom.xml檔案的路徑

    image

  • 後面預設的設定即可,先測試打包功能

    執行管道,報錯:在池 Default 中找不到滿足指定要求的代理: maven, Agent.Version -gtVersion 2.144.0
    分析應該是代理池主機上,沒有安裝maven,安裝maven,參考url:https://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
  • 訪問服務:http://192.168.231.139:8003/hello
    image
  • 部署成功

相關文章