Azure DevOps (八) 通過流水線編譯Docker映象

Tassdar發表於2022-03-31

上一篇文章我們完成了最簡單的傳統部署:上傳應用到伺服器上使用守護程式進行應用的部署。

本篇文章我們開始研究容器化和流水線的協作。

在開始操作之前,我們首先需要準備一下我們的dockerfile,這裡我們依然還是使用前幾篇文章使用的專案,貼一下檔案內容。

既然我們是使用的微軟的azure,所以我也就直接用了azure維護的jdk:zulu,我自己電腦上的jdk也是用的這個,因為我是M1晶片的mac,最一開始的時候官方並沒有ARM架構的JDK

但是微軟第一時間發行了zulu的ARM版本,我就一直用到了現在。

FROM  azul/zulu-openjdk-debian:8
COPY demo-app.jar /demo-app.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=zh_CN -Duser.country=zh_CN
ENTRYPOINT exec java -jar demo-app.jar

接下來我們來建立一條新的release 流水線,這裡有個深坑,就是我們在選擇agent的時候一定要選對了,選linux的發行版,我最一開始沒注意這個問題

導致後執行docker build 的時候一直提示我平臺不對,結果我一看執行的是docker.exe o(╥﹏╥)o

首選建立agent,上面選擇azure pipelines,下面選擇ubantu

 

接下來建立兩個Task,第一個task用來整理一下檔案目錄,第二個task用來執行容器的編譯。

首先建立第一個task,我們需要把dockerfile和我們的應用放在同一目錄下。

我們在agent下建立一個bash任務,選擇線上指令碼。

 

 

 

這裡我貼一下指令碼的內容,主要就是從流水線編譯好的製品中,提取出Dockerfile和我們的應用程式放在統一目錄下。 

cd _my-devops
mkdir finaldir
pwd
ls
cd webhook
ls
mv demo-app.jar  ../finaldir
mv classes/Dockerfile ../finaldir
cd ../finaldir
ls
pwd

 

接下來我們建立第二個task,用來執行docker build

我們在agent下新增一個docker執行步驟,在右側搜尋docker,進行新增 

 

新增完成之後,這裡有兩部分需要我們填,Container Repository我們暫時先留空,因為我手頭沒有合適的倉庫,我們本篇文章的重點放在映象的編譯工作上,

我們在commands配置項裡輸入dockerfile的路徑,和命令的執行路徑,這裡我把路徑填寫為了上面我整理好的finaldir中去,如果你有需要指定的編譯引數可以

寫到Arguments中去,這裡還有一個tag,用來指定我們映象的版本,$(Build.BuildId)環境變數會獲取我們本次流水線的編譯號,例如我這用的是test-$(Build.BuildId)

那麼到時候就會生成類似:test-3的一個tag打在映象上,讓我們區分映象結果。

 

 

按照要求填完之後,我們啟動一下這個流水線看一下執行的效果。

從bash的執行結果中,我們可以看到,我們已經成功的整理好了檔案目錄,把應用程式和dockerfile放在了同一個資料夾下。

 

 我們再來看一下dockerbuild的結果,azure成功的編譯出了我們的映象

 

 

 

 

 到這裡我們就成功的使用azure的流水線編譯出了第一個docker的映象,說實話踩了很多坑,尤其是一開始沒有選擇對agent的型別,卡了半天沒意識到這個問題,我一直以為是我dockerfile中FROM的基礎映象有問題,還去翻了半天原始碼,看著原始碼裡那個debain發行版本懷疑了半天人生,最後才意識到可能是agent的問題o(╥﹏╥)o

下一篇我們會研究如何通過azure打通一個公網的docker倉庫,把我們編譯好的映象推送到倉庫去。

相關文章