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

作業可以直接在代理程式的主計算機上或在容器中執行。

Microsoft 裝載的代理程式 \(英文\)

如果您的管線位於 Azure Pipelines 中,您可以使用 Microsoft 裝載的代理程式,輕鬆地執行作業。 使用 Microsoft 託管的代理程式,就不需要自己維護和升級。 您一律會取得管線中指定的最新 VM 映像版本。 每次執行管線時,您都會為管線中的每個作業取得全新的虛擬機器。 虛擬機器會在一個作業之後捨棄 (這表示作業對虛擬機器檔案系統所做的任何變更,例如簽出程式碼,將無法用於下一個作業)。 Microsoft 裝載的代理程式可以直接在 VM容器上執行作業。

Azure Pipelines 會使用 Microsoft 裝載的代理程式,提供名為 Azure Pipelines 的預先定義代理程式集區。

對於許多小組來說,這是執行作業的最簡單方式。 您可以先試用,看看這是否適用於您的組建或部署。 如果沒有,您可以使用 擴展集代理程式 或自我裝載代理程式。

提示

您可以免費試用 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 工作都會使用節點 10 作為通用處理程式,不過,客戶可能仍會使用使用過期的 Node 6 連結庫的自定義工作。 為了支援目前已達到生命週期結束的節點回溯相容性,我們提供下列自助方法來手動安裝指定的節點執行器。

  • 手動安裝 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 虛擬機擴展集代理程式

平行作業

平行作業 代表您可以在組織中同時執行的作業數目。 如果您的組織有單一平行作業,您可以在組織中一次執行單一作業,並在第一個作業完成之前排入佇列的任何其他並行作業。 若要同時執行兩個作業,您需要兩個平行作業。 在 Azure Pipelines 中,您可以在 Microsoft 裝載的基礎結構或您自己的 (自我裝載) 基礎結構上執行平行作業。

Microsoft 預設會在每個組織中提供免費層的服務,其中包含至少一個平行作業。 視您需要執行的並行管線數目而定,您可能需要更多平行作業,才能同時使用多個 Microsoft 裝載或自我裝載的代理程式。 如需平行作業和不同免費層服務的詳細資訊,請參閱 Azure Pipelines 中的平行作業。

您可能需要更多平行作業,才能同時使用多個代理程式:

重要

從 Azure DevOps Server 2019 開始,您不需要在版本中支付自我裝載並行作業的費用。 您只受限於您擁有的代理程式數目。

功能

每個自我裝載的代理程式都有一組功能,指出它可以做什麼。 功能是代理程式軟體自動探索的名稱/值組,在此案例中稱為 系統功能,或您所定義的名稱/值組,在此情況下稱為 使用者功能

代理程式軟體會自動判斷各種系統功能,例如計算機的名稱、作業系統類型,以及計算機上安裝的特定軟體版本。 此外,機器中定義的環境變數會自動出現在系統功能清單中。

注意

將環境變數儲存為功能表示代理程序執行時,會使用預存功能值來設定環境變數。 此外,任何工作都不會挑選及使用代理程序執行時所做的環境變數變更。 如果您有變更的敏感性環境變數,而且不想將它們儲存為功能,您可以藉由設定 VSO_AGENT_IGNORE 環境變數來忽略它們,並以逗號分隔的變數清單來忽略它們。 例如, PATH 如果您要安裝軟體,您可能會想要忽略的重要變數。

當您撰寫管線時,您可以指定代理程式的特定 需求 。 系統只會將作業傳送給具有符合 管線中所指定需求的 代理程式。 因此,代理程式功能可讓您將作業導向特定代理程式。

注意

需求和功能是專為搭配自我裝載的代理程式使用而設計,因此作業可與符合作業需求的代理程式進行比對。 使用 Microsoft 裝載的代理程式時,您會為符合作業需求的代理程式選取映像,因此雖然可以將功能新增至 Microsoft 裝載的代理程式,但您不需要搭配 Microsoft 裝載的代理程式使用功能。

設定需求

若要將需求新增至 YAML 組建管線,請將這 demands: 一行新增至 pool 區段。

