使用 Azure Pipelines 持續傳遞
使用 Azure Pipelines 自動部署至 Azure Functions。 Azure Pipelines 可讓您使用 Azure DevOps 建置、測試及部署持續整合 (CI) 與持續傳遞 (CD)。
YAML 管線是使用存放庫中的 YAML 檔案來定義。 步驟是管線最小的組建區塊,可以是指令碼或工作 (預先封裝的指令碼)。 了解構成管線的重要概念和元件。
您將使用 AzureFunctionApp
工作,來部署至 Azure Functions。 現在有兩個版本的 AzureFunctionApp 工作 (AzureFunctionApp@1、AzureFunctionApp@2)。 AzureFunctionApp@2
包含增強的驗證支援,此支援可將管線因錯誤而失敗的可能性降低。
選擇文章頂端的工作版本。 YAML 管線不適用於 Azure DevOps 2019 和更早版本。
注意
強烈建議使用AzureFunctionApp@2。 只有第 2 版才支援在 Flex 取用方案上部署至應用程式。
必要條件
Azure DevOps 組織。 如果您沒有,可以免費建立一個。 如果您的小組已有存放庫,則請確定您是要使用的 Azure DevOps 專案的管理員。
能夠在 Microsoft 裝載的代理程式上執行管線。 您可以購買平行作業,也可以要求免費層。
如果您計劃使用 GitHub 而非 Azure Repos,則也需要 GitHub 存放庫。 如果您沒有 GitHub 帳戶,可以免費建立一個 (英文)。
Azure 中現有的函數應用程式,其原始程式碼位於受支援的存放庫中。 如果還沒有 Azure Functions 程式碼專案,您可以完成下列語言特定文章來建立專案:
請記得,在您將本機程式碼專案發佈至函數應用程式之後,將本機程式碼專案上傳至 GitHub 或 Azure Repos 存放庫。
建置應用程式
- 登入您的 Azure DevOps 組織,然後瀏覽至您的專案。
- 在您的專案中,瀏覽至 Pipelines 頁面。 然後選取 [新增管線]。
- 選取下列其中一個選項,您的程式碼在哪裡?:
- GitHub:系統可能會將您重新導向至 GitHub 以進行登入。 若是如此,請輸入 GitHub 認證。 當此連線是您的第一個 GitHub 連線時,精靈也會逐步引導您完成將 DevOps 連線至 GitHub 帳戶的流程。
- Azure Repos Git:您立即能夠在目前的 DevOps 專案中選擇存放庫。
- 出現存放庫清單時,請選取您的範例應用程式存放庫。
- Azure Pipelines 會分析您的存放庫,並在 [設定管線] 中提供潛在範本清單。 為您的語言選擇適當的函數應用程式範本。 如果您沒有看到正確的範本,請選取 [顯示更多]。
- 選取 [儲存並執行],並選取 [直接認可至主要分支],然後再次選擇 [儲存並執行]。
- 新的執行隨即啟動。 等待執行完畢。
範例 YAML 組建管線
下列特定語言管線可用於建置應用程式。
您可以使用下列範例,建立 YAML 檔案以建置 .NET 應用程式。
如果您在建置應用程式時看到錯誤,請確認使用的 .NET 版本與 Azure Functions 版本相符。 如需詳細資訊,請參閱 Azure Functions 執行階段版本概觀。
pool:
vmImage: 'windows-latest'
steps:
- script: |
dotnet restore
dotnet build --configuration Release
- task: DotNetCoreCLI@2
inputs:
command: publish
arguments: '--configuration Release --output publish_output'
projects: '*.csproj'
publishWebProjects: false
modifyOutputPath: false
zipAfterPublish: false
- task: ArchiveFiles@2
displayName: "Archive files"
inputs:
rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
includeRootFolder: false
archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'
artifactName: 'drop'
部署您的應用程式
您將使用 Azure 函數應用程式部署工作進行部署。 此工作需要 Azure 服務連線作為輸入。 Azure 服務連線會儲存認證,以便從 Azure Pipelines 連線到 Azure。
若要部署至 Azure Functions,請在 azure-pipelines.yml
檔案結尾處新增下列程式碼片段。 預設的 appType
是 Windows。 您可以將 appType
設定為 functionAppLinux
以指定 Linux。 AzureFunctionApp 工作不支援 @v1 部署至 Flex Consumption 應用程式。
trigger:
- main
variables:
# Azure service connection established during pipeline creation
azureSubscription: <Name of your Azure subscription>
appName: <Name of the function app>
# Agent VM image name
vmImageName: 'ubuntu-latest'
- task: AzureFunctionApp@1 # Add this at the end of your file
inputs:
azureSubscription: <Azure service connection>
appType: functionAppLinux # default is functionApp
appName: $(appName)
package: $(System.ArtifactsDirectory)/**/*.zip
#Uncomment the next lines to deploy to a deployment slot
#Note that deployment slots is not supported for Linux Dynamic SKU
#deployToSlotOrASE: true
#resourceGroupName: '<Resource Group Name>'
#slotName: '<Slot name>'
程式碼片段會假設 YAML 檔案中的組建步驟在代理程式的 $(System.ArtifactsDirectory)
資料夾中產生 zip 封存檔。
部署容器
您可以在每次組建成功之後,自動將程式碼部署為容器化函數應用程式。 若要深入瞭解容器,請參閱使用容器和 Azure Functions。
部署至容器的最簡單方式是在容器部署工作上使用 Azure 函數應用程式。
若要部署,請在 YAML 檔案結尾處新增下列程式碼片段:
trigger:
- main
variables:
# Container registry service connection established during pipeline creation
dockerRegistryServiceConnection: <Docker registry service connection>
imageRepository: <Name of your image repository>
containerRegistry: <Name of the Azure container registry>
dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
tag: '$(Build.BuildId)'
# Agent VM image name
vmImageName: 'ubuntu-latest'
- task: AzureFunctionAppContainer@1 # Add this at the end of your file
inputs:
azureSubscription: '<Azure service connection>'
appName: '<Name of the function app>'
imageName: $(containerRegistry)/$(imageRepository):$(tag)
程式碼片段會將 Docker 映像推送至您的 Azure Container Registry。 容器部署上的 Azure 函數應用程式工作會從指定的存放庫提取對應 BuildId
的適當 Docker 映像,然後部署該映像。
如需完整的端對端管線範例,包括組建容器並發佈至容器登錄,請參閱此 Azure Pipelines 容器部署範例。
部署到位置
您可以將函數應用程式設定為有多個位置。 位置可讓您安全地部署應用程式並加以測試,然後再提供給您的客戶使用。
下列 YAML 程式碼片段示範如何部署至預備位置,然後交換成生產位置:
- task: AzureFunctionApp@1
inputs:
azureSubscription: <Azure service connection>
appType: functionAppLinux
appName: <Name of the Function app>
package: $(System.ArtifactsDirectory)/**/*.zip
deployToSlotOrASE: true
resourceGroupName: <Name of the resource group>
slotName: staging
- task: AzureAppServiceManage@0
inputs:
azureSubscription: <Azure service connection>
WebAppName: <name of the Function app>
ResourceGroupName: <name of resource group>
SourceSlot: staging
SwapWithProduction: true
使用 Azure CLI 建立管線
若要在 Azure 中建立組建管線,請使用 az functionapp devops-pipeline create
命令。 系統會建立組建管線,以建置和釋放存放庫中所做的任何程式碼變更。 此命令會產生新的 YAML 檔案,該檔案會定義組建和發行管線,然後將管線提交給您的存放庫。 此命令的必要條件取決於您的程式碼位置。
如果您的程式碼位於 GitHub:
您必須擁有訂用帳戶的寫入權限。
您必須是 Azure DevOps 中的專案系統管理員。
您必須具備建立 GitHub 個人存取權杖 (PAT) 的足夠權限。 如需詳細資訊,請參閱 GitHub PAT 權限需求。
您必須擁有權限,才能在 GitHub 存放庫中認可主要分支,以便認可自動產生的 YAML 檔案。
如果您的程式碼位於 Azure Repos:
您必須擁有訂用帳戶的寫入權限。
您必須是 Azure DevOps 中的專案系統管理員。
建置應用程式
- 登入您的 Azure DevOps 組織,然後瀏覽至您的專案。
- 在您的專案中,瀏覽至 Pipelines 頁面。 然後,選擇用來建立新管線的動作。
- 先選取 GitHub 作為原始程式碼的位置,以逐步完成精靈的步驟。
- 系統可能會將您重新導向至 GitHub 以進行登入。 若是如此,請輸入 GitHub 認證。
- 出現存放庫清單時,請選取您的範例應用程式存放庫。
- Azure Pipelines 會分析您的存放庫,並建議範本。 選取 [儲存並執行],並選取 [直接認可至主要分支],然後再次選擇 [儲存並執行]。
- 新的執行隨即啟動。 等待執行完畢。
範例 YAML 組建管線
下列特定語言管線可用於建置應用程式。
您可以使用下列範例來建立 YAML 檔案以建置 .NET 應用程式:
pool:
vmImage: 'windows-latest'
steps:
- script: |
dotnet restore
dotnet build --configuration Release
- task: DotNetCoreCLI@2
inputs:
command: publish
arguments: '--configuration Release --output publish_output'
projects: '*.csproj'
publishWebProjects: false
modifyOutputPath: false
zipAfterPublish: false
- task: ArchiveFiles@2
displayName: "Archive files"
inputs:
rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
includeRootFolder: false
archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'
artifactName: 'drop'
部署您的應用程式
您將使用 Azure 函數應用程式部署第 2 版工作進行部署。 此工作需要 Azure 服務連線作為輸入。 Azure 服務連線會儲存認證,以便從 Azure Pipelines 連線到 Azure。 您應該建立使用工作負載識別身分同盟的連線。
工作的第 2 版包含對 .NET、Python 和 Node 較新的應用程式堆疊支援。 這項工作包括網路預先部署檢查。 預先部署發生問題時,部署會停止。
若要部署至 Azure Functions,請在 azure-pipelines.yml
檔案結尾處新增下列程式碼片段。 預設的 appType
是 Windows。 您可以將 appType
設定為 functionAppLinux
以指定 Linux。 部署至 Flex Consumption 應用程式需要您同時 appType: functionAppLinux
設定 和 isFlexConsumption: true
。
trigger:
- main
variables:
# Azure service connection established during pipeline creation
azureSubscription: <SUBSCRIPTION_NAME>
appName: <APP_NAME>
# Agent VM image name
vmImageName: 'windows-latest'
- task: AzureFunctionApp@2 # Add this at the end of your file
inputs:
azureSubscription: <AZURE_SERVICE_CONNECTION>
appType: functionApp # this specifies a Windows-based function app
appName: $(appName)
package: $(System.ArtifactsDirectory)/**/*.zip
deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required. Deployment method. Default: auto.
#Uncomment the next lines to deploy to a deployment slot
#Note that deployment slots is not supported for Linux Dynamic SKU
#deployToSlotOrASE: true
#resourceGroupName: '<RESOURCE_GROUP>'
#slotName: '<SLOT_NAME>'
下一步
- 檢閱 Azure Functions 概觀。
- 檢閱 Azure DevOps 概觀。