Azure Synapse Analytics 工作區的持續整合和傳遞
持續整合 (CI) 程序會在每次小組成員認可版本控制的變更時,自動建置和測試程式碼。 持續傳遞 (CD) 程序則會進行從多個測試或預備環境到生產環境的建置、測試、設定和部署作業。
在 Azure Synapse Analytics 工作區中,CI/CD 會將某個環境 (開發、測試、生產) 的所有實體移至另一個環境。 將您的工作區升階至另一個工作區的程序分為兩個部分。 首先,使用 Azure Resource Manager 範本 (ARM 範本) 來建立或更新工作區資源 (集區和工作區)。 然後,使用 Azure DevOps 或 GitHub 中的 Synapse 工作區部署 工具,移轉 SQL 腳本和筆記本、Spark 作業定義、管線、數據集和其他成品等成品。
本文概述如何使用 Azure DevOps 發行管線和 GitHub Actions,將 Azure Synapse 工作區部署至多個環境自動化。
必要條件
若要將 Azure Synapse 工作區部署至多個環境自動化,必須具備下列必要條件和設定。
Azure DevOps
- 準備 Azure DevOps 專案以執行發行管線。
- 授與任何將在組織層級簽入基本代碼存取權的使用者,讓他們可以看到存放庫。
- 將擁有者許可權授與 Azure Synapse 存放庫。
- 請確定您已建立自我裝載的 Azure DevOps VM 代理程式,或使用 Azure DevOps 裝載的代理程式。
- 授與許可權,以 建立資源群組的 Azure Resource Manager 服務連線。
- Microsoft Entra 系統管理員必須在 Azure DevOps 組織中安裝 Azure DevOps Synapse 工作區部署代理程式擴充功能。
- 建立或提名管線執行身分的現有服務帳戶。 您可以使用個人存取令牌,而不是服務帳戶,但在刪除使用者帳戶之後,您的管線將無法運作。
GitHub
- 建立 GitHub 存放庫,其中包含 Azure Synapse 工作區成品和工作區範本。
- 請確定您已建立自我裝載的執行器,或使用 GitHub 裝載的執行器。
Microsoft Entra ID
- 如果您使用服務主體,請在 Microsoft Entra ID 中建立要用於部署的服務主體。
- 如果您使用受控識別,請在 Azure 中的 VM 上啟用系統指派的受控識別作為代理程式或執行器,然後將它新增至 Azure Synapse Studio 作為 Synapse 系統管理員。
- 使用 Microsoft Entra 系統管理員角色來完成這些動作。
Azure Synapse Analytics
注意
您可以使用相同的管線、ARM 範本或 Azure CLI 來自動化和部署這些必要條件,但本文並未說明這些程式。
用於開發的「來源」工作區必須設定為 Azure Synapse Studio 中的 Git 存放庫。 如需詳細資訊,請參閱 Azure Synapse Studio 中的原始檔控制。
設定空白工作區以部署至:
- 建立新的 Azure Synapse 工作區。
- 將下列許可權授與服務主體給新的 Synapse 工作區:
- Microsoft.Synapse/workspaces/integrationruntimes/write
- Microsoft.Synapse/workspaces/operationResults/read
- Microsoft.Synapse/workspaces/read
- 在工作區中,請勿設定 Git 存放庫連線。
- 在 Azure Synapse 工作區中,移至 [Studio>管理> 存取控制]。 4. 在 Azure Synapse 工作區中,移至 [Studio > 管理>] 存取控制。 將 「Synapse Artifact Publisher」 指派給服務主體。 如果部署管線需要部署受控私人端點,請改為指派 「Synapse 管理員 istrator」。。
- 當您使用連線資訊儲存在 Azure Key Vault 中的連結服務時,建議針對不同的環境保留個別的金鑰保存庫。 您也可以針對每個金鑰保存庫設定個別的權限等級。 例如,您可能不希望小組成員擁有生產秘密的權限。 如果您遵循此方法,建議您在所有階段中都保留相同的秘密名稱。 如果您保留相同的秘密名稱,就不需要跨 CI/CD 環境參數化每個連接字串,因為唯一變更的項目是金鑰保存庫名稱,也就是個別參數。
其他先決條件
- 不會在工作區部署工作中建立 Spark 集區和自我裝載整合運行時間。 如果您有使用自我裝載整合運行時間的連結服務,請在新的工作區中手動建立運行時間。
- 如果開發工作區中的專案與特定集區連結,請確定您在參數檔案的目標工作區中為集區建立或參數化相同的名稱。
- 如果您在嘗試部署時暫停布建的 SQL 集區,部署可能會失敗。
如需詳細資訊,請參閱 Azure Synapse Analytics 中的 CI/CD 第 4 部分 - 發行管線。
在 Azure DevOps 中設定發行管線
在本節中,您將瞭解如何在 Azure DevOps 中部署 Azure Synapse 工作區。
在 Azure DevOps 中,開啟您為發行建立的專案。
在左側功能表上,選取 [管線>發行]。
選取 [新增管線]。 如果您有現有的管線,請選取 [ 新增>發行管線]。
選取 [空白作業] 範本。
在 [ 階段名稱] 中,輸入環境的名稱。
選取 [新增成品],然後選取在開發環境中使用 Azure Synapse Studio 設定的 Git 存放庫。 選取您管理集區和工作區 ARM 範本的 Git 存放庫。 如果您使用 GitHub 作為來源,請為您的 GitHub 帳戶和提取存放庫建立服務連線。 如需詳細資訊,請參閱 服務連線。
選取資源 ARM 範本分支。 針對 [預設版本],選取 [預設分支中的最新版本]。
針對成品 預設分支,選取存放庫 發佈分支 或其他包含 Synapse 成品的非發佈分支。 根據預設,發行分支是
workspace_publish
。 針對 [預設版本],選取 [預設分支中的最新版本]。
設定 ARM 範本的階段工作,以建立和更新資源
如果您有部署資源的 ARM 範本,例如 Azure Synapse 工作區、Spark 和 SQL 集區或金鑰保存庫,請新增 Azure Resource Manager 部署工作以建立或更新這些資源:
在暫存檢視中,選取 [檢視暫存工作]。
建立新的工作。 搜尋 ARM 範本部署,接著選取 [新增]。
在 [部署工作 ] 索引標籤上,選取工作區的訂用帳戶、資源群組和位置。 視需要提供認證。
針對 [ 動作],選取 [ 建立或更新資源群組]。
針對 [ 範本],選取省略號按鈕 (...)。 移至工作區的 ARM 範本。
針對 [ 範本參數],選取 [...] 以選擇參數檔案。
針對 [覆寫範本參數],選取 ...,然後輸入您要用於工作區的參數值。
針對 [ 部署模式],選取 [ 累加]。
(選擇性)新增 Azure PowerShell 以進行授與,並更新工作區角色指派。 如果您使用發行管線來建立 Azure Synapse 工作區,管線的服務主體會新增為預設工作區管理員。您可以執行 PowerShell 來授與其他帳戶工作區的存取權。
警告
在完整的部署模式中,會刪除新ARM樣本中未指定之資源群組中的資源。 如需詳細資訊,請參閱 Azure Resource Manager 部署模式。
設定 Azure Synapse 成品部署的階段工作
使用 Synapse 工作區部署延伸模組,在 Azure Synapse 工作區中部署其他專案。 您可以部署的專案包括數據集、SQL 腳本和筆記本、Spark 作業定義、整合運行時間、數據流、認證,以及工作區中的其他成品。
安裝和新增部署延伸模組
從 Visual Studio Marketplace 搜尋並取得延伸模組。
選取您要在其中安裝擴充功能的 Azure DevOps 組織。
請確定 Azure DevOps 管線的服務主體已獲得訂用帳戶許可權,並指派為工作區的 Synapse 工作區管理員。
若要建立新的工作,請搜尋 Synapse 工作區部署,然後選取 [ 新增]。
設定部署工作
部署工作支援 3 種類型的作業、僅驗證、部署和驗證和部署。
注意
中的此工作區部署延伸模組與 回溯相容。 請確定已安裝並使用最新版本。 您可以在 Azure DevOps 概觀和 GitHub 動作的最新版本中閱讀版本附註。
Validate 是使用工作驗證非發佈分支中的 Synapse 成品,併產生工作區範本和參數範本檔案。 驗證作業僅適用於 YAML 管線。 YAML 檔案範例如下:
pool:
vmImage: ubuntu-latest
resources:
repositories:
- repository: <repository name>
type: git
name: <name>
ref: <user/collaboration branch>
steps:
- checkout: <name>
- task: Synapse workspace deployment@2
continueOnError: true
inputs:
operation: 'validate'
ArtifactsFolder: '$(System.DefaultWorkingDirectory)/ArtifactFolder'
TargetWorkspaceName: '<target workspace name>'
驗證和部署 可用來使用成品根資料夾,直接從非發佈分支部署工作區。
注意
當作業類型選取為 [驗證] 或 [驗證並部署] 時,部署工作必須從此端點下載相依性 JS 檔案 web.azuresynapse.net。 如果 VM 上已啟用網路原則,請確定允許端點 web.azuresynapse.net 。
驗證和部署作業可在傳統和 YAML 管線中運作。 YAML 檔案範例如下:
pool:
vmImage: ubuntu-latest
resources:
repositories:
- repository: <repository name>
type: git
name: <name>
ref: <user/collaboration branch>
steps:
- checkout: <name>
- task: Synapse workspace deployment@2
continueOnError: true
inputs:
operation: 'validateDeploy'
ArtifactsFolder: '$(System.DefaultWorkingDirectory)/ArtifactFolder'
TargetWorkspaceName: 'target workspace name'
azureSubscription: 'target Azure resource manager connection name'
ResourceGroupName: 'target workspace resource group'
DeleteArtifactsNotInTemplate: true
OverrideArmParameters: >
-key1 value1
-key2 value2
部署 作業部署的輸入包括 Synapse 工作區範本和參數範本,可在工作區發佈分支或驗證之後建立。 它與 1.x 版相同。
您可以根據使用案例選擇作業類型。 下列部分是部署的範例。
在工作中,選取作業類型作為 [部署]。
在 [範本] 旁的工作中,選取 [...],以選擇範本檔案。
在 [範本參數] 旁,選取 [...] 以選擇參數檔案。
選取工作區的連線、資源群組和名稱。
在 [覆寫範本參數] 旁,選取 ... 。 輸入您想要用於工作區的參數值,包括連結服務中使用的 連接字串 和帳戶密鑰。 如需詳細資訊,請參閱 Azure Synapse Analytics 中的 CI/CD。
受控私人端點的部署僅在 2.x 版中受到支援。請確定您選取正確的版本,並檢查 在範本中部署受控私人端點。
若要管理觸發程式,您可以使用觸發程式切換來停止觸發程式,再部署。 您也可以新增工作,以在部署工作之後重新啟動觸發程式。
重要
在 CI/CD 案例中,不同環境中的整合運行時間類型必須相同。 例如,如果您在開發環境中有自我裝載整合運行時間,則相同的整合運行時間必須在其他環境中自我裝載,例如在測試和生產環境中。 同樣地,如果您要跨多個階段共用整合運行時間,整合運行時間必須連結並自我裝載於所有環境中,例如開發、測試和生產環境。
建立部署的發行
儲存所有變更之後,您可以選取 [ 建立發行 ] 以手動建立發行。 若要瞭解如何自動建立發行,請參閱 Azure DevOps 發行觸發程式。
在 GitHub Actions 中設定版本
在本節中,您將瞭解如何使用適用於 Azure Synapse 工作區部署的 GitHub Actions 來建立 GitHub 工作流程。
您可以使用適用於 Azure Resource Manager 的 GitHub Actions 範本 ,針對工作區和計算集區將 ARM 範本部署至 Azure 自動化。
工作流程檔案
在存放庫中 /.github/workflows/ 路徑的 YAML (.yml) 檔案中定義 GitHub Actions 工作流程。 定義包含組成工作流程的各種步驟和參數。
.yml檔案有兩個區段:
區段 | 工作 |
---|---|
驗證 | 1.定義服務主體。 2.建立 GitHub 秘密。 |
部署 | 部署工作區成品。 |
設定 GitHub Actions 秘密
GitHub Actions 秘密是已加密的環境變數。 擁有此存放庫共同作業者許可權的任何人都可以使用這些秘密來與存放庫中的動作互動。
在 GitHub 存放庫中,選取 [設定] 索引標籤,然後選取 [秘密][新增存放>庫密碼]。
新增用戶端識別碼的新秘密,如果您使用服務主體進行部署,請新增客戶端密碼。 您也可以選擇將訂用帳戶標識碼和租使用者標識碼儲存為秘密。
新增您的工作流程
在您的 GitHub 存放庫中,移至 [動作]。
選取 [自行設定工作流程]。
在工作流程檔案中,刪除 區段之後
on:
的所有專案。 例如,剩餘的工作流程看起來可能像下列範例:name: CI on: push: branches: [ master ] pull_request: branches: [ master ]
重新命名您的工作流程。 在 [ Marketplace] 索引標籤上,搜尋 Synapse 工作區部署動作,然後新增動作。
設定必要的值與工作區樣本:
name: workspace deployment on: push: branches: [ publish_branch ] jobs: release: # You also can use the self-hosted runners. runs-on: windows-latest steps: # Checks out your repository under $GITHUB_WORKSPACE, so your job can access it. - uses: actions/checkout@v2 - uses: azure/synapse-workspace-deployment@release-1.0 with: TargetWorkspaceName: 'target workspace name' TemplateFile: './path of the TemplateForWorkspace.json' ParametersFile: './path of the TemplateParametersForWorkspace.json' OverrideArmParameters: './path of the parameters.yaml' environment: 'Azure Public' resourceGroup: 'target workspace resource group' clientId: ${{secrets.CLIENTID}} clientSecret: ${{secrets.CLIENTSECRET}} subscriptionId: 'subscriptionId of the target workspace' tenantId: 'tenantId' DeleteArtifactsNotInTemplate: 'true' managedIdentity: 'False'
您已準備好認可變更。 選取 [ 開始認可],輸入標題,然後新增描述(選擇性)。 然後,選取 [ 認可新檔案]。
檔案會出現在存放庫的 .github/workflows 資料夾中。
注意
受控識別僅支援 Azure 中的自我裝載 VM。 請務必將執行器設定為自我裝載。 為您的 VM 啟用系統指派的受控識別,並將其新增至 Azure Synapse Studio 作為 Synapse 系統管理員。
檢閱您的部署
在工作區範本中建立自定義參數
如果您使用自動化 CI/CD,而且想要在部署期間變更某些屬性,但屬性預設不會參數化,您可以覆寫預設參數範本。
若要覆寫預設參數範本,請在 Git 分支的根資料夾中建立名為 template-parameters-definition.json 的自定義參數範本。 您必須使用此確切的檔名。 當 Azure Synapse 工作區從共同作業分支發佈或部署工作驗證其他分支中的成品時,它會讀取此檔案,並使用其組態來產生參數。 如果 Azure Synapse 工作區找不到該檔案,則會使用預設參數範本。
自訂參數語法
您可以使用下列指導方針來建立自訂參數檔案:
- 在相關的實體類型下輸入屬性路徑。
- 將屬性名稱設定為
*
,表示您想要參數化屬性底下的所有屬性(僅向下至第一層,而非遞歸)。 您可以將例外狀況設定為此組態。 - 將屬性的值設定為字串,表示您想要將屬性參數化。 使用
<action>:<name>:<stype>
的格式。<action>
可以是下列其中一個字元:=
表示將目前的值保留作為參數的預設值。-
表示不要保留參數的預設值。|
是 Azure Key Vault 中連接字串或金鑰的祕密的特殊案例。
<name>
是參數的名稱。 如果空白,則會取得屬性的名稱。 如果值是以-
字元為開頭,則會縮短名稱。 例如,AzureStorage1_properties_typeProperties_connectionString
會縮短為AzureStorage1_connectionString
。<stype>
是參數的類型。 如果<stype>
空白,則預設類型為string
。 支援的值:string
、、、int
securestring
bool
、object
、secureobject
和array
。
- 在檔案中指定陣列表示範本中的相符屬性是陣列。 Azure Synapse 會使用指定的定義逐一查看數位中的所有物件。 第二個物件 (字串) 會成為屬性的名稱,該名稱會做為每個反覆項目的參數名稱。
- 定義不能專屬於資源執行個體。 任何定義都會套用至該類型的所有資源。
- 根據預設,所有安全字串(例如 金鑰保存庫 秘密)和安全字串(例如 連接字串、密鑰和令牌)都會參數化。
參數範本定義範例
以下是參數範本定義的外觀範例:
{
"Microsoft.Synapse/workspaces/notebooks": {
"properties": {
"bigDataPool": {
"referenceName": "="
}
}
},
"Microsoft.Synapse/workspaces/sqlscripts": {
"properties": {
"content": {
"currentConnection": {
"*": "-"
}
}
}
},
"Microsoft.Synapse/workspaces/pipelines": {
"properties": {
"activities": [{
"typeProperties": {
"waitTimeInSeconds": "-::int",
"headers": "=::object",
"activities": [
{
"typeProperties": {
"url": "-:-webUrl:string"
}
}
]
}
}]
}
},
"Microsoft.Synapse/workspaces/integrationRuntimes": {
"properties": {
"typeProperties": {
"*": "="
}
}
},
"Microsoft.Synapse/workspaces/triggers": {
"properties": {
"typeProperties": {
"recurrence": {
"*": "=",
"interval": "=:triggerSuffix:int",
"frequency": "=:-freq"
},
"maxConcurrency": "="
}
}
},
"Microsoft.Synapse/workspaces/linkedServices": {
"*": {
"properties": {
"typeProperties": {
"accountName": "=",
"username": "=",
"connectionString": "|:-connectionString:secureString",
"secretAccessKey": "|"
}
}
},
"AzureDataLakeStore": {
"properties": {
"typeProperties": {
"dataLakeStoreUri": "="
}
}
},
"AzureKeyVault": {
"properties": {
"typeProperties": {
"baseUrl": "|:baseUrl:secureString"
},
"parameters": {
"KeyVaultURL": {
"type": "=",
"defaultValue": "|:defaultValue:secureString"
}
}
}
}
},
"Microsoft.Synapse/workspaces/datasets": {
"*": {
"properties": {
"typeProperties": {
"folderPath": "=",
"fileName": "="
}
}
}
},
"Microsoft.Synapse/workspaces/credentials" : {
"properties": {
"typeProperties": {
"resourceId": "="
}
}
}
}
以下是資源類型如何建構上述範本的說明。
notebooks
- 路徑中的任何
properties/bigDataPool/referenceName
屬性會以其預設值參數化。 您可以將每個筆記本檔案的附加 Spark 集區參數化。
sqlscripts
- 在路徑中
properties/content/currentConnection
,poolName
和databaseName
屬性都會參數化為字串,而不需範本中的預設值。
pipelines
- 路徑中的任何
activities/typeProperties/waitTimeInSeconds
屬性都是參數化。 管線中具有名為waitTimeInSeconds
之程式代碼層級屬性的任何活動,會Wait
以預設名稱參數化為數位。 屬性在 Resource Manager 範本中不會有預設值。 相反地,在 Resource Manager 部署期間需要輸入 屬性。 - 屬性
headers
(例如,在Web
活動中) 會以object
類型 (Object) 參數化。 屬性headers
的預設值與來源處理站的值相同。
integrationRuntimes
- 路徑中的所有
typeProperties
屬性都會以其各自的預設值進行參數化。 例如,兩個屬性位於類型屬性之下IntegrationRuntimes
:computeProperties
和ssisProperties
。 這兩個屬性類型都是使用其各自的預設值和類型來建立(Object)。
triggers
在下
typeProperties
,兩個屬性會參數化:- 屬性
maxConcurrency
具有預設值,而且 是 型別string
。 屬性的預設參數名稱maxConcurrency
為<entityName>_properties_typeProperties_maxConcurrency
。 - 屬性
recurrence
也會參數化。 屬性下recurrence
的所有屬性都會設定為參數化為字串,並具有預設值和參數名稱。 例外狀況是interval
屬性,其參數化為int
類型。 參數名稱後綴為<entityName>_properties_typeProperties_recurrence_triggerSuffix
。 同樣地,屬性freq
是字串,並且參數化為字串。 不過,freq
屬性會參數化而不使用預設值。 名稱會縮短並後綴,例如<entityName>_freq
。
注意
目前最多支援50個觸發程式。
- 屬性
linkedServices
- 鏈接的服務是唯一的。 由於連結服務和數據集有各種不同的類型,因此您可以提供類型特定的自定義。 在上述範例中,針對類型的所有鏈接服務
AzureDataLakeStore
,會套用特定的範本。 針對所有其他範本(透過使用*
字元來識別),會套用不同的範本。 - 屬性
connectionString
會參數化為securestring
值。 它沒有預設值。 參數名稱會縮短,並以後置詞connectionString
。 - 屬性
secretAccessKey
會參數化為AzureKeyVaultSecret
值(例如,在 Amazon S3 鏈接服務中)。 屬性會自動參數化為 Azure 金鑰保存庫 秘密,並從設定的密鑰保存庫擷取。 您也可以參數化金鑰保存庫本身。
datasets
- 雖然您可以在數據集中自定義類型,但不需要明確的 *層級設定。 在上述範例中,下
typeProperties
的所有數據集屬性都會參數化。
CI/CD 的最佳做法
如果您使用 Git 與 Azure Synapse 工作區整合,而且您有一個 CI/CD 管線,可將變更從開發移至測試,然後移至生產環境,我們建議下列最佳做法:
- 只整合開發工作區與 Git。 如果您使用 Git 整合,請只整合您的 開發 Azure Synapse 工作區與 Git。 測試和生產工作區的變更會透過 CI/CD 部署,且不需要 Git 整合。
- 在移轉成品之前先準備集區。 如果您有連結至開發工作區中集區的 SQL 腳本或筆記本,請針對不同環境中的集區使用相同的名稱。
- 將基礎結構中的版本設定同步處理為程式碼案例。 若要在描述性模型中管理基礎結構(網路、虛擬機、負載平衡器和聯機拓撲),請使用DevOps小組用於原始程式碼的相同版本設定。
- 檢閱 Azure Data Factory 最佳做法。 如果您使用Data Factory,請參閱 Data Factory成品的最佳做法。
針對成品部署進行疑難解答
使用 Synapse 工作區部署工作來部署 Synapse 成品
在 Azure Synapse 中,與 Data Factory 不同,成品不是 Resource Manager 資源。 您無法使用 ARM 範本部署工作來部署 Azure Synapse 成品。 請改用 Synapse 工作區部署工作來部署成品,並使用 ARM 資源的 ARM 部署工作(集區和工作區)部署。 同時,此工作僅支援資源類型為 Microsoft.Synapse 的 Synapse 範本。 透過這項工作,使用者可以自動部署任何分支的變更,而不需在 Synapse Studio 中手動單擊發佈。 以下是一些經常引發的問題。
1.發佈失敗:工作區 arm 檔案超過 20MB
Git 提供者有檔案大小限制,例如,Azure DevOps 的檔案大小上限為 20 MB。 一旦工作區範本檔案大小超過 20Mb,當您在 Synapse Studio 中發佈變更時,就會發生此錯誤,其中產生工作區範本檔案並同步至 git。 若要解決此問題,您可以使用 Synapse 部署工作搭配 驗證 或 驗證和部署 作業,將工作區範本檔案直接儲存至管線代理程式,而不需在 synapse Studio 中手動發佈。
2.發行時發生非預期的令牌錯誤
如果您的參數檔案具有未逸出的參數值,發行管線就無法剖析檔案併產生 unexpected token
錯誤。 建議您覆寫參數或使用 金鑰保存庫 來擷取參數值。 您也可以使用雙逸出字元來解決問題。
3.整合運行時間部署失敗
如果您已從已啟用受控 Vnet 的工作區產生工作區範本,並嘗試部署至一般工作區,反之亦然,就會發生此錯誤。
4.剖析值時遇到的非預期字元
無法剖析範本檔案。 嘗試逸出反斜線,例如 \\Test01\Test
5.無法擷取工作區資訊,找不到
目標工作區資訊未正確設定。 請確定您已建立的服務連線範圍設定為具有工作區的資源群組。
6.成品刪除失敗
延伸模組會比較發行分支中存在的成品與範本,並根據其將刪除它們的差異。 請確定您未嘗試刪除任何存在於發行分支中的成品,而其他成品有參考或相依性。
8. 部署失敗,發生錯誤:json 位置 0
如果您嘗試手動更新範本,就會發生此錯誤。 請確定您尚未手動編輯範本。
9. 檔案建立或更新失敗,因為參考無效
synapse 中的成品可由另一個成品參考。 如果您已將成品中所參考的屬性參數化,請務必為它提供正確和非 Null 值
10.無法在筆記本部署中擷取部署狀態
您嘗試部署的筆記本會附加至工作區範本檔案中的 Spark 集區,而在部署中,集區不存在於目標工作區中。 如果您未將集區名稱參數化,請確定在環境之間具有相同名稱的集區。