分享方式:


在 Bicep 中開發部署指令碼

本文提供範例來示範如何在 Bicep 中開發部署指令碼

部署指令碼資源可能會有部署持續時間。 若要有效率地開發和測試這些指令碼,請考慮建立專用開發環境,例如 Azure 容器執行個體 (ACI) 或 Docker 執行個體。 如需詳細資訊,請參閱建立開發環境

語法

下列 Bicep 檔案是部署指令碼資源的範例。 如需詳細資訊,請參閱最新的部署指令碼結構描述

resource <symbolic-name> 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: '<resource-name>'
  location: resourceGroup().location
  tags: {}
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '<user-assigned-identity-id>': {}
    }
  }
  kind: 'AzureCLI'
  properties: {
    storageAccountSettings: {
      storageAccountName: '<storage-account-name>'
      storageAccountKey: '<storage-account-key>'
    }
    containerSettings: {
      containerGroupName: '<container-group-name>'
      subnetIds: [
        {
          id: '<subnet-id>'
        }
      ]
    }
    environmentVariables: []
    azCliVersion: '2.52.0'
    arguments: '<script-arguments>'
    scriptContent: '''<azure-cli-or-azure-powershell-script>''' // or primaryScriptUri: 'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/main/samples/deployment-script/inlineScript.ps1'
    supportingScriptUris: []
    timeout: 'P1D'
    cleanupPreference: 'OnSuccess'
    retentionInterval: 'P1D'
    forceUpdateTag: '1'
  }
}

