Azure DevOps+Docker+Asp.NET Core 實現CI/CD(一 .簡介與建立自己的代理池)

GuZhenYin發表於2020-08-05
前言

本文主要是講解如何使用Azure DevOps+Docker 來實現持續整合Asp.NET Core專案(當然 也可以是任意專案).

打算用三個篇幅來記錄完整的全過程

覺得有幫助的朋友~可以左上角點個關注,右下角點個推薦

 

CI/CD簡介

首先,我們先來簡單的介紹一下什麼是CI/CD

CI全拼Continuous Integration 持續整合
我們的開發每天基本都會提交多次程式碼到主幹上,這個時候如果需要編譯或者打包,就會做一些重複性的動作,就可以用持續整合環境來操作。
有整合了,就肯定少不了它的好基友,沒錯就是CD。
CD全拼是Continuous Deployment,是持續部署。
CD還有個小號,交持續交付,英文全稱是Continuous delivery,縮寫也是CD。

CI/CD優點是,重複的工作用自動化來代替、減少時間成本、減少版本釋出時間。

 

Azure DevOps簡介

作為.NET的開發者,微軟一直都是比較有愛的..從免費強大的IDE到人工智慧ML.NET 基本上都提供了免費的入門版本,今天主要介紹的就是Azure DevOps.

Azure DevOps的前身其實大家都熟悉就是TFS,Azure DevOps是由TFS轉為線上Online的產品.

它基本上提供了CI/CD所需要的全部功能。唯一的問題是在國內沒有伺服器,最近的伺服器在香港。

Azure DevOps提供無限免費的私有倉庫,以及最多5個contributor(貢獻者)賬號和無限的stakeholder(參與者)賬號,註冊即可使用.

本文的CI/CD概念圖

 

 這裡的代理服務池和各類伺服器 都是採用阿里雲的CentOS7.0+系統.

正文

1.提交程式碼到Azure DevOps Repos 

首先我們建立一個專案(選擇使用GIT作為版本控制工具),進入專案中我們可以看到Repos選單下如圖:

 

其實就是提供了一個GIT的倉庫地址,提交程式碼即可.

2.建立代理伺服器池

其實這裡就直接可以用官方提供的代理伺服器來進行CI和CD了,但是會有諸多不便,也不方便自己管理.

點選選單最下面的Project Settings,如圖:

 

 找到Agent pools

 

建立一個新的自託管的代理伺服器池

 

 

 

3.建立代理伺服器

點進去上一步建立的代理伺服器池,找到agent

建立一個自己的代理伺服器

可以看到微軟給我們提供了多種平臺版本的代理伺服器客戶端 這裡我們選擇linux然後下載複製tar包地址:

 

 

回到我們自己阿里雲伺服器.

(1)安裝打包編譯需要的支援環境Docker

CentOS安裝Docker我就不詳細描述了,百度一大把資料.

(2)安裝程式碼拉取的工具GIT

需要注意的是CentOS自帶的GIT只有1.8+版本,需要升級到2.0+版本才能連線Azure DevOps

具體升級方式可以參考:https://blog.csdn.net/qq_28903377/article/details/86148687

這篇文章的安裝目錄是/usr/local/git/bin  記得自己的安裝目錄/usr/local/git/bin

(3)安裝agent代理伺服器客戶端

執行命令 建立一個資料夾,並進入這個資料夾

mkdir myagent && cd myagent

下載微軟提供給我們的agent代理伺服器客戶端

wget https://vstsagentpackage.azureedge.net/agent/2.172.2/vsts-agent-linux-x64-2.172.2.tar.gz

 解壓

tar -zxvf vsts-agent-linux-x64-2.172.2.tar.gz

執行配置代理伺服器:

./config.sh

這裡可能會出現一些錯誤提示:Must not run with sudo

具體的解決方案請參考https://github.com/microsoft/azure-pipelines-agent/pull/1713/commits/15a5beea684fa35172d661f3253b93e210409fbb

注意:代理伺服器是基於.NET CORE3.1編寫,所以需要相應的執行環境,如果沒有,請執行如下命令:

./bin/installdependencies.sh to install

 

建立自己的訪問令牌 (PAT) 進行身份驗證(這裡一定要操作,後面需要使用)

點選右上角選擇access Token

 

建立一個新的令牌

 

 

這裡為了方便,我直接選擇了Full access授權這個Token可以訪問所有的內容.

然後會得到一個Token字串,記得複製儲存,因為後面就查不到了,只能重新生成

 

解決環境問題,建立完Token後,我們繼續執行配置:

 

 

  • 輸入【Y】接受Team Explorer Everywhere許可協議;
  • 輸入伺服器URL,即專案的Azure的地址;
  • 輸入身份驗證型別,這裡直接回車,選擇預設的PAT;
  • 輸入個人訪問令牌,即PAT;
  • 連線伺服器成功後,輸入建立好的代理池;
  • 預設代理名稱,也可以進行修改;
  • 因為我之前已經建立過了,所以是否替換的選擇選擇了【Y】;
  • 輸入工作資料夾,直接回車,選擇預設的【_work】;

 

這樣就完成了我們的代理伺服器的配置工作.

然後執行啟動命令:

./run.sh

這個時候我們應該就能在網頁上看到我們的代理伺服器上線瞭如圖:

 

 

 

4.採用服務的形式執行代理伺服器

上面我們的代理伺服器雖然上線了,但是在linux中是主執行緒的形式,退出就關閉了..

我們需要修改為服務的形式來執行.

執行命令安裝服務:

sudo ./svc.sh install

啟動服務:

sudo ./svc.sh start

檢視服務狀態:

sudo ./svc.sh status

停止服務:

sudo ./svc.sh stop

更新環境變數(當你有其他外掛安裝或者更新時)

./env.sh
sudo ./svc.sh stop
sudo ./svc.sh start

 

 

 

後記

本篇主要講解了如何建立自己的代理伺服器池,下一篇我們主要講解如何建立一個管道來自動編譯和打包我們的專案.

相關文章