pool:
  name: Default
  demands: SpecialSoftware # exists check for SpecialSoftware

您可以檢查功能是否存在,或與功能值進行比較。 如需詳細資訊,請參閱 YAML 架構 - 需求

設定代理程式功能

您可以流覽至 [代理 程式集區],然後選取 所需代理程式的 [功能 ] 索引標籤,以檢視代理程式的詳細數據,包括其版本和系統功能,以及管理其使用者功能。

  1. 在您的網頁瀏覽器中,流覽至 [代理程式集區]:

    1. 登入您的組織 (https://dev.azure.com/{yourorganization})。

    2. 選擇 [Azure DevOps]、 [組織設定]。

      選擇 [組織設定]。

    3. 選擇 [ 代理程式集區]。

      選擇 [代理程式集區] 索引標籤。

    1. 登入您的專案集合 (http://your-server/DefaultCollection)。

    2. 選擇 [Azure DevOps]、 [集合設定]。

      選擇 [集合設定]。

    3. 選擇 [ 代理程式集區]。

      選擇 [代理程式集區]。

    1. 選擇 [Azure DevOps]、 [集合設定]。

      集合設定,2019。

    2. 選擇 [ 代理程式集區]。

      選擇 [代理程式集區],2019。

  2. 瀏覽至 [功能] 索引標籤:

    1. 從 [ 代理程式集區] 索引卷標中,選取所需的代理程式集區。

      從 [代理程式集區] 中,選取所需的代理程式集區。

    2. 選取 [ 代理程式 ],然後選擇所需的代理程式。

      選取 [代理程式],然後選擇代理程式。

    3. 選擇 [功能] 索引標籤。

      選擇 [功能] 索引標籤。

      注意

      Microsoft 裝載的代理程式不會顯示系統功能。 如需 Microsoft 裝載代理程式上安裝的軟體清單,請參閱 使用 Microsoft 裝載的代理程式

    1. 從 [ 代理程式集區 ] 索引卷標中,選取所需的集區。

      選取所需的集區。

    2. 選取 [ 代理程式 ],然後選擇所需的代理程式。

      選取 [代理程式],然後選擇所需的代理程式。

    3. 選擇 [功能] 索引標籤。

      [代理程式功能] 索引標籤。

    1. 從 [ 代理程式集區 ] 索引卷標中,選取所需的集區。

      選取所需的索引標籤 2019。

    2. 選取 [ 代理程式 ],然後選擇所需的代理程式。

      選擇所需的代理程式 2019。

    3. 選擇 [功能] 索引標籤。

      選擇 [功能] 索引標籤,2019。

  3. 若要向代理程式註冊新功能,請選擇 [ 新增新功能]。

提示

在自我裝載代理程式上安裝新軟體之後,您必須重新啟動代理程式,才能顯示新功能。 如需詳細資訊,請參閱重新啟動 Windows 代理程式重新啟動 Linux 代理程式和重新啟動 Mac 代理程式

通訊

與 Azure Pipelines 通訊

與 Azure DevOps Server 通訊

代理程式會與 Azure Pipelines 或 Azure DevOps Server 通訊,以判斷需要執行的作業,並回報記錄與作業狀態。 此類通訊會一律由代理程式起始。 根據您設定代理程式的方式,從代理程式往 Azure Pipelines 或 Azure DevOps Server 的所有訊息都會經由 HTTPS 或 HTTPS 傳送。 此提取模型可讓代理程式在不同的拓撲中進行設定,如下所示。

內部部署安裝中的代理程式拓撲。

Azure DevOps Services 中的代理程序拓撲。

以下為代理程式與 Azure Pipelines 或 Azure DevOps Server 之間的常見通訊模式。

  1. 用戶藉由將代理程式新增至 代理程式集區,向 Azure Pipelines 或 Azure DevOps Server 註冊代理程式。 您必須是 代理程式集區管理員 ,才能在該代理程式集區中註冊代理程式。 代理程式集區系統管理員的身分識別只有在進行註冊時才需使用,且不會保留在代理程式上,也不會用於代理程式與 Azure Pipelines 或 Azure DevOps Server 的任何進一步通訊。 註冊完成後,代理程式會下載 接聽程式 OAuth 令牌 ,並使用它來接聽作業佇列。

  2. 代理程式會使用 HTTP 長時間輪詢進行接聽,以得知 Azure Pipelines/Azure DevOps Server 的作業佇列中是否針對代理程式張貼了新的作業要求。 當作業可用時,代理程式會下載作業以及 作業特定的 OAuth 令牌。 此令牌是由 Azure Pipelines/Azure DevOps Server 針對管線中指定的範圍身分識別所產生。 該權杖僅具短暫效力,而在該作業內,代理程式會將其用來在 Azure Pipelines 或 Azure DevOps Server 上存取資源 (例如原始程式碼) 或修改資源 (例如上傳測試結果)。

  3. 作業完成後,代理程式會捨棄作業專用的 OAuth 權杖,然後回頭確認是否有使用接聽程式 OAuth 權杖的新作業要求。

訊息承載會在代理程式之間進行交換,並使用非對稱加密來保護 Azure Pipelines/Azure DevOps Server。 每個代理程式都有公開-私密金鑰組,且公開金鑰會在註冊期間與伺服器交換。 在將作業承載傳送至代理程式之前,伺服器會先使用公開金鑰進行加密。 代理程式會使用其私密金鑰為作業內容解密。 當儲存於管線或變數群組中的祕密與代理程式交換時,會透過這種方式保護祕密。

注意

代理程式支援UTF-8用戶端編碼輸出。 不過,如果您的系統具有與UTF-8不同的編碼方式,您可能會在記錄輸出時遇到問題。 例如,記錄可能包含系統編碼無法辨識的字元,因此它們可能會顯示為加碼或遺漏符號。

進行通訊以部署至目標伺服器

當您使用代理程式將成品部署至伺服器組時,代理程式必須具備對這些伺服器的「直視」連線。 Microsoft 托管的代理池默认与 Azure 中运行的 Azure 网站和服务器建立连接。

注意

如果您的 Azure 資源是在 Azure 虛擬網絡 中執行,您可以取得部署 Microsoft 裝載代理程式的代理程式 IP 範圍,以便設定 Azure VNet 的防火牆規則,以允許代理程式存取。

若您的內部部署環境無法連線至裝載於 Microsoft 的代理程式集區 (通常是中繼防火牆所致),您將需要在內部部署電腦上手動設定自我裝載式代理程式。 代理程式必須與目標內部部署環境建立連線並存取網際網路,才可連線至 Azure Pipelines 或 Team Foundation Server,如下圖所示。

內部部署環境的代理程式連線能力

驗證

若要註冊代理程式,您必須是代理程式集區中系統管理員角色的成員。 代理程式集區系統管理員的身分識別只有在進行註冊時才需使用,且不會保留在代理程式上,也不會用於代理程式與 Azure Pipelines 或 Azure DevOps Server 的任何後續通訊。 此外,您必須是伺服器上的本機系統管理員才能設定代理程式。

當您註冊代理程式時,請選擇下列驗證類型,而代理程式設定會提示您輸入每個驗證類型所需的特定其他資訊。 如需詳細資訊,請參閱 自我裝載代理程式驗證選項

Windows 代理程式在 Azure DevOps Server 上有下列兩個額外的驗證選項。

  • 透過NTLM或 Kerberos 等 Windows 驗證 配置,交涉 連線 Azure DevOps Server 作為登入使用者以外的使用者。 選取 [交涉] 之後,系統會提示您輸入認證。
  • 整合式 (預設值) 會使用登入使用者的認證,透過NTLM或 Kerberos 等 Windows 驗證配置,將 Windows 代理程式 連線 至 Azure DevOps Server。 選擇此方法之後,系統不會提示您輸入認證。

重要

您的伺服器必須 設定為支持驗證方法 ,才能使用替代、交涉或整合式驗證。

用於註冊代理程式的驗證方法只會在代理程式註冊期間使用。 若要深入瞭解代理程式在註冊后如何與 Azure Pipelines 通訊,請參閱 與 Azure Pipelines 或 Azure DevOps Server 通訊。

互動與服務的比較

您可以服務或互動式流程的形式執行自我裝載式代理程式。 設定完代理程式後,建議您先在互動模式中試用,確定可正常運作。 接著,若要用於生產,建議您在下列其中一個模式中執行代理程式,如此一來,代理程式便可維持穩定運作。 這些模式也可確保在電腦重新啟動時自動啟動代理程式。

  1. 即服務。 您可以利用作業系統的服務管理員來管理代理程式的生命週期。 此外,以服務形式執行代理程式時,您可獲得更好的自動升級體驗。

  2. 作為啟用自動登入的互動式程式。 在某些情况下,可能需要以交互方式运行代理以供生产使用,例如运行 UI 测试。 將代理程式設定為以此模式來執行時,也會停用螢幕保護裝置。 某些網域原則可能會讓您無法啟用自動登入或停用螢幕保護程式。 在這種情況下,您可能需要尋求網域原則的豁免,或在不適用網域原則的工作組計算機上執行代理程式。

    注意

    當您啟用自動登入或停用螢幕保護程式時,可能會有安全性風險,因為您可以讓其他使用者前往計算機,並使用自動登入的帳戶。 若您將代理程式設定為以此方式執行,請務必確保電腦實際上受到保護;例如,位於安全設施中。 如果您使用遠端桌面來存取代理程式執行時自動登入的計算機,只要關閉遠端桌面就會鎖定計算機,而且此代理程式上執行的任何 UI 測試都可能會失敗。 若要避免這種情況,請使用 tscon 命令從遠端桌面中斷連線。 例如:

    %windir%\System32\tscon.exe 1 /dest:console

代理程式帳戶

無論您是以服務或互動方式執行代理程式,都可以選擇用來執行代理程式的計算機帳戶。 (請注意,這與您向 Azure Pipelines 或 Azure DevOps Server 註冊代理程式時所使用的認證不同。代理程式帳戶的選擇完全取決於在建置和部署作業中執行的工作需求。

例如,若要執行使用 Windows 驗證 存取外部服務的工作,您必須使用具有該服務存取權的帳戶來執行代理程式。 不過,如果您執行UI測試,例如 Selenium 或需要瀏覽器的自動程式化 UI 測試,瀏覽器就會在代理程式帳戶的內容中啟動。

在 Windows 上,您應該考慮使用服務帳戶,例如網路服務或本地服務。 這些帳戶具有限制的許可權,且其密碼不會過期,這表示代理程式在一段時間內需要較少的管理。

代理程式版本與升級

我們會每隔幾周在 Azure Pipelines 中更新代理程序軟體。 我們會以 格式 {major}.{minor}指出代理程式版本。 例如,如果代理程式版本是 2.1,則主要版本為 2,次要版本為 1。

Microsoft 裝載的代理程式一律保持在最新狀態。 如果較新版本的代理程式在次要版本中不同,則自我裝載代理程式通常會自動更新(在代理程式集區中設定此設定,選取您的代理程式,設定 - Azure Pipelines 會啟用預設值。 當管線中使用的平臺功能或其中一項工作需要較新版本的代理程式時,就會要求升級。

如果您以互動方式執行自我裝載代理程式,或有較 新的主要 代理程式版本可用,則您可能必須手動升級代理程式。 您可以從組織底下的 [代理程式集區] 索引標籤輕鬆執行這項操作。 您的管線在以相容代理程序為目標之前不會執行。

更新自我裝載代理程式

  1. 流覽至 [項目設定]、[ 代理程式集區]。

    項目設定、代理程式集區

  2. 選取您的代理程式集區,然後選擇 [ 更新所有代理程式]。

    更新所有代理程式

    您也可以從... 選單選擇 [更新代理程式] 來個別更新代理程式

    更新代理程式

  3. 選取 [ 更新] 以確認更新。

    更新所有代理程序確認

  4. 更新要求會針對集區中的每個代理程式排入佇列,並在任何目前執行中的作業完成時執行。 升級通常需要一些時間 -- 足夠長的時間下載最新版的代理程式軟體 (大約 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 資料夾。

常見問題集

如何? 確定我有最新的 v2 代理程式版本?

  1. 瀏覽至 [ 代理程式集區 ] 索引標籤:

    1. 登入您的組織 (https://dev.azure.com/{yourorganization})。

    2. 選擇 [Azure DevOps]、 [組織設定]。

      選擇 [組織設定]。

    3. 選擇 [ 代理程式集區]。

      選擇 [代理程式集區] 索引標籤。

    1. 登入您的專案集合 (http://your-server/DefaultCollection)。

    2. 選擇 [Azure DevOps]、 [集合設定]。

      選擇 [集合設定]。

    3. 選擇 [ 代理程式集區]。

      選擇 [代理程式集區]。

    1. 選擇 [Azure DevOps]、 [集合設定]。

      集合設定,2019。

    2. 選擇 [ 代理程式集區]。

      選擇 [代理程式集區],2019。

  2. 按兩下包含代理程式的集區。

  3. 請確定代理程式已啟用。

  4. 瀏覽至 [功能] 索引標籤:

    1. 從 [ 代理程式集區] 索引卷標中,選取所需的代理程式集區。

      從 [代理程式集區] 中,選取所需的代理程式集區。

    2. 選取 [ 代理程式 ],然後選擇所需的代理程式。

      選取 [代理程式],然後選擇代理程式。

    3. 選擇 [功能] 索引標籤。

      選擇 [功能] 索引標籤。

      注意

      Microsoft 裝載的代理程式不會顯示系統功能。 如需 Microsoft 裝載代理程式上安裝的軟體清單,請參閱 使用 Microsoft 裝載的代理程式

    1. 從 [ 代理程式集區 ] 索引卷標中,選取所需的集區。

      選取所需的集區。

    2. 選取 [ 代理程式 ],然後選擇所需的代理程式。

      選取 [代理程式],然後選擇所需的代理程式。

    3. 選擇 [功能] 索引標籤。

      [代理程式功能] 索引標籤。

    1. 從 [ 代理程式集區 ] 索引卷標中,選取所需的集區。

      選取所需的索引標籤 2019。

    2. 選取 [ 代理程式 ],然後選擇所需的代理程式。

      選擇所需的代理程式 2019。

    3. 選擇 [功能] 索引標籤。

      選擇 [功能] 索引標籤,2019。

  5. 尋找 Agent.Version 功能。 您可以針對最新的已發佈代理程式版本檢查此值。 請參閱 Azure Pipelines 代理程式 ,並檢查頁面以取得列出的最高版本號碼。

  6. 當每個代理程式執行需要較新版本代理程式的工作時,就會自動更新它本身。 如果您想要手動更新某些代理程式,請以滑鼠右鍵按下集區,然後選取 [ 更新所有代理程式]。

我可以更新屬於 Azure DevOps Server 集區一部分的 v2 代理程式嗎?

是。 從 Azure DevOps Server 2019 開始,您可以設定伺服器來尋找本機磁碟上的代理程式套件檔案。 此組態將會覆寫伺服器發行時隨附的預設版本。 當伺服器無法存取因特網時,也會套用此案例。

  1. 從可存取因特網的計算機,從 Azure Pipelines Agent GitHub Releases 頁面下載最新版的代理程式套件檔案(.zip或.tar.gz窗體)。

  2. 使用您選擇的方法,將下載的套件檔案傳輸至每個 Azure DevOps Server 應用層(例如 USB 磁碟驅動器、網路傳輸等等)。 將代理程式檔案放在資料夾下 %ProgramData%\Microsoft\Azure DevOps\Agents 。 如果不存在,請 建立 Agents 資料夾。

  3. 一切準備就緒! 您的 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 string 要更新的代理程式。 如果未指定 - 將會針對所有代理程式觸發更新。
organization path True string Azure DevOps 組織的名稱。
poolId path True integer int32 要使用的代理程式集區
api-version query False string 要使用的 API 版本。 這應該設定為 『6.0』 以使用此版本的 API。

若要觸發代理程式更新 - 要求本文應該是空的。

注意

Azure Pipelines 代理程式在 GitHub開放原始碼。

深入了解

如需代理程式的詳細資訊,請參閱使用 Azure DevOps 建置應用程式的下列課程模塊學習路徑。