在部署指令碼中,指定下列屬性值:

  • tags:指定部署指令碼標籤。 如果部署指令碼服務建立兩個支援資源 (儲存體帳戶和容器執行個體),則會將標籤傳遞至這兩個資源。 您可以使用標籤來識別這些資源。 識別這些支援資源的另一種方式是透過其後置詞,其中包含 azscripts。 如需詳細資訊,請參閱監視部署指令碼並進行疑難排解

  • identity:針對部署指令碼 API 2020-10-01 版或更新版本,除非您需要在指令碼中執行任何 Azure 特定的動作,或是您正在私人網路中執行部署指令碼,否則使用者指派的受控識別是選用的。 而 API 版本 2019-10-01-preview 則需要受控識別,因為部署指令碼服務會用其來執行指令碼。

    指定 identity 屬性時,指令碼服務會先呼叫 Connect-AzAccount -Identity,然後再叫用使用者指令碼。 目前僅支援使用者指派的受控識別。 若要在部署指令碼中使用不同的身分識別登入,您可以呼叫 Connect-AzAccount。 如需詳細資訊,請參閱設定最低權限

  • kind:指定指令碼的類型 (AzurePowerShellAzureCLI)。 除了 kind 之外,您還需要指定 azPowerShellVersionazCliVersion 屬性。

  • storageAccountSettings:指定此設定以使用現有儲存體帳戶。 如果未指定 storageAccountName,則會自動建立儲存體帳戶。 如需詳細資訊,請參閱使用現有的儲存體帳戶

  • containerSettings:自訂 Azure 容器執行個體的名稱。 如需設定容器群組名稱的相關資訊,請參閱本文稍後的設定容器執行個體。 如需在私人網路中設定 subnetIds 以執行部署指令碼的相關資訊,請參閱存取私人虛擬網路

  • environmentVariables:指定要傳遞至指令碼的環境變數

  • azPowerShellVersion/azCliVersion:指定要使用的模組版本。

    請參閱支援的 Azure CLI 版本清單。

    重要

    部署指令碼會使用 Microsoft 成品登錄中的可用 CLI 映像。 對 CLI 映像進行部署指令碼的認證通常大約需要一個月的時間。 請勿使用在過去 30 天內發行的 CLI 版本。 若要尋找映像的發行日期,請參閱 Azure CLI 版本資訊。 如果您使用不支援的版本,錯誤訊息就會列出支援的版本。

  • arguments:指定參數值。 多個值應以空格分隔。

    部署指令碼會叫用 CommandLineToArgvW 系統呼叫,將引數分割為字串陣列。 這是必要的步驟,因為引數會以命令屬性的形式傳遞至 Azure 容器執行個體,而命令屬性是字串的陣列。

    如果引數包括已逸出的字元,請對字元進行雙逸出處理。 例如,在先前的 Bicep 語法範例中,引數為 -name \"John Dole\"。 已逸出的字串為 -name \\"John Dole\\"

    若要將型別為 object 的 Bicep 參數傳遞為引數,請使用 string() 函式,將物件轉換為字串,然後使用 replace() 函式將任何引號 (") 取代為雙逸出的引號 (\\")。 例如:

    replace(string(parameters('tables')), '"', '\\"')
    

    如需詳細資訊,請參閱範例 Bicep檔案

  • scriptContent:指定指令碼內容。 其可以是使用 loadTextContent 函式匯入的內嵌指令碼或外部指令碼檔案。 如需相關資訊,請參閱本文件稍後的內嵌與外部檔案。 若要執行外部指令碼,請改用 primaryScriptUri

  • primaryScriptUri:使用支援的副檔名,為主要部署指令碼指定可公開存取的 URL。 如需相關資訊,請參閱本文件稍後的外部指令碼

  • supportingScriptUris:以 scriptContentprimaryScriptUri 中呼叫的支援檔案指定可公開存取的 URL 陣列。 如需相關資訊,請參閱本文件稍後的內嵌與外部檔案

  • timeout:以 ISO 8601 格式指定指令碼執行時間的允許時間上限。 預設值是 P1D

  • forceUpdateTag:在 Bicep 檔案部署之間變更此值,會強制部署指令碼重新執行。 如果您使用 newGuid()utcNow() 函式,則只能在參數的預設值中使用這類函式。 若要深入了解,請參閱本文稍後的多次執行指令碼

  • cleanupPreference. 指定在指令碼執行進入終止狀態時,清除兩個支援的部署資源 (儲存體帳戶和容器執行個體) 的喜好設定。 預設設定為 Always,不論終止狀態 (SucceededFailedCanceled) 為何,此設定都會要求刪除支援的資源。 若要深入了解,請參閱此文章稍後的清除部署指令碼資源

  • retentionInterval:指定在部署指令碼執行達終止狀態後,服務會保留部署指令碼資源的時間間隔。 此持續時間到期後,即會刪除部署指令碼資源。 持續時間以 ISO 8601 模式為基礎。 保留間隔介於 1 小時 (PT1H) 到 26 小時 (PT26H)。 當 cleanupPreference 設定為 OnExpiration 時,您可以使用此屬性。 若要深入了解,請參閱此文章稍後的清除部署指令碼資源

更多樣本

  • 範例 1:建立金鑰保存庫,並使用部署指令碼將憑證指派給金鑰保存庫。
  • 範例 2:在訂閱層級建立資源群組、在資源群組中建立金鑰保存庫,然後使用部署指令碼將憑證指派給金鑰保存庫。
  • 範例 3:建立使用者指派的受控識別、將參與者角色指派給資源群組層級的身分識別、建立金鑰保存庫,然後使用部署指令碼將憑證指派給金鑰保存庫。
  • 範例 4:手動建立使用者指派的受控識別,並向其指派許可,以使用 Microsoft Graph API 建立 Microsoft Entra 應用程式。 在 Bicep 檔案中,使用部署指令碼,來建立 Microsoft Entra 應用程式和服務主體,以及輸出物件識別碼和用戶端識別碼。

內嵌與外部檔案

部署指令碼位於 Bicep 檔案內,或您可以將某個部署指令碼儲存在外部作為個別檔案。

使用內嵌指令碼

下列 Bicep 檔案示範如何使用內嵌指令碼。

