1. 編譯服務器
在 Azure Pipelines 中至少需要一個編譯服務器的 Agent 才能編譯代碼或發布軟件。Azure DevOps 本身已經提供了一個 Agent,但出於各種理由(需要特殊的編譯打包環境、需要更高的性能、需要更多的控制權等)很多時候需要一些自托管代理。這篇文章將講解如何在 Windows 系統上安裝及配置 Build Agent(主要基於之前幾篇文章所構建的環境)。
2. 下載 Agent 安裝程序
首先進入要安裝 Build Agent 的 Windows 系統,然后訪問 Azure DevOps,在首頁的左下角點擊 Organization settings,進入 Organization Settings 頁面后選中左側菜單的 Agent pools 菜單項,進入 Agent pools 頁面,這時候可以看到已經有兩個 Agent Pool,分別是 Default 和 Azure Pipelines。
選中 Default 進入 Agent Pool 的詳細頁面,然后點擊右上角的 Net agent 按鈕,出現一個下載並安裝 Agent 的教學頁面。點擊 Download 把 Agent 安裝包下載到 downloads 目錄。
然后用管理員的方式打開 PowerShell,輸入教學頁面中 **Create the agent ** 這段的內容:
PS C:\> mkdir agent ; cd agent
PS C:\agent> Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("$HOME\Downloads\vsts-agent-win-x64-2.184.2.zip", "$PWD")
這段腳本在 C 盤創建了 agent
目錄,並且將剛剛下載的 agent 文件解壓到這個目錄。
然后輸入 C:\agent> .\config.cmd
開始配置 Agent。
3. 創建 personal access token
在開始配置 Agent 之前,如果你的 Windows 系統與 Azure DevOps 不在同一個域中,你還需要一個 personal access token 來獲得訪問 Azure DevOps 的權限。這一節將講解如何獲得這個 token。
點擊頁面右上角的 user settings 按鈕,在彈出的菜單中選中 Personal access tokens。
在 Personal Access Tokens 頁面點擊 New Token 按鈕。
在彈出的表單中隨便填個名字,然后點擊 Show all scopes 按鈕:
在 Agent Pools 里選擇 Read & manage,然后點擊 Create 按鈕創建 token:
創建 token 以后記得復制並保存,因為以后將不再顯示這個 token:
4. Agent 中的各種選項
接下來將介紹 config 中的各種選項
4.1 身份驗證
- server URL:Azure DevOps 的地址。
- authentication type:有 PAT 和 negotiate 兩個選擇,前者需要輸入 personal access token,后者需要輸入用戶名和密碼。這里使用之前已經創建好的 personal access token。
4.2 Pool 和 Agent 的名字
- agent pool:輸入需要加入的 agent pool 的名字,直接按回車是默認值,默認值是 Default。
- agent name:輸入 agent 的名字,可以直接按回車輸入默認名字。
4.3 設置 Agent
- work folder:Agent 的工作目錄,默認是
_work
。 - Perform an unzip for tasks for each step:一個額外的安全選項,直接回車選擇默認值。
- run agent as service:是否讓 Agent 作為 windows service 運行。這里我選擇了 Y,為了以后每次啟動 Windows 都直接啟動。
- User account to use for the service:輸入作為 windows service 運行時的用戶名。
- Password for the account:前面輸入的用戶名對應的密碼。
所有流程跑完以后截圖如下(因為我在中文 Windows 上截的圖,所以參數的名字有出入):
5. 管理 Agent
回到 Default 這個 Agent Pool 的詳細頁面,切換到 Agents 頁面,可以看到剛剛新添加的 Agent,可以通過將 Enbabled 這個開關關閉這個 Agent,也可以在 More... 菜單中刪除這個 Agent。
進入這個 Agent 的詳細頁面,可以看到 Jobs 和 Capabilities 兩個頁面,其中 Jobs 是已經安排的工作,不過現在是空的。而 Capabilities 是這個 Agent 的各項能耐,例如安裝的 .NET 版本,之類的。
6. 修改 Pipeline
有了新的 Agent,就需要將 Pipeline 使用的 Pool 改為 Agent 所在的 Pool。在 YAML 中將這段:
pool:
vmImage: 'windows-latest'
作如下修改:
pool: 'Default'
即可把 Pipeline 使用的 Agent Pool 指定為 'Default'。重新 Run 一次這個 Pipeline,之后可以在 Agent 的 Jobs 頁面看到運行的 Job 的內容。
有些情況下這個 Pipeline 會保這種錯:
This pipeline needs permission to access a resource before this run can continue
應該是權限的問題,需要打開'Default' 的詳細頁面,選中 Security 標簽頁,然后打開 Grant access permission to all pipelines(為所有管道授予訪問權限),這個操作很無腦,即所有權限都滿上。再次運行 Pipeline 就不會報錯了。
7. 最后
這篇文章簡單介紹了如果自托管 Windows 代理,更多的內容請參考下面的文檔:
Deploy an Azure Pipelines agent on Windows - Azure Pipelines Microsoft Docs