Azure DevOps (九) 通過流水線推送鏡像到Registry

上一篇文章我們研究了如何通過流水線編譯出一個docker的鏡像,本篇我們來研究一下,如何把編譯好的鏡像推送到鏡像倉庫去。

平時如果我們是單機部署,我們的docker本身就裝在部署的機器上,我們在本機直接build+run一條龍就好了,但是在實際生產中,

更多的可能是分散式的多機部署,或者我們是依賴於K8S進行的部署,這時候我們肯定是需要把編譯好的鏡像推送到一個統一的倉庫

中進行管理,然後在部署的時候統一從這個倉庫進行獲取。

鏡像倉庫目前社區主流的是使用Harbor,這個是是VMware貢獻給社區的一個開源免費的鏡像倉庫,有一鍵部署的腳本,部署成功後通過

對外開放的API既可以實現鏡像的推送和拉取,我在寫這篇文章的時候自己搭建了一個Harbor打算用來當倉庫用,後來想了想好像各個

雲廠商都有免費的倉庫可以用,於是乎我就去搞了一個騰訊雲的倉庫,這樣也免去了大家搭建harbor的工作量和所需的硬體伺服器資源

(注意,我這裡不是廣告,阿里雲、騰訊雲、華為雲、青雲等都有自己的倉庫,只是我自己的伺服器都在騰訊上)

首先,我們去騰訊雲搜索:容器鏡像服務,然後開通個人版,個人版是免費的,只是受限的條件很多,但是夠用,開通之後,我們進入

到控制台,點擊新建倉庫,填寫好自己的配置資訊之後就可以使用了,成品如下:

 

 如果喜歡使用harbor的話也沒有問題,harbor的效果如下:

 

 配置好鏡像倉庫之後,我們去更改一下上一篇文章中我們創建好的流水線,之前的流水線中,我們只是執行了docker build 命令,這個命令只是實現了鏡像

的編譯工作,接下來我們需要添加docker push命令,來把我們的鏡像推送到倉庫里去。

首先和之前創建ssh連接一樣,我們需要在service connection中添加一個憑證,用來描述我們的倉庫地址和帳號密碼,打開service connection選擇docekr registry

添加你的倉庫資訊,如果你使用的是騰訊雲的倉庫,帳號密碼會在你創建倉庫時進行設置,如果你使用的是harbor,那麼這個帳號和密碼是寫在你harbor的配置文件

里的,和你請求api的帳號密碼保持一致即可。

 

 

 

填寫完之後,我們去更改一下之前的流水線,首先我們先在repository 中選擇我們剛才創建好的連接資訊,然後修改下面docker build為docker build push,其他的原有參數不需要調整

然後我們運行一下我們的流水線,我們可以看到,流水線在完成了build步驟以後,緊接著就開始執行了push命令,開始推送我們的鏡像到騰訊雲的倉庫。

 

 然後我們去騰訊雲上,看一下我們的鏡像有沒有出現,可以發現,我們剛才推送的鏡像現在已經躺在騰訊雲上了。

 

 

如果你使用的是harbor的話,首先需要確保你部署harbor使用的是https,因為docker在push的時候默認是執行https的,其次就是,在請求的時候不需要帶埠號,可能是我

安裝的不太好的原因,我的harbor生成的命令裡帶著埠號,讓我爬了很久的坑。和騰訊雲一樣,我們需要創建一個新的service_connection,裡面保存harbor的資訊,

地址填寫你部署harbor的域名或者ip就可以,但是必須是https的,不然後面會走不通。

 

 

 然後我們去更新一下我們流水線的配置,把騰訊雲的換成harbor的配置,同時需要更改下面的repostory資訊,更換成harbor的,例如我在harbor上創建的倉庫的名稱是:azure

所以我們這裡就要寫「倉庫名」/『鏡像名』,例如:azure/my-devops,到時候推送的時候docker會通過tag命令把編譯好的鏡像命名為:azure/my-devops:tag的格式,推送到你

的harbor倉庫里去。

 

 然後我們執行一下流水線,看一下生成的命令是否和我們的想法匹配,可以看到和我們預期的是一致的,流水線開始推送鏡像到我們的倉庫里去。

 

 然後我們去harbor里看一下鏡像是否已經成功推送

 

 

 

到這裡我們本篇文章就結束了,這裡我們成功實現了推送鏡像到其他的公網倉庫去,接下來我們會繼續研究azure的其他功能。