param name string = 'John Dole'
param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'inlineCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    arguments: name
    scriptContent: 'set -e; output="Hello $1"; echo $output'
    retentionInterval: 'P1D'
  }
}

在指令碼中包含 set -e,以便在命令傳回非零狀態時立即結束。 這種做法可簡化錯誤偵錯流程。

載入指令碼檔案

使用 loadTextContent 函式,以字串形式擷取指令檔。 此函式可讓您在外部檔案中維護指令碼,並存取該指令碼作為部署指令碼。 為指令檔指定的路徑與 Bicep 檔案是相對的。

您可以將上述 Bicep 檔案中的內嵌指令碼擷取至 hello.sh 檔案,然後將檔案放入名為指令碼的子資料夾中。

output="Hello $1"
echo $output

然後,您可以修改前述的 Bicep 檔案,如下列範例:

param name string = 'John Dole'
param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'loadTextContentCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    arguments: name
    scriptContent: loadTextContent('./scripts/hello.sh')
    retentionInterval: 'P1D'
  }
}

使用外部指令碼

您可以使用外部指令檔,而不是內嵌指令碼。 僅支援具有 ps1 副檔名的主要 PowerShell 指令碼。 針對 CLI 指令碼,主要指令碼可以帶有任何有效的 Bash 指令碼副檔名,或完全沒有副檔名。 若要採用外部指令檔,請使用 primaryScriptUri 交換 scriptContent

param name string = 'John Dole'
param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'externalScriptCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    primaryScriptUri: 'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/main/samples/deployment-script/hello.sh'
    arguments: '-name ${name}'
    retentionInterval: 'P1D'
  }
}

外部指令檔必須可供存取。 若要協助保護在 Azure 儲存體帳戶中儲存的指令檔,請產生一個共用存取簽章 (SAS) 權杖,並將其包含在範本的 URI 中。 設定到期時間,以允許足夠的時間來完成部署。 如需詳細資訊,請參閱使用 SAS 權杖部署私人 ARM 範本

您必須負責確保部署指令碼所參考 (primaryScriptUrisupportingScriptUris) 的指令碼完整性。 只參考您信任的指令碼。

使用支援的指令碼

您可以將複雜的邏輯分隔成一個或多個支援的指令檔。 使用 supportingScriptUris 屬性以視需要將 URI 陣列提供給支援的指令檔。

param name string = 'John Dole'
param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'supportingScriptCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    arguments: name
    scriptContent: 'output="Hello $1"; echo $output; ./hello.sh "$1"'
    supportingScriptUris: [
      'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/master/samples/deployment-script/hello.sh'
    ]
    retentionInterval: 'P1D'
  }
}

您可以從內嵌指令碼和主要指令檔呼叫支援的指令檔。 支援的指令檔對副檔名沒有任何限制。

支援的檔案會在執行階段複製到 azscripts/azscriptinput。 使用相對路徑來參考內嵌指令碼和主要指令檔中的支援檔案。

存取 Azure 資源

若要存取 Azure 資源,您必須設定 identity 元素。 下列 Bicep 檔案示範如何擷取 Azure 金鑰保存庫的清單。 也需要授與使用者指派管理身分識別權限,以便存取金鑰保存庫。

param identity string
param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'listKvCLI'
  location: location
  kind: 'AzureCLI'
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '${identity}': {}
    }
  }
  properties: {
    azCliVersion: '2.52.0'
    scriptContent: 'result=$(az keyvault list); echo $result | jq -c \'{Result: map({id: .id})}\' > $AZ_SCRIPTS_OUTPUT_PATH'
    retentionInterval: 'P1D'
  }
}

output result object = deploymentScript.properties.outputs

注意

Azure 登入的重試邏輯現在已內建至包裝函式指令碼。 如果您在與部署指令碼相同的 Bicep 檔案中授與權限,則部署指令碼服務會以 10 秒的間隔重試登入 10 分鐘,直到受控識別角色指派複寫完成為止。

使用輸出

