在 Ubuntu 20.04 上安裝 Azure Devops Agent 建置環境
前言
Azure DevOps Service 是微軟提供的一個集成式服務,用於規劃、協作、建置和部署軟體,它提供了一整套功能,包括版本控制、工作項追蹤、持續整合(CI)、持續部署(CD)、測試自動化、部署管道等等工具。
但若你要使用 Azure Pipelines 建置程式碼或部署程式,則需要至少一個代理程式,微軟提供的 Azure Agent 提供一個每個月可執行1,800 分鐘數的 CI/CD 免費版本,對於個人開發者來說,基本上已經綽綽有餘了,可以說是很佛心的服務,至少對我這樣的重度使用者來說,這個配額也足夠使用,除非你持續大量提交程式碼,才可能超過這個限制。
由於公司政策的限制,我的公司決定使用地端版的 Azure DevOps Server,但這意味著我需要建立自己的持續整合 (CI) 建置環境,一開始因為是使用微軟的服務,因此很自然的選擇了微軟的作業系統當作 Agent Server。
然而,每次前端環境的建置至少需要 15 分鐘以上,其中大部分時間都花在執行 npm install 上。直到有一天,我讀到保哥分享的文章,發現使用 Ubuntu 的 Agent 環境可以極大地加速建置時間,我花了點時間在雲端環境進行了測試,結果令驚為天人,於是我只好默默的將公司地端的 Agent 也改為 Ubuntu 版本來提高建置效率,這篇文章我要記錄一下設定環境的過程。
Agent 安裝步驟
先前我沒有使用過 Linux 相關的作業系統,因此在安裝作業系統時花了相當一段時間,而且一開始我也還不習慣使用指令進行相關環境設定,因此如何使用遠端桌面連線到這台作業系統也耗費了我不少時間,最後作業系統和連線設定完成後,我發現在 Ubuntu 上進行安裝與 Windows 幾乎沒有太大差異,而且事實上,只需要使用 SSH 來進行連線即可,遠端桌面雖然也可行,但並非必要,留下這篇文章的主要目的是要紀念我曾在這花了不少血淚時間,簡單的安裝步驟如下說明。
- 按照 Devops 內 Linux x64 版的說明,將 agent 程式安裝到 ubuntu 內執行 ./config.sh 依指示登入。
- 輸入伺服器url:http://xxx.xx.xx.xx , 選擇身份認證方式:我們這裡使用Negotiate。
- 身份認證類型:
- Alternate 基本驗證
- Integrated Windows集成身份驗證,不支援 macOS 和 Linux.
- Negotiate (默認) 通過Windows身份驗證方案(例如NTLM或Kerberos)以登錄用戶以外的用戶身份連接到TFS或Azure DevOps Server。選擇此模式後,系統將提示輸入憑據。
- PAT 權杖驗證,需創建權杖
- 完成安裝後,登入後拋回錯誤訊息 GSSAPI operation failed with error - An unsupported mechanism was requested. NTLM authentication requires the GSSAPI plugin 'gss-ntlmssp'。
- 解決辦法,在 Ubuntu20 系统中,安装 gss-ntlmssp 套件。
sudo apt-get install gss-ntlmssp
- 最後安裝代理服務並啟動。
sudo ./svc.sh install sudo ./svc.sh start sudo ./svc.sh stop (這個是重啟服務)
安裝建置相關軟體
- Linux 可透過 putty、MobaXterm 等工具並透過 SSH 來操作(可省下需遠端桌面的麻煩設定),例如使用下列指令,自動重開連線,通常用於某個軟體安裝完使用。
source ~/.profile
(非必要可於 CI 設定) 安裝 nvm (此篇安裝時版本 0.39.3) + nodejs (此篇安裝時版本 14.21.2) https://bmhiamso1.medium.com/ubuntu-安裝-nvm-npm-3bf6bffa9152
sudo curl https://raw.githubusercontent.com/creationix/nvm/v0.39.3/install.sh | bash
nvm install 14.21.2
npm install -g npm
npm install -g yarn@1.22.19
安裝遠端桌面
一開始使用較舊的 Ubuntu 版本,但後來重新安裝了 22.04 版後有自帶遠端桌面,可不需安裝這個了,若有需要自行安裝遠端桌面的可參考底下說明。
- 下載遠端桌面 Script,詳細說明可參考底下連結。
wget https://gist.githubusercontent.com/peter279k/259f71b3a8cef3aa66e9af90e6800f2b/raw/c373ddee0d407dac850dc326c268e5df6d8c93f1/Std-Xrdp-install-0.2.sh
- 設定該 Script 的權限 chmod是權限管理命令change the permissions mode of a file的縮寫。 chmod u+x *.sh 就表示對當前目錄下的所有副檔名為sh文件的所有者增加可執行權限。
chmod u+x *.sh
- u 代表所有者
- x 代表執行權限
- + 表示增加權限
- 執行安裝遠端桌面 Script。
./Std-Xrdp-install-0.2.sh
- 遠端桌面驗證,當執行完上述的shell script之後,接著將主機重新開機,並確定 3389 的 port number 沒有被IPTable 或是防火牆擋住,並可以使用下面的指令來確定 3389 的 port number 已經有服務監聽在此 port number 上了,若成功可以看到下圖
etstat -ntlp | grep 3389
留言
張貼留言
您好,我是 Lawrence,這裡是我的開發筆記的網誌,如果你對我的文章有任何疑問或者有錯誤的話,歡迎留言讓我知道。