Azure Pipelines 代理程式
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
若要使用 Azure Pipelines 建置您的程式碼或部署您的軟體,您需要至少一個代理程式。 隨著程式代碼基底和小組成長,您將需要更多代理程式。
當您的管線執行時,系統會開始一或多個作業。 代理程式正在計算基礎結構,其中包含一次執行一個作業的已安裝代理程式軟體。
Azure Pipelines 提供數種不同類型的代理程式。
代理程式類型 | 描述 | 可用工時 |
---|---|---|
Microsoft 裝載的代理程式 \(英文\) | 由 Microsoft 裝載和管理的代理程式 | Azure DevOps Services |
自我裝載式代理程式 | 您設定和管理的代理程式,裝載於 VM 上 | Azure DevOps Services、Azure DevOps Server |
Azure 虛擬機擴展集代理程式 | 使用 Azure 虛擬機器擴展集的自我裝載式代理程式形式,可自動調整以符合需求 | Azure DevOps Services |
受控DevOps集區代理程式 | 受控DevOps集區是一項完全受控的服務,可讓代理程式上線的虛擬機或容器位於Microsoft Azure 訂用帳戶中,而不是在您自己的 Azure 訂用帳戶中 | Azure DevOps Services |
Microsoft 裝載的代理程式 \(英文\)
如果您的管線位於 Azure Pipelines 中,您可以使用Microsoft裝載的代理程式,輕鬆地執行作業。 使用 Microsoft 託管的代理程式,就不需要自己維護和升級。 您一律會取得管線中指定的最新版本的 VM 映像。 每次執行管線時,您都會為管線中的每個作業取得全新的虛擬機器。 虛擬機器會在一個作業之後捨棄 (這表示作業對虛擬機器檔案系統所做的任何變更,例如簽出程式碼,將無法用於下一個作業)。 Microsoft裝載的代理程式可以直接在 VM 或容器上執行作業。
Azure Pipelines 提供預先定義的代理程式集區 (名為 Azure Pipelines) 搭配 Microsoft 裝載的代理程式。
對於許多小組來說,這是執行作業的最簡單方式。 您可以先試用,看看這是否適用於您的組建或部署。 如果沒有,您可以使用 擴展集代理程式 或自我裝載代理程式。
提示
您可以免費試用Microsoft裝載的代理程式。
深入瞭解Microsoft裝載的代理程式。
自我裝載式代理程式
您自行設定和管理以執行作業的代理程式是 自我裝載的代理程式。 您可以在 Azure Pipelines 或 Azure DevOps Server (之前稱為 Team Foundation Server,TFS) 中使用自我裝載式代理程式。 自我裝載式代理程式可協助您擁有更全面的掌控,以安裝組建和部署所需的相依軟體。 此外,機器層級快取和組態會持續執行,以提升速度。
注意
雖然每部機器可以安裝多個代理程式,但我們強烈建議每部機器只安裝一個代理程式。 安裝兩個或多個代理程式可能會對效能和管線的結果造成負面影響。
提示
安裝自我裝載代理程式之前,您可能會想要查看Microsoft裝載的代理程式集區是否適合您。 在許多情況下,這是最簡單的方式。 試試看。
您可以在 Linux、macOS 或 Windows 電腦上安裝代理程式。 您也可以在 Docker 容器上安裝代理程式。 如需安裝自我裝載式代理程式的詳細資訊,請參閱:
注意
在macOS上,您必須清除下載封存上的特殊屬性,以防止在執行 tar 檔案時 ./config.sh
顯示每個元件的 Gatekeeper 保護。 下列命令會清除檔案上的擴充屬性:
xattr -c vsts-agent-osx-x64-V.v.v.tar.gz ## replace V.v.v with the version in the filename downloaded.
# then unpack the gzip tar file normally:
tar xvfz vsts-agent-osx-x64-V.v.v.tar.gz
在計算機上安裝代理程序之後,您可以視作業需要在該電腦上安裝任何其他軟體。
注意
代理程式廣泛回溯相容。 只要 Azure DevOps 不要求較高版本的代理程式,任何代理程式版本都應該與任何 Azure DevOps 版本相容。
我們僅支援最新版本的代理程序,因為這是保證擁有所有最新修補程式和錯誤修正的唯一版本。
節點執行器版本
代理程式隨附數個版本的 NodeJS 連結庫,以支援使用不同節點處理程式的目標工作。
所有官方 Azure DevOps 工作都會使用 Node 20 做為通用處理程式,不過,客戶可能仍會使用使用生命週期結束節點 6、節點 10 或節點 16 連結庫的自定義工作。 為了支援目前已達到生命週期結束的節點回溯相容性,我們提供下列自助方法來手動安裝指定的節點執行器。
手動安裝 Node 6 執行器。 如需手動安裝節點 6 執行器的詳細資訊,請參閱 Node 6 支援 以取得詳細資訊。
在您的管線中使用需要過期的 Node 6 連結庫NodeTaskRunnerInstaller@0工作。
安裝包含節點 6 的代理程式套件。
Azure Pipelines 提供兩個版本的代理程式套件。
- vsts-agent-* 套件支持節點 6。
- pipelines-agent-* 套件不支持節點 6。 此版本的套件未來會成為預設代理程式套件。
如果您知道您未使用任何節點 6 相依工作,而且您不希望在代理程式電腦上安裝 Node 6,您可以從 的 [替代代理程序下載 ] 區段 https://github.com/microsoft/azure-pipelines-agent/releases安裝代理程式。
Azure 虛擬機器擴展集代理程式
Azure 虛擬機擴展集代理程式是一種自我裝載代理程式的形式,可自動調整以符合您的需求。 這種彈性可降低您不斷執行專用代理程式的需求。 與裝載於 Microsoft 的代理程式不同,您可彈性選擇執行代理程式的機器大小和映像。
您可以指定虛擬機擴展集、待命的代理程式數目、擴展集中的虛擬機數目上限,而 Azure Pipelines 會為您管理代理程式的調整。
如需詳細資訊,請參閱 Azure 虛擬機器擴展集代理程式。
受控DevOps集區代理程式
受控DevOps集區可讓開發小組快速且輕鬆地啟動專為小組特定需求量身打造的 Azure DevOps 代理程式集區。 受控DevOps集區會實作安全性最佳做法、提供平衡成本和效能的旋鈕、提供最常見案例的路徑,並大幅減少建立和維護自定義集區所花費的時間。
受控DevOps集區是 Azure DevOps 虛擬機擴展集代理程式集區的演進,藉由改善自定義集區的延展性和可靠性,進一步簡化自定義集區建立。 受控 DevOps 集區是完全受控的服務,其虛擬機器或容器在 Microsoft azure 訂用帳戶即時支援代理程式,而非透過您的 Azure 訂用帳戶,情況與使用 Azure DevOps 虛擬機器擴展集代理程式集區時一樣。 如需詳細資訊,請參閱受控 DevOps 集區文件。
平行作業
平行作業 代表您可以在組織中同時執行的作業數目。 如果您的組織有單一平行作業,您可以在組織中一次執行單一作業,而任何其他並行作業會排入佇列,直到第一個作業完成為止。 若要同時執行兩個作業,需要兩個平行作業。 在 Azure Pipelines 中,您可以在 Microsoft 裝載的基礎結構或自己的 (自我裝載式) 基礎結構上執行平行作業。
預設情況下,Microsoft 在每個至少包含一項平行作業的組織中提供免費服務層。 視您需要執行的並行管線數目而定,您可能需要更多平行作業,才能同時使用多個 Microsoft 裝載的或自我裝載式代理程式。 如需平行作業和不同免費層服務的詳細資訊,請參閱 Azure Pipelines 中的平行作業。
您可能需要更多平行作業,才能同時使用多個代理程式:
重要
從 Azure DevOps Server 2019 開始,您不需要在版本中支付自我裝載並行作業的費用。 您只受限於您擁有的代理程式數目。
Capabilities
每個自我裝載的代理程式都有一組功能,指出它可以做什麼。 功能是代理程式軟體自動探索的名稱/值組,稱為 系統功能,或您定義的功能,稱為 使用者功能。
代理程式軟體會自動判斷各種系統功能,例如計算機的名稱、作業系統類型,以及計算機上安裝的特定軟體版本。 此外,機器中定義的環境變數會自動出現在系統功能清單中。
注意
將環境變數儲存為功能表示代理程序執行時,會使用預存功能值來設定環境變數。 此外,任何工作都不會挑選及使用代理程序執行時所做的環境變數變更。 如果您有變更的敏感性環境變數,而且不想將它們儲存為功能,您可以藉由設定 VSO_AGENT_IGNORE
環境變數來忽略它們,並以逗號分隔的變數清單來忽略它們。 例如, PATH
如果您要安裝軟體,您可能會想要忽略的重要變數。
當您撰寫管線時,您可以指定代理程式的特定 需求 。 系統只會將作業傳送給具有符合 管線中所指定需求的 代理程式。 因此,代理程式功能可讓您將作業導向特定代理程式。
注意
需求和功能是專為搭配自我裝載的代理程式使用而設計,因此作業可與符合作業需求的代理程式進行比對。 使用Microsoft裝載的代理程式時,您可以選取符合作業需求的代理程式映像,因此雖然可以將功能新增至Microsoft裝載的代理程式,但您不需要搭配Microsoft裝載的代理程式使用功能。
設定需求
若要將需求新增至 YAML 組建管線,請將這 demands:
一行新增至 pool
區段。
pool:
name: Default
demands: SpecialSoftware # exists check for SpecialSoftware
您可以檢查功能是否存在,或與功能值進行比較。 如需詳細資訊,請參閱 YAML 架構 - 需求。
設定代理程式功能
您可以流覽至 [代理 程式集區],然後選取 所需代理程式的 [功能 ] 索引標籤,以檢視代理程式的詳細數據,包括其版本和系統功能,以及管理其使用者功能。
在您的網頁瀏覽器中,流覽至 [代理程式集區]:
登入您的組織 (
https://dev.azure.com/{yourorganization}
)。選擇 [Azure DevOps]、 [組織設定]。
選擇 [ 代理程式集區]。
登入您的專案集合 (
http://your-server/DefaultCollection
)。選擇 [Azure DevOps]、 [集合設定]。
選擇 [ 代理程式集區]。
選擇 [Azure DevOps]、 [集合設定]。
選擇 [ 代理程式集區]。
瀏覽至 [功能] 索引標籤:
從 [ 代理程式集區] 索引卷標中,選取所需的代理程式集區。
選取 [ 代理程式 ],然後選擇所需的代理程式。
選擇 [功能] 索引標籤。
注意
Microsoft裝載的代理程式不會顯示系統功能。 如需Microsoft裝載代理程式上安裝的軟體清單,請參閱 使用Microsoft裝載的代理程式。
從 [ 代理程式集區 ] 索引卷標中,選取所需的集區。
選取 [ 代理程式 ],然後選擇所需的代理程式。
選擇 [功能] 索引標籤。
從 [ 代理程式集區 ] 索引卷標中,選取所需的集區。
選取 [ 代理程式 ],然後選擇所需的代理程式。
選擇 [功能] 索引標籤。
若要向代理程式註冊新功能,請選擇 [ 新增新功能]。
提示
在自我裝載代理程式上安裝新軟體之後,您必須重新啟動代理程式,才能顯示新功能。 如需詳細資訊,請參閱重新啟動 Windows 代理程式、重新啟動 Linux 代理程式和重新啟動 Mac 代理程式。
通訊
與 Azure Pipelines 通訊
與 Azure DevOps Server 通訊
代理程式會與 Azure Pipelines 或 Azure DevOps Server 通訊,以判斷需要執行的作業,並回報記錄與作業狀態。 代理程式一律會起始此通訊。 根據您設定代理程式的方式,從代理程式往 Azure Pipelines 或 Azure DevOps Server 的所有訊息都會經由 HTTPS 或 HTTPS 傳送。 此提取模型可讓代理程式在不同的拓撲中設定,如下列範例所示。
以下是代理程式與 Azure Pipelines 或 Azure DevOps Server 之間的常見通訊模式。
用戶藉由將代理程式新增至 代理程式集區,向 Azure Pipelines 或 Azure DevOps Server 註冊代理程式。 您必須是 代理程式集區管理員 ,才能在該代理程式集區中註冊代理程式。 代理程式集區管理員的身分識別只有在註冊時才需要,而且不會保存在代理程式上。 它不會用於代理程式與 Azure Pipelines 或 Azure DevOps Server 之間的任何進一步通訊。 註冊完成後,代理程式會下載 接聽程式 OAuth 令牌 ,並使用它來接聽作業佇列。
代理程式會接聽,查看是否使用 HTTP 長輪詢在 Azure Pipelines/Azure DevOps Server 的作業佇列中張貼新的作業要求。 當作業可用時,代理程式會下載作業和作業 特定的 OAuth 令牌。 Azure Pipelines/Azure DevOps Server 會針對管線中指定的範圍身分識別產生短期令牌。 代理程式會使用令牌來存取或修改該作業內 Azure Pipelines 或 Azure DevOps Server 上的資源。 例如,若要存取原始碼或上傳測試結果。
代理程式會在作業完成之後捨棄作業特定的 OAuth 令牌,然後返回檢查是否有使用接聽程式 OAuth 令牌的新作業要求。
訊息承載會在代理程式之間進行交換,並使用非對稱加密來保護 Azure Pipelines/Azure DevOps Server。 每個代理程式都有公開-私密金鑰組,且公開金鑰會在註冊期間與伺服器交換。 在將作業承載傳送至代理程式之前,伺服器會先使用公開金鑰進行加密。 代理程式會使用其私密金鑰為作業內容解密。 此方法會在與代理程式交換時保護儲存在管線或變數群組中的秘密。
注意
代理程式支援UTF-8用戶端編碼輸出。 不過,如果您的系統具有與UTF-8不同的編碼方式,您可能會在記錄輸出時遇到問題。 例如,記錄可能包含系統編碼無法辨識的字元,因此它們可能會顯示為加碼或遺漏符號。
進行通訊以部署至目標伺服器
當您使用代理程式將成品部署至伺服器組時,代理程式必須具備對這些伺服器的「直視」連線。 Microsoft 托管的代理池默认与 Azure 中运行的 Azure 网站和服务器建立连接。
注意
如果您的 Azure 資源是在 Azure 虛擬網絡 中執行,您可以取得代理程式 IP 範圍,其中已部署 Microsoft 裝載的代理程式,讓您可以設定 Azure VNet 的防火牆規則,以允許代理程式存取。
如果您的內部部署環境無法連線到Microsoft裝載的代理程式集區,這通常是因為中繼防火牆所致,您必須在內部部署計算機上手動設定自我裝載代理程式。 代理程式必須能夠連線到目標內部部署環境,以及存取因特網以連線到 Azure Pipelines 或 Team Foundation Server,如下列圖解所示。
驗證
若要註冊代理程式,您必須是代理程式集區中系統管理員角色的成員。 代理程式集區管理員的身分識別只有在註冊時才需要,而且不會保存在代理程式上。 它不會用於代理程式與 Azure Pipelines 或 Azure DevOps Server 之間的任何後續通訊。 此外,您必須是伺服器上的本機系統管理員才能設定代理程式。
當您註冊代理程式時,請選擇下列驗證類型,而代理程式設定會提示您輸入每個驗證類型所需的特定其他資訊。 如需詳細資訊,請參閱 自我裝載代理程式驗證選項。
此外,Windows 代理程式在 Azure DevOps Server 上有下列兩個驗證選項。
- 透過新技術 LAN 管理員(NTLM) 或 Kerberos 等 Windows 驗證 配置,交涉以登入使用者以外的使用者身分連線至 Azure DevOps Server。 選取 [交涉] 之後,系統會提示您輸入認證。
- 整合式 (預設) 使用登入使用者的認證,透過NTLM或 Kerberos 等 Windows 驗證配置,將 Windows 代理程式連線到 Azure DevOps Server。 選擇此方法之後,系統不會提示您輸入認證。
重要
您的伺服器必須 設定為支持驗證方法 ,才能使用替代、交涉或整合式驗證。
用於註冊代理程式的驗證方法只會在代理程式註冊期間使用。 若要深入瞭解代理程式在註冊后如何與 Azure Pipelines 通訊,請參閱 與 Azure Pipelines 或 Azure DevOps Server 通訊。
互動與服務的比較
您可以服務或互動式流程的形式執行自我裝載式代理程式。
設定代理程式之後,建議您先在互動式模式中嘗試它,以確定其運作正常。 接著,若要用於生產,建議您在下列其中一個模式中執行代理程式,如此一來,代理程式便可維持穩定運作。 這些模式也可確保在電腦重新啟動時自動啟動代理程式。
即服務。 您可以使用作業系統的服務管理員來管理代理程式的生命週期。 此外,當您以服務身分執行代理程式時,自動升級代理程序的體驗會更好。
作為啟用自動登入的互動式程式。 在某些情况下,可能需要以交互方式运行代理以供生产使用,例如运行 UI 测试。 將代理程式設定為以此模式來執行時,也會停用螢幕保護裝置。 某些網域原則可能會讓您無法啟用自動登入或停用螢幕保護程式。 在這種情況下,您可能需要尋求網域原則的豁免,或在不適用網域原則的工作組計算機上執行代理程式。
注意
當您啟用自動登入或停用螢幕保護程式時,可能會有安全性風險,因為您可以讓其他使用者前往計算機,並使用自動登入的帳戶。 若您將代理程式設定為以此方式執行,請務必確保電腦實際上受到保護;例如,位於安全設施中。 如果您使用遠端桌面來存取代理程式執行時自動登入的計算機,只要關閉遠端桌面就會鎖定計算機,而且此代理程式上執行的任何 UI 測試都可能會失敗。 若要避免這種情況,請使用 tscon 命令從遠端桌面中斷連線。 例如:
%windir%\System32\tscon.exe 1 /dest:console
代理程式帳戶
無論您是以服務或互動方式執行代理程式,都可以選擇用來執行代理程式的計算機帳戶。 代理程式帳戶的選擇完全取決於在建置與部署作業中執行的工作需求。
例如,若要使用 Windows 驗證 執行工作來存取外部服務,代理程式必須使用具有該服務存取權的帳戶來執行。 然而,若您正在執行需要瀏覽器的 Selenium 或自動程式化 UI 測試等 UI 測試,則會在代理程式帳戶的內容中啟動瀏覽器。
在 Windows 上,您應該考慮使用服務帳戶,例如網路服務或本地服務。 這些帳戶許可權會受到限制,且其密碼不會過期,這表示代理程式需要一段時間的管理較少。
這些認證與您向 Azure Pipelines 或 Azure DevOps Server 註冊代理程式時所使用的認證不同。
代理程式版本與升級
我們會每隔幾周在 Azure Pipelines 中更新代理程序軟體。
我們會以 格式 {major}.{minor}
指出代理程式版本。
例如,如果代理程式版本是 2.1
,則主要版本是 2
,而次要版本為 1
。
Microsoft裝載的代理程式一律保持在最新狀態。 如果較新版本的代理程式在次要版本中不同,Azure Pipelines 可以自動更新自我裝載的代理程式。 您可以在 [代理程式集區] 中設定此設定、選取代理程式、[設定] - 預設值為已啟用。 當管線中使用的平臺功能或其中一項工作需要較新版本的代理程式時,就會要求升級。
如果您以互動方式執行自我裝載代理程式,或有較 新的主要 代理程式版本可供使用,則您可能必須手動升級代理程式。 您可以從組織的 [代理程式集區] 索引標籤輕鬆地 升級代理 程式。 沒有相容的代理程式就無法執行管線
更新自我裝載代理程式
流覽至 [項目設定]、[ 代理程式集區]。
選取您的代理程式集區,然後選擇 [ 更新所有代理程式]。
您也可以從... 選單選擇 [更新代理程式] 來個別更新代理程式。
選取 [ 更新] 以確認更新。
更新要求會針對集區中的每個代理程式排入佇列,並在任何目前執行中的作業完成時執行。 升級通常需要一些時間 -- 足夠長的時間下載最新版的代理程式軟體 (大約 200 MB),解壓縮它,並使用新版本重新啟動代理程式。 您可以在 [代理程式] 索引標籤上監視代理程式的狀態。
我們會使用 Azure DevOps Server 中的每個更新來更新代理程式軟體。
我們會以 格式 {major}.{minor}
指出代理程式版本。
例如,如果代理程式版本是 2.1
,則主要版本為 2,次要版本為 1。
當您的 Azure DevOps Server 有較新版本的代理程式,且較新的代理程式在次要版本中只有不同時,通常會自動升級。 當管線中使用的平臺功能或其中一項工作需要較新版本的代理程式時,就會要求升級。 從 Azure DevOps Server 2019 開始,您不需要等候新的伺服器版本。 您可以將 新版本的代理程式上傳至應用層,而該版本會作為升級提供。
如果您以互動方式執行代理程式,或如果有較 新的主要 代理程式版本可供使用,則您可能必須手動升級代理程式。 您可以從專案集合下的 [代理程式集區] 索引標籤輕鬆升級代理程式。 沒有相容的代理程式,管線就無法執行。
您可以流覽至 [代理程式集區] 並選取所需代理程式的 [功能] 索引標籤,如設定代理程式功能中所述,來檢視代理程式的版本。
若要以程式設計方式觸發代理程式更新,您可以使用代理程式更新 API,如如何以程式設計方式觸發特定代理程式集區的代理程式更新?一節所述。
注意
對於沒有因特網存取的伺服器,請手動將代理程式 zip 檔案複製到下列資料夾,以作為本機檔案使用。 如果不存在,請 建立 Agents 資料夾。
- Windows:
%ProgramData%\Microsoft\Azure DevOps\Agents
- Linux:
usr/share/Microsoft/Azure DevOps/Agents
- macOS:
usr/share/Microsoft/Azure DevOps/Agents
如果不存在,請建立 Agents 資料夾。
常見問題集
如何? 確定我有最新的代理程式版本嗎?
瀏覽至 [ 代理程式集區 ] 索引標籤:
登入您的組織 (
https://dev.azure.com/{yourorganization}
)。選擇 [Azure DevOps]、 [組織設定]。
選擇 [ 代理程式集區]。
登入您的專案集合 (
http://your-server/DefaultCollection
)。選擇 [Azure DevOps]、 [集合設定]。
選擇 [ 代理程式集區]。
選擇 [Azure DevOps]、 [集合設定]。
選擇 [ 代理程式集區]。
按兩下包含代理程式的集區。
請確定代理程式已啟用。
瀏覽至 [功能] 索引標籤:
從 [ 代理程式集區] 索引卷標中,選取所需的代理程式集區。
選取 [ 代理程式 ],然後選擇所需的代理程式。
選擇 [功能] 索引標籤。
注意
Microsoft裝載的代理程式不會顯示系統功能。 如需Microsoft裝載代理程式上安裝的軟體清單,請參閱 使用Microsoft裝載的代理程式。
從 [ 代理程式集區 ] 索引卷標中,選取所需的集區。
選取 [ 代理程式 ],然後選擇所需的代理程式。
選擇 [功能] 索引標籤。
從 [ 代理程式集區 ] 索引卷標中,選取所需的集區。
選取 [ 代理程式 ],然後選擇所需的代理程式。
選擇 [功能] 索引標籤。
尋找
Agent.Version
功能。 您可以針對最新的已發佈代理程式版本檢查此值。 請參閱 Azure Pipelines 代理程式 ,並檢查頁面以取得列出的最高版本號碼。當每個代理程式執行需要較新版本代理程式的工作時,就會自動更新它本身。 如果您想要手動更新某些代理程式,請以滑鼠右鍵按下集區,然後選取 [ 更新所有代理程式]。
我可以更新屬於 Azure DevOps Server 集區一部分的代理程式嗎?
是。 從 Azure DevOps Server 2019 開始,您可以設定伺服器來尋找本機磁碟上的代理程式套件檔案。 此組態將會覆寫伺服器發行時隨附的預設版本。 當伺服器無法存取因特網時,也會套用此案例。
從可存取因特網的計算機,從 Azure Pipelines Agent GitHub Releases 頁面下載最新版的代理程式套件檔案(.zip或.tar.gz窗體)。
使用您選擇的方法,將下載的套件檔案傳輸至每個 Azure DevOps Server 應用層(例如 USB 磁碟驅動器、網路傳輸等等)。 將代理程式檔案放在資料夾下
%ProgramData%\Microsoft\Azure DevOps\Agents
。 如果不存在,請 建立 Agents 資料夾。一切準備就緒! 您的 Azure DevOps Server 現在會在更新代理程式時使用本機檔案。 當每個代理程式執行需要較新版本代理程式的工作時,就會自動更新它本身。 但如果您想要手動更新某些代理程式,請以滑鼠右鍵按兩下集區,然後選擇 [ 更新所有代理程式]。
自我裝載代理程式具有 Microsoft 所裝載代理程式的任何效能優勢嗎?
在許多情況下,是。 具體而言:
若您使用自我裝載代理程式,您可以執行累加建置。 例如,如果您定義未清除存放庫且不會執行全新組建的管線,您的組建通常會更快執行。 除非您使用快取等功能,否則您無法透過Microsoft裝載的代理程式取得這些優點,因為代理程式在管線完成後終結。
Microsoft 裝載的代理程式可能需要較長時間才能啟動您的組建。 雖然作業通常需要幾秒鐘的時間才能指派給Microsoft裝載的代理程式,但有時可能需要幾分鐘的時間,才能根據系統上的負載來配置代理程式。
可以在同一部電腦上安裝多個自我裝載代理程式嗎?
是。 此方法適用於執行不耗用許多共用資源的作業的代理程式。 例如,您可以嘗試執行大部分協調部署之版本的代理程式,而且不會在代理程式本身執行太多工作。
您可能會發現在其他情況下,您無法在同一部計算機上執行多個代理程式來獲得太多效率。 例如,執行耗用大量磁碟和 I/O 資源的組建的代理程式可能不值得。
如果平行建置作業使用相同的單一工具部署,例如 npm 套件,您可能也會遇到問題。 例如,某個組建可能在另一個組建正要使用相依性時加以更新,這可能會造成不可靠的結果與錯誤。
當管線作業取消時,代理程序的行為為何?
針對 Microsoft 裝載的代理程式,代理程式會中斷並傳回至 Azure Pipelines 集區。
針對自我裝載式代理程式:
當管線取消時,代理程式會將一連串的命令傳送至執行目前步驟的處理序。
- 第一個命令會傳送逾時 7.5 秒。
- 如果進程未終止,則會以 2.5 秒的逾時傳送第二個命令。
- 如果進程未終止,代理程式會命令它被終止。
- 如果進程忽略兩個初始終止要求,則會強制終止。
從初始要求到終止大約需要 10 秒。
發出給處理序以取消管線的命令會根據代理程式作業系統而有所不同。
- macOS 和 Linux - 傳送的命令為 SIGINT,後面接著 SIGTERM,然後是 SIGKILL。
- Windows - 傳送至處理序的命令為 Ctrl+C,後面接著 Ctrl+Break,然後是 Process.Kill。
如何以程式設計方式觸發特定代理程式集區的代理程式更新?
您可以使用下列 API 來觸發集區的代理程式更新:
POST https://dev.azure.com/{organization}/_apis/distributedtask/pools/{poolId}/messages?agentId={agentId}&api-version=6.0
POST https://{server url}/tfs/{collection}/_apis/distributedtask/pools/{poolId}/messages?agentId={agentId}&api-version=6.0
注意
如需 API 和 Azure DevOps Server 版本對應的詳細資訊,請參閱 API 和 Azure DevOps Server 版本對應
URI 參數
名稱 | 位於 | 必要 | 類型 | 描述 |
---|---|---|---|---|
agentId |
query | False | 字串 | 要更新的代理程式。 如果未指定 - 會針對所有代理程式觸發更新。 |
organization |
path | True | 字串 | Azure DevOps 組織的名稱。 |
poolId |
path | True | 整數 int32 | 要使用的代理程式集區 |
api-version |
query | False | 字串 | 要使用的 API 版本。 值應該設定為 『6.0』,以使用此版本的 API。 |
若要觸發代理程式更新 - 要求本文應該是空的。
注意
Azure Pipelines 代理程式在 GitHub 上 開放原始碼。
深入了解
如需代理程式的詳細資訊,請參閱使用 Azure DevOps 建置應用程式的下列課程模塊學習路徑。