處理輸出的方法會根據您使用的指令碼類型 (Azure CLI 或 Azure PowerShell) 而有所不同。

Azure CLI 部署指令碼會使用名為 AZ_SCRIPTS_OUTPUT_PATH 的環境變數,來指出指令碼輸出的檔案位置。 在 Bicep 檔案內執行部署指令碼時,Bash 殼層會自動為您設定此環境變數。 預先定義的值已設為 /mnt/azscripts/azscriptoutput/scriptoutputs.json

此輸出必須符合有效的 JSON 字串物件結構。 此檔案的內容應該格式化為機碼值組。 例如,將字串陣列儲存為 { "MyResult": [ "foo", "bar"] }。 只儲存陣列結果 (例如 [ "foo", "bar" ]) 是無效的。

param name string = 'John Dole'
param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'outputCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    arguments: name
    scriptContent: 'jq -n -c --arg st "Hello ${name}" \'{"text": $st}\' > $AZ_SCRIPTS_OUTPUT_PATH'
    retentionInterval: 'P1D'
  }
}

output text string = deploymentScript.properties.outputs.text

上述範例會使用 jq 來建構輸出。 jq 工具隨附於容器映像。 如需詳細資訊,請參閱設定開發環境

使用環境變數

將安全的字串傳遞至部署指令碼

您可以在容器執行個體中設定環境變數 (EnvironmentVariable),以提供由容器執行之應用程式或指令碼的動態設定。 部署指令碼會以與 Azure 容器執行個體相同的方式來處理不安全及安全的環境變數。 如需詳細資訊,請參閱設定容器執行個體中的環境變數

環境變數的允許大小上限為 64 KB。

param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'passEnvVariablesCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    environmentVariables: [
      {
        name: 'UserName'
        value: 'jdole'
      }
      {
        name: 'Password'
        secureValue: 'jDolePassword'
      }
    ]
    scriptContent: 'echo "Username is :$Username"; echo "Password is: $Password"'
    retentionInterval: 'P1D'
  }
}

系統定義的環境變數

下表列出系統定義的環境變數:

環境變數 預設值為 (CLI) 預設值 (PowerShell) 系統保留
AZ_SCRIPTS_AZURE_ENVIRONMENT AzureCloud AzureCloud No
AZ_SCRIPTS_CLEANUP_PREFERENCE Always Always No
AZ_SCRIPTS_OUTPUT_PATH /mnt/azscripts/azscriptoutput/scriptoutputs.json 不適用
AZ_SCRIPTS_PATH_INPUT_DIRECTORY /mnt/azscripts/azscriptinput|/mnt/azscripts/azscriptinput 不適用
AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY /mnt/azscripts/azscriptoutput|/mnt/azscripts/azscriptoutput 不適用
AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME userscript.sh userscript.ps1 .是
AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME primaryscripturi.config primaryscripturi.config .是
AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME supportingscripturi.config supportingscripturi.config .是
AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME scriptoutputs.json scriptoutputs.json .是
AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME executionresult.json executionresult.json
AZ_SCRIPTS_USER_ASSIGNED_IDENTITY 不適用 不適用 No

如需使用 AZ_SCRIPTS_OUTPUT_PATH 的範例,請參閱本文前述的使用輸出

若要存取環境變數,請使用下列程式碼。

param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'listEnvVariablesCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    scriptContent: 'echo "AZ_SCRIPTS_AZURE_ENVIRONMENT is : $AZ_SCRIPTS_AZURE_ENVIRONMENT",echo "AZ_SCRIPTS_CLEANUP_PREFERENCE	is : $AZ_SCRIPTS_CLEANUP_PREFERENCE",echo "AZ_SCRIPTS_OUTPUT_PATH	is : $AZ_SCRIPTS_OUTPUT_PATH",echo "AZ_SCRIPTS_PATH_INPUT_DIRECTORY is : $AZ_SCRIPTS_PATH_INPUT_DIRECTORY",echo "AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY is : $AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY",echo "AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME is : $AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME",echo "AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME	is : $AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME",echo "AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME	is : $AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME",echo "AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME	is : $AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME",echo "AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME	is : $AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME",echo "AZ_SCRIPTS_USER_ASSIGNED_IDENTITY	is : $AZ_SCRIPTS_USER_ASSIGNED_IDENTITY"'
    retentionInterval: 'P1D'
  }
}

