docker4dotnet #5 使用VSTS/TFS搭建基於容器的持續交付管道

北京的201個藍天發表於2016-09-29

在過去的幾篇d4d系列中,我給大家介紹瞭如何使用docker來支援asp.net core的應用開發,打包的場景。Asp.net core的跨平臺開發能力為.net開發人員提供了使用容器進行應用開發的能力,今天這篇文章將對如何使用微軟的全生命週期管理平臺VSTS/TFS來構建基於容器的CI/CD管道來支援團隊開發的場景。

#1 前世今生 & 世界你好
#2 容器化主機
#3 在macOS上使用Visual Studio Code和Docker開發asp.net core和mysql應用
#4 使用Azure雲端儲存構建高速 Docker registry

Visual Studio Team Services/Team Foundation Server

VSTS/TFS是微軟Visual Studio產品組提供給廣大開發者的全生命週期管理平臺,Visual Studio Team Service (VSTS)是構建在微軟公有云Azure平臺上的Saas架構的開發平臺,為中小團隊和跨地域的大型團隊提供軟體開發過程的端到端管理能力,這個平臺對於5名以下開發團隊的小團隊完全免費(同時可以有任意數量的管理人員參與,VSTS通過區分stakeholder和developer兩種角色,為stakeholder這些只需要管理過程而無需修改程式碼的管理人員提供了完全免費的訪問許可)。Team Foundation Server是VSTS的企業版,可以由企業獨立部署於私有云或者資料中心中,並提供與VSTS一致的功能體驗。

關於VSTS和TFS的功能介紹,請參考本部落格或者公眾號中的相關文章,連結如下:

http://devopshub.cn/tag/vsts/

基於容器的CI/CD

容器技術所解決的主要問題是環境的一致性和同一版本的應用在不同的環境中的遷移問題,雖然對單個開發人員也提供了更高效的開發模式,但容器的作用在團隊開發中和管理開發/測試/預生產/生產環境中會體現得更有價值。從事軟體開發的技術人員都知道,在開發過程中保持不同開發人員/測試人員使用統一的環境是一件非常困難的事情,很多過程中的問題都是環境不一致造成的。容器正是解決這一問題的有效方式。

為了能夠構建基於容器的CI/CD,我們需要以下工具鏈:

d4d-5-001

下圖展示了以上工具鏈的關係和工作流程

d4d-5-002

下圖中可以看到,要構建完整的釋出工具,我們需要一個多級技術棧,Docker的容器化工具降低了最底層環境和應用技術棧的複雜度,讓我們的釋出過程變得更簡單。

d4d-5-003

下面我們就來看一下如何配置這樣一套基於容器的CI/CD環境

1. 建立容器化主機作為開發/測試/生產環境

關於如何在開發環境中建立容器化主機支援編碼和除錯,請參考

#1 前世今生 & 世界你好

關於如何在雲環境中建立容器化主機支援測試和生產環境,請參考

#2 容器化主機

2. 在Linux伺服器上配置TFS構建代理

關於如何配置Linux伺服器上的構建代理,請參考

用VSTS/TFS搭建iOS持續整合環境

3. 將容器化主機連線到TFS

進入TFS後臺,點選 服務 | 新建服務終結點 |Dcoker Host

d4d-5-004

將 容器化主機的 url,和~/.docker/machine/machines/{machine-name} 目錄下的pem的檔案內容按照以下關係拷貝到配置頁面中。

d4d-5-005

重複以上過程,分別繫結使用者測試和生產環境的容器化主機配置,建立以下docker host終結點

○ Dockerhost-test
○ Dockerhost-pro

4. 將docker hub賬號連線到TFS

進入TFS後臺,點選 服務 | 新建服務終結點 | Docker Registry

d4d-5-006

填寫你的docker hub使用者名稱,密碼和郵件地址;如果使用私有的registry,請更新Docker Regsitry地址。

d4d-5-007

5. 配置CI定義

建立生成定義,並將預設代理佇列指向對應在Linux伺服器上構建代理佇列

d4d-5-008

在 生成 步驟中分別新增以下構建任務

d4d-5-009

具體為
a. dotnet restore
b. dotnet build
c. dotnet publish
d. docker build
e. docker push

以下為docker build步驟的詳細配置,注意這裡我們使用$(Build.BuildNumber)這個環境變數作為容器映象的tag,這樣我們就可以使用統一的構建號來管理容器映象的不同版本。

d4d-5-010

以下是docker push的詳細配置,此步驟將把構建好的容器上傳到docker hub並使用$(Build.BuildNumber)作為版本號tag。

d4d-5-011

6. 建立CD釋出管道

建立以下發布管道配置,分別指定測試環境和生產建立的部署步驟

d4d-5-012

在每一個環境中,我們都執行以下步驟
○ Stop running container
○ Remove container
○ Run container

測試環境和生產環境分別使用不同的容器化主機連線(在第1-2步中建立的連線)。

7. 配置測試環境到生產環境的升級策略

以下配置要求生產環境的部署只有在測試環境部署成功的情況下才能執行

d4d-5-013

以下配置要求生產環境的部署必須由特定的使用者進行審批通過後才能執行

d4d-5-014

至此,我們就完成了基於容器的CI/CD釋出管道配置。


 

請關注微信公眾號 【devopshub】,獲取更多關於DevOps研發運維一體化的資訊

qrcode_for_gh_b7c158df1fd1_430

相關文章