Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Verwenden Sie Azure Pipelines , um Ihr Codeprojekt automatisch in einer Funktions-App in Azure bereitzustellen. Mit Azure Pipelines können Sie mithilfe von Azure DevOps mit Continuous Integration (CI) und Continuous Delivery (CD) Lösungen erstellen, testen und bereitstellen.
YAML-Pipelines werden mithilfe einer YAML-Datei in Ihrem Repository definiert. Ein Schritt ist der kleinste Baustein einer Pipeline und kann ein Skript oder ein Task (vorgefertigtes Skript) sein. Erfahren Sie mehr über die wichtigsten Konzepte und Komponenten einer Pipeline.
Sie verwenden die AzureFunctionApp
Aufgabe, um Ihren Code bereitzustellen. Es gibt jetzt zwei Versionen von AzureFunctionApp
, die in dieser Tabelle verglichen werden:
Vergleich/Version | AzureFunctionApp@2 | AzureFunctionApp@1 |
---|---|---|
Unterstützt den Flex-Verbrauchsplan | ✔ | ❌ |
Umfasst erweiterte Überprüfungsunterstützung* | ✔ | ❌ |
Wann verwendet werden soll... | Empfohlen für neue App-Bereitstellungen | Wartung für ältere Deployments |
* Die erweiterte Überprüfungsunterstützung führt dazu, dass Pipelines aufgrund von Fehlern weniger wahrscheinlich fehlschlagen.
Wählen Sie oben im Artikel Ihre Taskversion aus.
Hinweis
Upgrade von AzureFunctionApp@1
auf AzureFunctionApp@2
um Zugriff auf neue Features und langfristigen Support zu erhalten.
Voraussetzungen
Eine Azure DevOps-Organisation. Wenn Sie noch keines besitzen, können Sie es kostenlos erstellen. Wenn Ihr Team bereits über eine solche Organisation verfügt, stellen Sie sicher, dass Sie Administrator des Azure DevOps-Projekts sind, das Sie verwenden möchten.
Möglichkeit zum Ausführen von Pipelines auf von Microsoft gehosteten Agents. Sie können entweder einen Parallelauftrag erwerben oder einen Free-Tarif anfordern.
Wenn Sie beabsichtigen, GitHub anstelle von Azure Repos zu verwenden, benötigen Sie auch ein GitHub-Repository. Falls Sie kein GitHub-Konto besitzen, können Sie kostenlos eines erstellen.
Eine vorhandene Funktions-App in Azure, die ihren Quellcode in einem unterstützten Repository enthält. Wenn Sie noch kein Azure Functions-Codeprojekt erstellt haben, können Sie ein solches erstellen, indem Sie den folgenden sprachspezifischen Artikel durcharbeiten:
Denken Sie daran, das lokale Codeprojekt nach der Veröffentlichung in Ihre Funktions-App in Ihr GitHub- oder Azure Repos-Respository hochzuladen.
Erstellen der App
- Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie zu Ihrem Projekt.
- Navigieren Sie in Ihrem Projekt zur Seite Pipelines. Wählen Sie dann die Aktion zum Erstellen einer neuen Pipeline aus.
- Führen Sie die Schritte des Assistenten aus. Wählen Sie zuerst GitHub als Speicherort Ihres Quellcodes aus.
- Möglicherweise werden Sie zu GitHub weitergeleitet, um sich anzumelden. Geben Sie in diesem Fall Ihre Anmeldeinformationen für GitHub ein.
- Wenn die Liste der Repositorys angezeigt wird, wählen Sie Ihr Beispiel-App-Repository aus.
- Azure Pipelines analysiert Ihr Repository und empfiehlt eine Vorlage. Klicken Sie auf Speichern und ausführen, wählen Sie Direkten Commit an Mainbranch ausführen aus, und klicken Sie dann erneut auf Speichern und ausführen.
- Eine neue Ausführung wird gestartet. Warten Sie, bis die Ausführung beendet ist.
Beispiel-YAML-Buildpipelines
Die folgenden sprachspezifischen Pipelines können zum Erstellen von Apps verwendet werden.
Sie können die YAML-Datei zum Erstellen einer .NET-App mithilfe des folgenden Beispiels erstellen:
pool:
vmImage: 'windows-latest'
steps:
- task: UseDotNet@2
displayName: 'Install .NET 8.0 SDK'
inputs:
packageType: 'sdk'
version: '8.0.x'
installationPath: $(Agent.ToolsDirectory)/dotnet
- script: |
dotnet restore
dotnet build --configuration Release
- task: DotNetCoreCLI@2
displayName: 'dotnet publish'
inputs:
command: publish
arguments: '--configuration Release --output $(System.DefaultWorkingDirectory)/publish_output'
projects: 'csharp/*.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'
- Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie zu Ihrem Projekt.
- Navigieren Sie in Ihrem Projekt zur Seite Pipelines. Wählen Sie dann Neue Pipeline aus.
- Wählen Sie eine der folgenden Optionen für Wo befindet sich Ihr Code?:
- GitHub:Möglicherweise werden Sie zu GitHub weitergeleitet, um sich anzumelden. Geben Sie in diesem Fall Ihre Anmeldeinformationen für GitHub ein. Wenn dies Ihre erste Verbindung mit GitHub ist, führt der Assistent Sie auch durch den Prozess der Verbindung von DevOps mit Ihren GitHub-Konten.
- Azure Repos Git: Sie können sofort ein Repository in Ihrem aktuellen DevOps-Projekt auswählen.
- Wenn die Liste der Repositorys angezeigt wird, wählen Sie Ihr Beispiel-App-Repository aus.
- Azure Pipelines analysiert Ihr Repository und stellt in Pipeline konfigurieren eine Liste potenzieller Vorlagen bereit. Wählen Sie die entsprechende Funktions-App-Vorlage für Ihre Sprache aus. Wenn die richtige Vorlage nicht angezeigt wird, wählen Sie Mehr anzeigen aus.
- Klicken Sie auf Speichern und ausführen, wählen Sie Direkten Commit an Mainbranch ausführen aus, und klicken Sie dann erneut auf Speichern und ausführen.
- Eine neue Ausführung wird gestartet. Warten Sie, bis die Ausführung beendet ist.
Beispiel-YAML-Buildpipelines
Die folgenden sprachspezifischen Pipelines können zum Erstellen von Apps verwendet werden.
Sie können das folgende Beispiel verwenden, um eine YAML-Datei zum Erstellen einer .NET-App zu erstellen.
Wenn beim Erstellen Ihrer App Fehler angezeigt werden, überprüfen Sie, ob die verwendete .NET-Version mit Ihrer Azure Functions-Version übereinstimmt. Weitere Informationen finden Sie unter Einstellen von Runtimeversionen von Azure Functions als Ziel.
pool:
vmImage: 'windows-latest'
steps:
- task: UseDotNet@2
displayName: 'Install .NET 8.0 SDK'
inputs:
packageType: 'sdk'
version: '8.0.x'
installationPath: $(Agent.ToolsDirectory)/dotnet
- script: |
dotnet restore
dotnet build --configuration Release
- task: DotNetCoreCLI@2
displayName: 'dotnet publish'
inputs:
command: publish
arguments: '--configuration Release --output $(System.DefaultWorkingDirectory)/publish_output'
projects: 'csharp/*.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'
Bereitstellen Ihrer App
Ihre Bereitstellung erfolgt mit dem Task Azure-Funktions-App-Bereitstellung v2. Diese Aufgabe erfordert eine Azure-Dienstverbindung als Eingabe. Eine Azure-Dienstverbindung speichert die Anmeldeinformationen für die Verbindung von Azure Pipelines mit Azure. Sie sollten eine Verbindung erstellen, die den Workload-Identitätsverbund verwendet.
Um sie in Azure Functions bereitzustellen, fügen Sie diesen Codeausschnitt am Ende Ihrer azure-pipelines.yml
Datei hinzu, je nachdem, ob Ihre App unter Linux oder Windows ausgeführt wird:
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: 'windows-latest'
- task: AzureFunctionApp@2 # Add this at the end of your file
inputs:
azureSubscription: <Name of your Azure subscription>
appType: functionApp # this specifies a Windows-based function app
appName: $(appName)
package: $(System.DefaultWorkingDirectory)/build$(Build.BuildId).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>'
Der Standardwert appType
ist Windows (functionApp
). Sie können „Linux“ angeben, indem Sie appType
auf functionAppLinux
festlegen. Eine Flex-Verbrauch-App wird unter Linux ausgeführt, und Sie müssen sowohl appType: functionAppLinux
als auch isFlexConsumption: true
festlegen.
Im Codeausschnitt wird davon ausgegangen, dass die Buildschritte in Ihrer YAML-Datei das ZIP-Archiv im $(System.ArtifactsDirectory)
-Ordner auf Ihrem Agent erzeugen.
Sie stellen die Bereitstellung mithilfe der Azure Function App Deploy-Aufgabe bereit . Diese Aufgabe erfordert eine Azure-Dienstverbindung als Eingabe. Eine Azure-Dienstverbindung speichert die Anmeldeinformationen für die Verbindung von Azure Pipelines mit Azure.
Von Bedeutung
Die Bereitstellung für eine Flex Consumption-App wird nicht durch die Aufgabe AzureFunctionApp
@v1 unterstützt.
Um sie in Azure Functions bereitzustellen, fügen Sie diesen Codeausschnitt am Ende Ihrer azure-pipelines.yml
Datei hinzu:
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: DownloadBuildArtifacts@1 # Add this at the end of your file
inputs:
buildType: 'current'
downloadType: 'single'
artifactName: 'drop'
itemPattern: '**/*.zip'
downloadPath: '$(System.ArtifactsDirectory)'
- task: AzureFunctionApp@1
inputs:
azureSubscription: $(azureSubscription)
appType: functionAppLinux # default is functionApp
appName: $(appName)
package: $(System.ArtifactsDirectory)/**/*.zip
Dieser Codeausschnitt setzt appType
auf functionAppLinux
, was erforderlich ist, wenn in einer App bereitgestellt wird, die unter Linux läuft. Der Standardwert appType
ist Windows (functionApp
).
Im Beispiel wird davon ausgegangen, dass die Buildschritte in Ihrer YAML-Datei das ZIP-Archiv im $(System.ArtifactsDirectory)
Ordner ihres Agents erzeugen.
Bereitstellen eines Containers
Tipp
Wir empfehlen die Verwendung der Azure Functions-Unterstützung in Azure-Container-Apps zum Hosten Ihrer Funktions-App in einem benutzerdefinierten Linux-Container. Weitere Informationen finden Sie unter Azure Functions on Azure Container Apps overview.
Bei der Bereitstellung einer containerisierten Funktions-App hängt die verwendete Bereitstellungsaufgabe von der spezifischen Hostingumgebung ab.
Sie können die Aufgabe " Bereitstellen von Azure-Container-Apps" (AzureContainerApps
) verwenden, um ein Funktions-App-Image in einer Azure-Container-App-Instanz bereitzustellen, die für Azure Functions optimiert ist.
Dieser Code stellt das Basisimage für eine .NET 8 isolierte Prozessmodell-Funktions-App bereit:
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- task: AzureContainerApps@1
inputs:
azureSubscription: <Name of your Azure subscription>
imageToDeploy: 'mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0'
containerAppName: <Name of your container app>
resourceGroup: <Name of the resource group>
Im Idealfall würden Sie ihren eigenen benutzerdefinierten Container in der Pipeline erstellen, anstatt ein Basisimage zu verwenden, wie in diesem Beispiel gezeigt. Weitere Informationen finden Sie unter Deploy to Azure Container Apps from Azure Pipelines.
Bereitstellen in einem Slot
Von Bedeutung
Der Flex-Verbrauchsplan unterstützt derzeit keine Slots. Linux-Apps unterstützen auch keine Slots, wenn sie in einem Verbrauchsplan laufen, und die Unterstützung für diese Apps wird zukünftig eingestellt.
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: 'windows-latest'
- task: AzureFunctionApp@2 # Add this at the end of your file
inputs:
azureSubscription: <Name of your Azure subscription>
appType: functionApp # this specifies a Windows-based function app
appName: $(appName)
package: $(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip
deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required. Deployment method. Default: auto.
deployToSlotOrASE: true
resourceGroupName: '<RESOURCE_GROUP>'
slotName: '<SLOT_NAME>'
Sie können Ihre Funktions-App so konfigurieren, dass sie mehrere Slots hat. Mit Slots können Sie Ihre App sicher bereitstellen und testen, bevor Sie sie Ihren Kunden zur Verfügung stellen.
Der folgende YAML-Codeausschnitt zeigt, wie in einem Stagingslot bereitgestellt und dann zu einem Produktionsslot getauscht wird:
- 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
Wenn Sie Bereitstellungsplätze verwenden, können Sie auch die folgende Aufgabe hinzufügen, um einen Slot-Swap als Teil Ihrer Bereitstellung auszuführen.
- task: AzureAppServiceManage@0
inputs:
azureSubscription: <AZURE_SERVICE_CONNECTION>
WebAppName: <APP_NAME>
ResourceGroupName: <RESOURCE_GROUP>
SourceSlot: <SLOT_NAME>
SwapWithProduction: true
Erstellen einer Pipeline mit Azure CLI
Verwenden Sie den az functionapp devops-pipeline create
, um in Azure eine Buildpipeline zu erstellen. Die Buildpipeline wird erstellt, um alle Codeänderungen zu erstellen und freizugeben, die in Ihrem Repository vorgenommen werden. Der Befehl generiert eine neue YAML-Datei, die die Build- und Releasepipeline definiert und dann an Ihr Repository committet. Die Voraussetzungen für diesen Befehl hängen vom Speicherort des Codes ab.
Code in GitHub:
Sie müssen die Berechtigung Schreiben für Ihr Abonnement besitzen.
Sie müssen der Projektadministrator in Azure DevOps sein.
Sie müssen die Berechtigung zum Erstellen eines persönlichen GitHub-Zugriffstokens (PAT) mit ausreichenden Berechtigungen besitzen. Weitere Informationen finden Sie unter GitHub-PAT-Berechtigungsanforderungen.
Sie müssen die Berechtigung zum Committen des Hauptbranches in Ihrem GitHub-Repository besitzen, um die automatisch generierte YAML-Datei zu committen.
Code in Azure Repos:
Sie müssen die Berechtigung Schreiben für Ihr Abonnement besitzen.
Sie müssen der Projektadministrator in Azure DevOps sein.
Nächste Schritte
- Lesen Sie die Übersicht zu Azure Functions.
- Im Artikel Übersicht über Azure DevOps finden Sie weitere Informationen zu diesem Thema.