使用現有儲存體帳戶

若要讓指令碼執行並允許疑難排解,您需要儲存體帳戶和容器執行個體。 您可以指定現有的儲存體帳戶,或讓指令碼服務自動建立儲存體帳戶和容器執行個體。

使用現有儲存體帳戶的需求如下:

  • 下表列出支援的帳戶類型。 階層的資料行是指 -SkuName--sku 參數的值。 支援類型的資料行是指 -Kind--kind 參數。

    支援的類型
    Premium_LRS FileStorage
    Premium_ZRS FileStorage
    Standard_GRS Storage, StorageV2
    Standard_GZRS StorageV2
    Standard_LRS Storage, StorageV2
    Standard_RAGRS Storage, StorageV2
    Standard_RAGZRS StorageV2
    Standard_ZRS StorageV2

    這些組合支援檔案共用。 如需詳細資訊,請參閱建立 Azure 檔案共用儲存體帳戶類型

  • 尚未支援儲存體帳戶的防火牆規則。 如需詳細資訊,請參閱設定 Azure 儲存體防火牆和虛擬網路

  • 部署主體必須擁有管理儲存體帳戶的權限,包括讀取、建立和刪除檔案共用。 如需詳細資訊,請參閱設定最低權限

  • 儲存體帳戶的 allowSharedKeyAccess 屬性必須設定為 true。 在 Azure 容器執行個體 (ACI) 中掛接儲存體帳戶的唯一方式,是透過存取金鑰。

若要指定現有的儲存體帳戶,請將下列 Bicep 程式碼新增至 Microsoft.Resources/deploymentScripts 的屬性元素:

param storageAccountName string = 'myStorageAccount'

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  ...
  properties: {
    ...
    storageAccountSettings: {
      storageAccountName: storageAccountName
      storageAccountKey: listKeys(resourceId('Microsoft.Storage/storageAccounts', storageAccountName), '2023-01-01').keys[0].value
    }
  }
}

如需完整的 Microsoft.Resources/deploymentScripts 定義範例,請參閱本文前述的語法

使用現有的儲存體帳戶時,指令碼服務會建立具有唯一名稱的檔案共用。 如需了解指令碼服務如何清理檔案共用,請參閱本文稍後的清除部署指令碼資源

設定容器執行個體

部署指令碼需要新的 Azure 容器執行個體。 您無法指定現有的容器執行個體。 不過,您可以使用 containerGroupName 自訂容器群組名稱。 如果您未指定群組名稱,則會自動產生名稱。 建立此容器執行個體需要其他設定。 如需詳細資訊,請參閱設定最低權限

您也可以指定 subnetId 值,以在私人網路中執行部署指令碼。 如需詳細資訊,請參閱存取私人虛擬網路

param containerGroupName string = 'mycustomaci'
param subnetId string = '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVnet/subnets/mySubnet'

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  ...
  properties: {
    ...
    containerSettings: {
      containerGroupName: containerGroupName
      subnetIds: [
        {
          id: subnetId
        }
      ]
    }
  }
}

執行指令碼超過一次

部署指令碼執行是等冪性作業。 如果未變更任何 deploymentScripts 資源屬性 (包括內嵌指令碼),則在您重新部署 Bicep 檔案時,指令碼不會執行。

