使用Azure Devops構建java springboot專案,建立映象並容器化部署
1、建立一個springboot專案,我用現有的專案
-
目錄結構如下,使用provider專案
-
在根目錄下新增Dockerfile檔案,檔案內容如下
-
參考程式碼:
# 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程式碼倉庫連線
-
選擇模板,maven專案
-
選擇Default代理池
-
配置maven pom.xml檔案的路徑
-
後面預設的設定即可,先測試打包功能
執行管道,報錯:在池 Default 中找不到滿足指定要求的代理: maven, Agent.Version -gtVersion 2.144.0
分析應該是代理池主機上,沒有安裝maven,安裝maven,參考url:https://www.cnblogs.com/wqlken/p/14090525.html, 在代理主機上安裝maven -
安裝完後,還是不行,重啟了一下虛擬機器,執行管道,maven打包springboot專案
-
jar包重新構建完成
-
修改pom.xml檔案配置,構建provider專案
點選取消連結,修改pom.xml檔案路徑,改為構建provider,重新下構建打包,成功
-
新增一個作業,生成docker映象,並推送到映象伺服器
-
執行管道,構建映象並推送到docker hub上
-
新增刪除映象步驟,指令碼可參考前面兩篇構架.netcore的文章
注意:映象名稱都是小寫,不知為何名稱指定有大寫,但是生成完只會都變成小寫
執行完之後,就只剩下最新的映象了,老版本都已刪除
3、新建釋出管道,部署應用
-
新建一個空作業
-
配置好專案
-
寫入釋出指令碼
-
指令碼參考
#!/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
-
釋出,部署應用
-
訪問服務:http://192.168.231.139:8003/hello
-
部署成功