為受控 DevOps 集區映像設定佈建指令碼

Managed DevOps Pools 提供一個選項,可在將集區中的映像指派給代理程式以執行作業之前,先針對該映像執行 PowerShell 指令碼(Windows)或 Bash 指令碼(Linux)。 此功能可實現安裝受信任根憑證管理中心及設定環境變數等情境。

Important

配置腳本目前處於預覽階段。 這個功能可能會在正式上市前改變。

Managed DevOps Pool 會使用與你的 Pool 綁定的管理身份,從 Azure Blob 儲存體 下載腳本到代理程式,並上傳配置腳本日誌以進行故障排除。 配置腳本會在代理程式啟動時執行,你可以設定代理程式在腳本執行後重新啟動。

要配置一個受管理的 DevOps Pool 映像檔以執行配置腳本,請執行以下步驟:

  1. 在一個 Blob 儲存體 帳號中建立兩個 blob 容器:一個用於設定腳本及支援檔案,另一個用於上傳 provisioning script 日誌。 將你的配置腳本和任何支援檔案上傳到腳本 blob 容器。
  2. 將一個受管理身份與你的 Managed DevOps Pool 關聯,並在適當的範圍內指派所需角色給該受管理身份,讓代理程式能讀取配置腳本並上傳配置腳本日誌。
  3. 將映像檔設定為使用所需的佈建指令碼。

Prerequisites

建立 Blob 容器

Managed DevOps Pools 會從 Blob 儲存體 帳戶中某個容器內的 blob 下載佈建指令碼及其支援檔案。 Managed DevOps Pool 需要在儲存帳號中放置兩個 blob 容器:一個用來下載配置腳本和支援檔案,另一個用來上傳配置腳本日誌。

請在您的 Blob 儲存體 帳號中建立以下兩個 blob 容器。

Blob 儲存體 容器 Description
指令碼 Blob 容器。 如果你在設定映像檔執行配置腳本時,沒有在入口點provisioningScriptEntryPoint()指定自訂名稱,預設名稱就是 provisioningscript。 包含配置腳本及任何支援檔案。 配置腳本必須為 Windows 映像檔命名Setup.ps1,或 Setup.sh Linux 映像檔。
佈建指令碼記錄容器。 你無法設定這個容器名稱;一定是 mdpprovisioningscriptlogs。

受管理的 DevOps Pool 可以自動建立 mdpprovisioningscriptlogs blob 容器,但對於最低權限存取,我們建議你手動建立 mdpprovisioningscriptlogs 容器。 更多資訊請參閱「將 Azure 角色指派到受管理身份」。
包含由佈建指令碼產生的 stdout 和 stderr 記錄,以及該指令碼的副本。 blob 名稱將代理程式的機器名稱用作虛擬目錄。

將你的配置腳本和任何支援檔案上傳到腳本的 blob 容器。 配置腳本必須為 Windows 映像檔命名Setup.ps1,或 Setup.sh Linux 映像檔。 你可以在 blob 中加入腳本所需的任何支援檔案。 當代理程式啟動時,這些檔案會被下載到代理的工作目錄,並從該位置執行配置腳本。

將 Azure 角色指派給受控識別

受管理的 DevOps Pool 使用受管理身份來存取 blob 容器,用於配置腳本和配置腳本日誌。 您必須將受管理身份與您的受管理 DevOps 池關聯,並在本節描述的範圍內將指定角色指派給該受管理身份。 如果你的 Managed DevOps Pool 沒有託管身份,請依照「 為你的 Managed DevOps Pool 配置管理身份」中的步驟建立一個。

  • 如果您的 Managed DevOps Pool 只有一個相關聯的受控識別,系統會使用該受控識別來存取佈建指令碼和佈建指令碼記錄容器。
  • 如果您的 Managed DevOps Pool 有多個相關聯的受控識別,當您將映像設定為使用佈建指令碼時,請指定 Managed identity client ID(provisioningScriptManagedIdentityResourceId)屬性,以指定要用於佈建指令碼的特定受控識別。

將下表中的角色指派給受控 DevOps 集區相關聯的受控識別,並指派到指定的範圍,讓代理程式能夠下載指令碼並上傳佈建指令碼記錄。 欲了解更多關於指派 Azure 角色的資訊,請參閱「指派 Azure 角色的步驟」。

Role Scope
儲存區資料讀取器 腳本 blob 容器範圍。 如果你在設定映像檔執行配置腳本時,沒有在入口點provisioningScriptEntryPoint()指定名稱,預設名稱就是 provisioningscript。
Storage Blob 資料貢獻者 對於最低權限存取,請手動建立配置腳本日誌容器(mdpprovisioningscriptlogs),並將該角色指派給該 blob 容器範圍內的管理身份。