部署指令碼服務會比較 Bicep 檔案中的資源名稱和相同資源群組中的現有資源。 如果您想要多次執行相同的部署指令碼,有兩個選項:

  • 變更 deploymentScripts 資源的名稱。 例如,使用 utcNow 函式作為資源名稱,或作為資源名稱的一部分。 您只能將 utcNow 函式用於參數的預設值。

    變更資源名稱會建立新的 deploymentScripts 資源。 這很適合用來保存指令碼執行的歷程記錄。

  • forceUpdateTag 屬性中指定不同的值。 例如,使用 utcNow 為值。

撰寫部署指令碼以確保等冪性,以免意外重新執行導致系統變更。 例如,當您透過部署指令碼建立 Azure 資源時,請在建立之前先驗證其是否存在,以確保指令碼成功或避免建立多餘的資源。

在部署指令碼中使用 Microsoft Graph

部署指令碼可以使用 Microsoft Graph 在 Microsoft Entra ID 中建立和使用物件。

命令

當您使用 Azure CLI 部署指令碼時,您可以使用命令群組內的 az ad 命令來處理應用程式、服務主體、群組和使用者。 您也可以使用 az rest 命令直接叫用 Microsoft Graph API。

當您使用Azure PowerShell部署指令碼時,您可以使用 Invoke-RestMethod Cmdlet 直接叫用 Microsoft Graph API。

權限

您的部署指令碼所使用的身分識別必須經過授權,才能使用 Microsoft Graph API,以及其所執行作業的適當授權。 您必須授權 Bicep 檔案外部的身分識別,例如預先建立使用者指派的受控識別,並將它指派為 Microsoft Graph 的應用程式角色。 如需詳細資訊,請參閱此快速入門範例

清除部署指令碼資源

除非刪除資源失敗,否則兩個自動建立的支援資源生命週期永遠無法超過 deploymentScriptcleanupPreference 屬性會控制支援資源的生命週期。 retentionInterval 屬性會控制 deploymentScript 資源的生命週期。 以下說明如何使用這些屬性:

  • cleanupPreference:當指令碼執行進入終止狀態時,指定清除兩個支援資源的喜好設定。 支援的值為:

    • Always:在指令碼執行進入終止狀態後,即會刪除兩個支援的資源。 如果您使用現有的儲存體帳戶,指令碼服務會刪除該服務建立的檔案共用。 由於 deploymentScripts 資源在支援資源清除後可能仍會存在,因此指令碼服務會在刪除資源之前保存指令碼執行結果 (例如 stdout)、輸出、傳回值等等。

    • OnSuccess:只有在指令碼執行成功時,才刪除兩個支援的資源。 如果您使用現有的儲存體帳戶,指令碼服務只會在指令碼執行成功時,才會移除檔案共用。

      如果指令碼執行不成功,指令碼服務會等到 retentionInterval 值過期後才清除支援的資源,然後再清除部署指令碼資源。

    • OnExpiration:只有在 retentionInterval 設定過期時,才刪除兩個支援的資源。 如果您使用現有的儲存體帳戶,指令碼服務會移除檔案共用,但會保留儲存體帳戶。

    系統會根據 cleanupPreference 值來刪除容器執行個體和儲存體帳戶。 但是,如果指令碼失敗且 cleanupPreference 未設為 Always,則部署流程會自動讓容器保持執行一小時的時間,或直到容器清除為止。 您可以使用這一小時對指令碼進行疑難排解。

    如果您想在成功部署之後讓容器保持執行,請將睡眠步驟新增至指令碼。 例如,將 Start-Sleep 新增至指令碼的結尾。 如果您未新增睡眠步驟,系統會將容器設為終止狀態,即使尚未刪除也無法供存取。

  • retentionInterval:指定 deploymentScript 資源的保留時間間隔,在此時間後資源將會過期並遭到刪除。

注意

不建議針對其他目的使用由指令碼服務產生的儲存體帳戶和容器執行個體。 視指令碼生命週期而定,可能會移除這兩個資源。

下一步

在本文中,您已了解如何建立部署指令碼資源。 若要深入了解: