持續整合和傳遞的自動發佈(CI/CD)
適用於:Azure Data Factory Azure Synapse Analytics
提示
試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費開始新的試用!
注意
Synapse Analytics 也支援 CI/CD。 如需詳細資訊, 請參閱 Synapse Analytics CI/CD 檔 。
概觀
持續整合是指進行相關實作,以自動測試對您的程式碼基底所做的每項變更。 盡早在持續整合期間執行測試,並將變更推送至暫存或生產系統後,就會進行持續傳遞。
在 Azure Data Factory 中,CI/CD 表示將 Data Factory 管線從開發、測試和生產環境等環境移至另一個環境。 Data Factory 使用 Azure Resource Manager 範本 (ARM 範本) 來儲存各種 Data Factory 實體 (例如管線、資料集和資料流程) 的設定。
有兩個建議的方法可將資料處理站升級至另一個環境:
- 使用 Data Factory 與 Azure Pipelines 的整合進行自動化部署。
- 使用 Data Factory 使用者體驗與 Azure Resource Manager 的整合,以手動上傳 ARM 範本。
如需詳細資訊,請參閱 Azure Data Factory 中的持續整合和傳遞。
本文著重於持續改善部署,以及 CI/CD 的自動發佈功能。
持續改善部署
自動發佈功能會從 Data Factory 使用者體驗中取得「驗證全部」和「匯出 ARM 範本」功能,並透過公開可用的 npm 套件 @microsoft/azure-data-factory-utilities,讓邏輯可供取用。 基於此原因,您可以使用程式設計方式來觸發這些動作,而不需要移至 Data Factory UI,並手動選取按鈕。 這項功能可讓您的 CI/CD 管線 truer 持續整合體驗。
注意
請務必使用節點 18.x 版及其相容版本,以避免因為套件與舊版不相容而可能發生的錯誤。
目前 CI/CD 流程
- 每位使用者都會在其私人分支中進行變更。
- 不允許推送至 master。 使用者必須建立提取要求,才能進行變更。
- 使用者必須載入 Data Factory UI,然後選取 [發佈] 將變更部署至 Data Factory,並在發佈分支中產生 ARM 範本。
- DevOps 發行版本管線設定為建立新的發行版本,並在每次將新的變更推送至發佈分支時部署 ARM 範本。
手動步驟
在目前的 CI/CD 流程中,使用者體驗是建立 ARM 範本的媒介。 因此,使用者必須移至 Data Factory UI,然後手動選取 [發佈] 以啟動 ARM 範本產生,並將該範本放在發佈分支中。
新的 CI/CD 流程
- 每位使用者都會在其私人分支中進行變更。
- 不允許推送至 master。 使用者必須建立提取要求,才能進行變更。
- 每次對 master 進行新的認可時,都會觸發所建置的 Azure DevOps 管線。 這會驗證資源,並在驗證成功時產生 ARM 範本以作為成品。
- DevOps 發行版本管線設定為建立新發行版本,並在每次有新組建可用時部署 ARM 範本。
變更的項目為何?
- 我們現在有使用 DevOps 建置管線的建置程序。
- 建置管線會使用 ADFUtilities NPM 套件,而此套件會驗證所有資源並產生 ARM 範本。 這些範本可以是單一並已連結。
- 建置管線負責驗證 Data Factory 資源,並產生 ARM 範本,而不是 Data Factory UI ([發佈] 按鈕)。
- DevOps 發行定義現在會取用這個新的建置管線,而不是 Git 成品。
注意
您可以繼續使用現有機制 (即 adf_publish
分支),也可以使用新的流程。 兩者都支援。
套件概觀
套件中目前提供兩個命令:
- 匯出 ARM 範本
- Validate
匯出 ARM 範本
執行 npm run build export <rootFolder> <factoryId> [outputFolder]
,以使用所指定資料夾的資源來匯出 ARM 範本。 此命令也會在產生 ARM 範本之前執行驗證檢查。 以下是使用名為 testResourceGroup 之資源群組的範例:
npm run build export C:\DataFactories\DevDataFactory /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testResourceGroup/providers/Microsoft.DataFactory/factories/DevDataFactory ArmTemplateOutput
RootFolder
是必要欄位,可代表 Data Factory 資源所在的位置。FactoryId
是必要欄位,可代表格式為/subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.DataFactory/factories/<dfName>
的 Data Factory 資源識別碼。OutputFolder
是選用參數,可指定要儲存所產生 ARM 範本的相對路徑。
僅停止/啟動更新觸發程序的功能現已正式推出,並合併至上述命令。
注意
產生的 ARM 範本不會發佈至處理站的即時版本。 部署應該使用 CI/CD 管線來完成。
Validate
執行 npm run build validate <rootFolder> <factoryId>
以驗證所指定資料夾的所有資源。 以下是範例:
npm run build validate C:\DataFactories\DevDataFactory /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testResourceGroup/providers/Microsoft.DataFactory/factories/DevDataFactory
RootFolder
是必要欄位,可代表 Data Factory 資源所在的位置。FactoryId
是必要欄位,可代表格式為/subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.DataFactory/factories/<dfName>
的 Data Factory 資源識別碼。
建立 Azure 管線
雖然可以透過各種方式來使用 npm 套件,但其中一個主要優點是透過 Azure Pipeline 予以使用。 每次合併至您的共同作業分支時,可以觸發管線,而這會先驗證所有程式碼,然後將 ARM 範本匯出至發行版本管線可使用的組建成品。 其與目前 CI/CD 程序的差異在於您將「在此成品指向發行管線,而非現有 adf_publish
分支」。
遵循下列步驟以開始使用:
開啟 Azure DevOps 專案,然後移至 [Pipelines]。 選取 [新增管線]。
選取您想要在其中儲存管線 YAML 指令碼的存放庫。 建議您將其儲存至 Data Factory 資源的相同存放庫中的組建資料夾。 請確定存放庫中有包含套件名稱的 package.json 檔案,如下列範例所示:
{ "scripts":{ "build":"node node_modules/@microsoft/azure-data-factory-utilities/lib/index" }, "dependencies":{ "@microsoft/azure-data-factory-utilities":"^1.0.0" } }
選取 [入門管線]。 如果您已上傳或合併 YAML 檔案 (如下列範例所示),則也可以直接指向該檔案並進行編輯。
# Sample YAML file to validate and export an ARM template into a build artifact # Requires a package.json file located in the target repository trigger: - main #collaboration branch pool: vmImage: 'ubuntu-latest' steps: # Installs Node and the npm packages saved in your package.json file in the build - task: UseNode@1 inputs: version: '18.x' displayName: 'Install Node.js' - task: Npm@1 inputs: command: 'install' workingDir: '$(Build.Repository.LocalPath)/<folder-of-the-package.json-file>' #replace with the package.json folder verbose: true displayName: 'Install npm package' # Validates all of the Data Factory resources in the repository. You'll get the same validation errors as when "Validate All" is selected. # Enter the appropriate subscription and name for the source factory. Either of the "Validate" or "Validate and Generate ARM template" options are required to perform validation. Running both is unnecessary. - task: Npm@1 inputs: command: 'custom' workingDir: '$(Build.Repository.LocalPath)/<folder-of-the-package.json-file>' #replace with the package.json folder customCommand: 'run build validate $(Build.Repository.LocalPath)/<Root-folder-from-Git-configuration-settings-in-ADF> /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/<Your-ResourceGroup-Name>/providers/Microsoft.DataFactory/factories/<Your-Factory-Name>' displayName: 'Validate' # Validate and then generate the ARM template into the destination folder, which is the same as selecting "Publish" from the UX. # The ARM template generated isn't published to the live version of the factory. Deployment should be done by using a CI/CD pipeline. - task: Npm@1 inputs: command: 'custom' workingDir: '$(Build.Repository.LocalPath)/<folder-of-the-package.json-file>' #replace with the package.json folder customCommand: 'run build export $(Build.Repository.LocalPath)/<Root-folder-from-Git-configuration-settings-in-ADF> /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/<Your-ResourceGroup-Name>/providers/Microsoft.DataFactory/factories/<Your-Factory-Name> "ArmTemplate"' #For using preview that allows you to only stop/ start triggers that are modified, please comment out the above line and uncomment the below line. Make sure the package.json contains the build-preview command. #customCommand: 'run build-preview export $(Build.Repository.LocalPath) /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/GartnerMQ2021/providers/Microsoft.DataFactory/factories/Dev-GartnerMQ2021-DataFactory "ArmTemplate"' displayName: 'Validate and Generate ARM template' # Publish the artifact to be used as a source for a release pipeline. - task: PublishPipelineArtifact@1 inputs: targetPath: '$(Build.Repository.LocalPath)/<folder-of-the-package.json-file>/ArmTemplate' #replace with the package.json folder artifact: 'ArmTemplates' publishLocation: 'pipeline'
輸入 YAML 代碼。 建議您使用 YAML 檔案作為起點。
儲存並執行。 如果您已使用 YAML,則會在每次更新 main 分支時予以觸發。
注意
產生的成品已經包含觸發程序的部署前和部署後指令碼,因此不需要手動加以新增。 不過,部署時,仍然需要參考停止和啟動觸發程序的文件,以執行提供的指令碼。
相關內容
深入了解 Data Factory 中持續整合和傳遞的相關資訊:Azure Data Factory中的持續整合和傳遞。