如果你想讓 Managed DevOps Pool 來建立容器,請在儲存帳號範圍內將角色指派到受管理身份。 如果你在儲存帳號範圍內指派 Storage Blob 資料貢獻者角色,就不需要在腳本容器範圍內指定 Storage Blob 資料閱讀器角色。

將映像設定為使用佈建指令碼

若要使用映像檔的配置腳本,請設定以下映像屬性。

Property Description
儲存帳號資源識別碼
provisioningScriptStorageAccountResourceId
必要。 包含指令碼容器(預設名稱為 provisioningscript)和 mdpprovisioningscriptlogs 容器的儲存體帳戶資源 ID。
進入點
provisioningScriptEntryPoint
包含配置腳本及支援檔案的 blob 容器名稱。 如果未指定值,則預設值為 provisioningscript。
管理身份客戶端識別碼
provisioningScriptManagedIdentityClientId
如果你的池子與多個管理身份相關聯,必須如此。 管理身份的客戶端 ID 用於存取腳本中的 blob 及腳本日誌容器的配置。 如果你的 Managed DevOps Pool 有多個相關的管理身份,你必須在這裡指定要使用哪一個。 如果你的池只有一個身份,這個屬性是可選的。
腳本執行後重新啟動
provisioningScriptShouldRestart
代理是否應該在執行配置腳本後、且在將工作送給代理之前重新啟動。 如果未指定值,則預設值為 false。

腳本執行後重啟會增加配置時間,且僅在配置腳本有需要重新啟動才能生效的變更時才應重新啟動。

Note

配置腳本可在 API 版本或更新版本 2026-06-02 中提供。

如果您在設定佈建指令碼後,使用較舊的 API 版本更新集區,佈建指令碼設定將不會保留。

要設定映像檔的配置腳本設定,請到池設定中的 圖片 區段選擇 ...>設定配置腳本。

顯示「設定佈建指令碼」選單選項的截圖。

新增或更新映像檔的配置腳本設定,然後選擇 儲存。

顯示設定佈建指令碼之設定的螢幕擷取畫面。

配置錯誤

下表列出配置腳本錯誤代碼與描述。

故障代碼 Description
ProvisioningScriptDownloadFailed 配置腳本在配置過程中無法下載到機器。
ProvisioningScriptAccessFailed 配置程序無法存取配置腳本。 通常,這個錯誤是因為在取回腳本時出現存取或權限問題。
ProvisioningScriptExecutionFailed 設定腳本已下載,但在機器上執行時失敗。
ProvisioningScriptLogUploadFailed 配置過程中產生了配置腳本日誌,但無法上傳。

腳本預備日誌

預設腳本日誌包含腳本產生的標準輸出(stdout)與標準錯誤(stderr)。 Managed DevOps Pools 會將這些記錄寫入你指定的儲存體帳戶中的 mdpprovisioningscriptlogs Blob 容器。 這些 blob 被組織在一個虛擬目錄下,該目錄名稱採用格式 mdp-{poolName}-{agentMachineName}為 。 這個虛擬目錄包含一個 output 包含 stderr.log 和 stdout.log 檔案的虛擬目錄,以及 script 一個包含執行腳本副本的虛擬目錄。

Managed DevOps Pools 不會管理這些日誌,因此你必須使用 Azure Blob 儲存體 生命週期管理政策來管理它們在儲存帳號中的保留。 以下名為 DeleteOldMDPLogs 的範例政策會在記錄 Blob 最後一次修改三天後將其刪除。

{
  "rules": [
    {
      "enabled": true,
      "name": "DeleteOldMDPLogs",
      "type": "Lifecycle",
      "definition": {
        "actions": {
          "baseBlob": {
            "delete": {
              "daysAfterModificationGreaterThan": 3
            }
          }
        },
        "filters": {
          "blobTypes": [
            "blockBlob"
          ],
          "prefixMatch": [
            "mdpprovisioningscriptlogs/"
          ]
        }
      }
    }
  ]
}

你可以從 GitHub Copilot 獲得 AI 協助,建立 Azure Blob 儲存體 生命週期管理政策。 請自訂以下提示詞以建立 Azure Blob 儲存體 生命週期管理政策。

Build an Azure Blob Storage lifecycle management policy named DeleteOldMDPLogs that deletes logs after three days.

若想了解更多關於 Copilot 產生的政策細節,您可以請 Copilot 在您的提示中說明所產生的政策。

Copilot 由 AI 驅動,因此意外與失誤是有可能的。 欲了解更多資訊,請參閱 Copilot 一般使用常見問題。

欲了解更多資訊,請參閱 Azure Blob 儲存體 生命週期管理政策及配置生命週期管理政策。

另請參閱