2022年4月27日 星期三

Azure DevOps in Action - 建立Linux環境的Build Agent

Azure DevOps也可以輕易地建立在Linux環境上的Build Agent,底下我們將會採用Ubuntu的VM環境來示範這個動作。

首先,我們建議您用Azure上的Ubuntu 20.04虛擬機範本,相關的建立參數如下:
enter image description here
我採用D4s_v3的虛擬機等級,在East Asia資料中心建立該伺服器。同時為了讓我能夠從Windows環境連上該伺服器做後續設定,我選擇了開啟SSH(22) Port。

請牢記你建立時所輸入的帳號密碼。

在虛擬機建立完之後,可以透過PowerShell(我是使用 Windows Terminal)以ssh指令來連上該伺服器,並且輸入密碼:

ssh 帳號@IP

例如:
enter image description here

遠端登入成功之後,即可對該伺服器下達指令。

先整理一下我們登入後要做的事情,分別是:

  1. 安裝 .net core SDK(為了可以進行 dotnet build)
  2. 下載Azure DevOps Agent套件(壓縮檔)
  3. 解壓縮套件
  4. 安裝套件並進行設定(過程中需用到PAT)
  5. 執行Agent

整個動作,可以從Azure DevOps的Orgnization Settings開始:
enter image description here
從Orgnization Settings選單點選Agent Pools,選擇Default(即為Self-Hosted Agent),接著點選New Agent。

在出現的畫面中,請點選Linux,你會看到安裝Linux Build Agent的步驟:
enter image description here
首先,請點選上圖A的部分,複製agent套件的下載位置,在筆者截稿時,該位置為:

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

接著,請在powershell以ssh連線的ubuntu環境中,下達底下指令:

mkdir myagent && cd myagent

這會建立一個myagent資料夾,並且進入該資料夾中。

接著,請執行底下指令,來下載agent:

curl -O https://vstsagentpackage.azureedge.net/agent/2.202.1/vsts-agent-linux-x64-2.202.1.tar.gz

其中 curl -O 是下載檔案,而後面的url,請換成您剛才在上圖A中所複製到的最新版URL。

接著,再透過底下指令解壓縮:

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

完成後,執行ls指令,會看到類似底下這些內容:
enter image description here
這樣我們待會就可以進行設定了。

但在此之前,我們得先準備好PAT(Personal Access Token),以及為該伺服器準備 .net core sdk環境。

參考 https://docs.microsoft.com/zh-tw/dotnet/core/install/linux-ubuntu 的說明,您可以透過運行底下指令,來安裝 .net core sdk:

wget https://packages.microsoft.com/config/ubuntu/21.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

sudo apt-get update;
sudo apt-get install -y apt-transport-https &&
sudo apt-get update &&
sudo apt-get install -y dotnet-sdk-6.0

過程中可能會需要您輸入密碼,請在powershell中執行上述指令,結果類似底下這樣:
enter image description here
若你需要安裝其它版本的.net core sdk,可以修改上面指令中的版號即可,例如:

sudo apt-get install -y dotnet-sdk-5.0

成功安裝後,我們就要進行最後一個步驟了。

請先準備好PAT,取得PAT的方式如下,請先點選Azure DevOps畫面右上角個人帳號旁邊的小人圖示:
enter image description here
接著在選單中選擇 『Personal access token』,即會出現建立PAT的畫面:
enter image description here
在出現的畫面中選擇建立新的PAT。

PAT是替代你的帳號密碼的令牌,在你指定的有限時間內,出示該令牌就等於具有你所賦予的權限。

建立好了之後,請保留該PAT,它的長像大概是底下這樣:

zs4l6xp7xwhnj7lp8ta7i4q3xhtfasaxs3vp6xxwrj6iger7i63ob2eq

接著,請回到剛才的powershell視窗,在myagent資料夾底下執行:

./config.sh

執行過程中,會需要輸入PAT:
enter image description here
請留意,上圖2中的URL,要輸入的是你的Azure DevOps站台位置,而輸入PAT之前(上圖3),會先要你按一個Enter(請仔細注意上面的英文敘述),然後才是輸入PAT(按下滑鼠右鍵即可貼上)。

後面的幾個選項都按Enter即可,完成後,你會看到Setting Saved.

接著,再執行 ./run.sh ,你會發現,系統已經開始運作,並且在等待jobs了 :
enter image description here
這時候,你就可以使用這個 agent pool來進行build job了。

你可以依照先前我們介紹過的方式,建立一個 .net core 程式的CI Build Pipeline,唯一不同的地方是,這次(下圖1)Agent Pool選擇的是Default(Private) ,其它的設定均不變:
enter image description here
當你運行該Pipeline時,會發現,這個Build Machine比Azure DevOps內建的來的快很多,自然是因為這台VM我們建立時選擇的等級是很高檔的。

沒多久,整個CI Build就順利的完成了:
enter image description here
你也會看到,PowerShell中,Ubuntu的Command Line出現相對應的提示訊息:
enter image description here
表示job被成功的完成了。

如果要停止該agent,可以在命令列按下CTRL+C,如果要移除該agent,只需要下達 ./config.sh remove指令,並輸入PAT即可:
enter image description here
建立一個私有的Linux Build Agent就是這麼簡單。

相關資源:

[書籍]Azure DevOps顧問實戰:
https://www.tenlong.com.tw/products/9786263241251?list_name=b-r7-zh_tw

[課程]敏捷開發專案管理與Azure DevOps實戰
https://www.studyhost.tw/NewCourses/ALM

2022年4月26日 星期二

No hosted parallelism has been purchased or granted.

近期上課時,許多學員在申請好Azure DevOps站台後,使用Build Pipeline時,可能會發現它發生了類似底下這樣的錯誤訊息:
enter image description here
完整的錯誤訊息是:

##[error]No hosted parallelism has been purchased or granted. To request a free parallelism grant, please fill out the following form https://aka.ms/azpipelines-parallelism-request

這段錯誤訊息的起因,是由於2021年3月之後,微軟已經取消了預設的免費pipeline使用,若您要使用免費的pipeline,必須依照上述的訊息,填寫申請表(網址如下):
https://aka.ms/azpipelines-parallelism-request

經過同學測試,如果申請成功,你會收到微軟寄來的信件,告知您已經可以使用。但因為填寫申請表曠日廢時(大概要2-3個工作天),若您不想等待,我們還有一個更簡單(但可能需要點費用)的方法。你可以用登入Azure DevOps相同的帳號,申請一個免費的Azure Trial訂閱,接著將該訂閱綁定於Azure DevOps服務即可:
enter image description here
當成功設定好訂閱(Subscription)連結之後,您必須將Paid parallel jobs設定為1(參考下圖):
enter image description here
設定完成儲存之後,立即可以使用Pipeline

特別注意,每一個 Paid parallel jobs 可能會花費 $40USD唷,請特別留意費用的產生。

熱門文章