Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Usługa Azure Pipelines umożliwia automatyczne wdrażanie projektu kodu w aplikacji funkcji na platformie Azure. Usługa Azure Pipelines umożliwia tworzenie, testowanie i wdrażanie za pomocą ciągłej integracji i ciągłego dostarczania (CD) przy użyciu usługi Azure DevOps.
Potoki YAML są definiowane przy użyciu pliku YAML w repozytorium. Krok jest najmniejszym blokiem konstrukcyjnym potoku i może być skryptem lub zadaniem (wstępnie spakowanym skryptem). Dowiedz się więcej o kluczowych pojęciach i składnikach tworzących potok.
Zadanie AzureFunctionApp służy do wdrażania kodu. Istnieją teraz dwie wersje programu AzureFunctionApp, które są porównywane w tej tabeli:
| Porównanie/wersja | AzureFunctionApp@2 | AzureFunctionApp@1 |
|---|---|---|
| Obsługuje plan Flex Consumption | ✔ | ❌ |
| Obejmuje rozszerzoną obsługę walidacji* | ✔ | ❌ |
| Kiedy należy używać... | Zalecane w przypadku nowych wdrożeń aplikacji | Utrzymywane dla starszych wdrożeń |
* Ulepszona obsługa walidacji sprawia, że potoki są mniej narażone na niepowodzenie z powodu błędów.
Wybierz wersję zadania w górnej części artykułu.
Uwaga
Uaktualnij program z AzureFunctionApp@1 do AzureFunctionApp@2, aby uzyskać dostęp do nowych funkcji i długoterminowej pomocy technicznej.
Wymagania wstępne
Organizacja: Azure DevOps. Jeśli nie masz konta, możesz je utworzyć teraz za darmo. Jeśli twój zespół już go ma, upewnij się, że jesteś administratorem projektu usługi Azure DevOps, którego chcesz użyć.
Możliwość uruchamiania potoków na agentach hostowanych przez firmę Microsoft. Możesz kupić zadanie równoległe lub zażądać warstwy Bezpłatna.
Jeśli planujesz używać usługi GitHub zamiast usługi Azure Repos, potrzebujesz również repozytorium GitHub. Jeśli nie masz konta usługi GitHub, możesz go utworzyć bezpłatnie.
Istniejąca aplikacja funkcji na platformie Azure, która ma kod źródłowy w obsługiwanym repozytorium. Jeśli nie masz jeszcze projektu kodu usługi Azure Functions, możesz go utworzyć, wykonując czynności opisane w następującym artykule specyficznym dla języka:
Pamiętaj, aby przekazać projekt kodu lokalnego do repozytorium GitHub lub Azure Repos po opublikowaniu go w aplikacji funkcji.
Kompilowanie aplikacji
- Zaloguj się do organizacji usługi Azure DevOps i przejdź do projektu.
- W projekcie przejdź do strony Potoki . Następnie wybierz akcję, aby utworzyć nowy potok.
- Zapoznaj się z krokami kreatora, wybierając najpierw usługę GitHub jako lokalizację kodu źródłowego.
- Być może nastąpi przekierowanie do usługi GitHub w celu zalogowania się. Jeśli tak, wprowadź poświadczenia usługi GitHub.
- Po wyświetleniu listy repozytoriów wybierz przykładowe repozytorium aplikacji.
- Usługa Azure Pipelines przeanalizuje repozytorium i zaleci szablon. Wybierz pozycję Zapisz i uruchom, a następnie wybierz pozycję Zatwierdź bezpośrednio w gałęzi głównej, a następnie wybierz pozycję Zapisz i uruchom ponownie.
- Uruchomiono nowy przebieg. Poczekaj na zakończenie przebiegu.
Przykładowe potoki kompilacji YAML
Następujące potoki specyficzne dla języka mogą służyć do tworzenia aplikacji.
Możesz użyć następującego przykładu, aby utworzyć plik YAML w celu utworzenia aplikacji platformy .NET:
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'
- Zaloguj się do organizacji usługi Azure DevOps i przejdź do projektu.
- W projekcie przejdź do strony Potoki . Następnie wybierz pozycję Nowy potok.
- Wybierz jedną z tych opcji dla pozycji Gdzie jest twój kod?:
- GitHub: Możesz zostać przekierowany do usługi GitHub, aby się zalogować. Jeśli tak, wprowadź poświadczenia usługi GitHub. Gdy to połączenie jest pierwszym połączeniem usługi GitHub, kreator przeprowadzi Cię również przez proces łączenia metodyki DevOps z kontami usługi GitHub.
- Azure Repos Git: możesz natychmiast wybrać repozytorium w bieżącym projekcie DevOps.
- Po wyświetleniu listy repozytoriów wybierz przykładowe repozytorium aplikacji.
- Usługa Azure Pipelines analizuje repozytorium i w temacie Konfigurowanie potoku zawiera listę potencjalnych szablonów. Wybierz odpowiedni szablon aplikacji funkcji dla danego języka. Jeśli nie widzisz poprawnego szablonu, wybierz pozycję Pokaż więcej.
- Wybierz pozycję Zapisz i uruchom, a następnie wybierz pozycję Zatwierdź bezpośrednio w gałęzi głównej, a następnie wybierz pozycję Zapisz i uruchom ponownie.
- Uruchomiono nowy przebieg. Poczekaj na zakończenie przebiegu.
Przykładowe potoki kompilacji YAML
Następujące potoki specyficzne dla języka mogą służyć do tworzenia aplikacji.
Poniższy przykład umożliwia utworzenie pliku YAML w celu utworzenia aplikacji platformy .NET.
Jeśli podczas kompilowania aplikacji występują błędy, sprawdź, czy używana wersja platformy .NET jest zgodna z wersją usługi Azure Functions. Aby uzyskać więcej informacji, zobacz Omówienie wersji środowiska uruchomieniowego usługi Azure Functions.
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'
Wdrażanie aplikacji
Wdrożysz za pomocą zadania Azure Function App Deploy w wersji 2 . To zadanie wymaga połączenia z usługą platformy Azure jako danych wejściowych. Połączenie z usługą platformy Azure przechowuje poświadczenia do nawiązania połączenia z usługi Azure Pipelines z platformą Azure. Należy utworzyć połączenie korzystające z federacji tożsamości obciążenia.
Aby wdrożyć w usłudze Azure Functions, dodaj ten fragment kodu na końcu azure-pipelines.yml pliku, w zależności od tego, czy aplikacja działa w systemie Linux, czy Windows:
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>'
Wartość domyślna appType to Windows (functionApp). Możesz określić system Linux, ustawiając wartość na appTypefunctionAppLinux. Aplikacja Flex Consumption działa w systemie Linux i musisz ustawić oba appType: functionAppLinuxisFlexConsumption: true.
W fragmencie kodu założono, że kroki kompilacji w pliku YAML tworzą archiwum zip w $(System.ArtifactsDirectory) folderze na agencie.
Wdrażasz za pomocą zadania Azure Function App Deploy. To zadanie wymaga połączenia z usługą platformy Azure jako danych wejściowych. Połączenie z usługą platformy Azure przechowuje poświadczenia do nawiązania połączenia z usługi Azure Pipelines z platformą Azure.
Ważne
Wdrażanie aplikacji Flex Consumption nie jest obsługiwane przy użyciu zadania @v1AzureFunctionApp.
Aby wdrożyć w usłudze Azure Functions, dodaj ten fragment kodu na końcu azure-pipelines.yml pliku:
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
Ten fragment kodu ustawia appType wartość na functionAppLinux, która jest wymagana podczas wdrażania w aplikacji działającej w systemie Linux. Wartość domyślna appType to Windows (functionApp).
W tym przykładzie przyjęto założenie, że kroki kompilacji w pliku YAML tworzą archiwum zip w $(System.ArtifactsDirectory) folderze na agencie.
Wdrażanie kontenera
Wskazówka
Zalecamy używanie obsługi Azure Functions w usłudze Azure Container Apps do hostowania aplikacji funkcji Azure w niestandardowym kontenerze Linux. Aby uzyskać więcej informacji, zobacz Omówienie usługi Azure Functions w usłudze Azure Container Apps.
Podczas wdrażania konteneryzowanej aplikacji funkcjonalnej używane zadanie wdrażania zależy od określonego środowiska hostującego.
Za pomocą zadania Wdrażanie usługi Azure Container Apps (AzureContainerApps) można wdrożyć obraz aplikacji funkcyjnej w instancji aplikacji kontenerowej platformy Azure, która jest zoptymalizowana pod kątem Azure Functions.
Ten kod wdraża obraz podstawowy dla aplikacji funkcji modelu procesów izolowanych platformy .NET 8:
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>
Najlepiej stworzyć własny kontener typu custom w potoku, zamiast używać obrazu bazowego, jak pokazano w tym przykładzie. Aby uzyskać więcej informacji, zobacz Wdrażanie do Azure Container Apps za pomocą Azure Pipelines.
Wdrażanie w miejscu
Ważne
Plan Flex Consumption nie obsługuje obecnie slotów. Aplikacje systemu Linux nie obsługują również slotów podczas uruchamiania w planie zużycia, a obsługa tych aplikacji będzie w przyszłości wycofana.
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>'
Aplikację funkcji można skonfigurować tak, aby miała wiele miejsc. Miejsca umożliwiają bezpieczne wdrażanie aplikacji i testowanie jej przed udostępnieniem jej klientom.
Poniższy fragment kodu YAML przedstawia sposób wdrażania w miejscu przejściowym, a następnie zamiany na miejsce produkcyjne:
- 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
W przypadku korzystania z miejsc wdrożenia można również dodać następujące zadanie, aby wykonać zamianę miejsca w ramach wdrożenia.
- task: AzureAppServiceManage@0
inputs:
azureSubscription: <AZURE_SERVICE_CONNECTION>
WebAppName: <APP_NAME>
ResourceGroupName: <RESOURCE_GROUP>
SourceSlot: <SLOT_NAME>
SwapWithProduction: true
Tworzenie potoku za pomocą interfejsu wiersza polecenia platformy Azure
Aby utworzyć potok kompilacji na platformie Azure, użyj az functionapp devops-pipeline createpolecenia . Potok kompilacji jest tworzony w celu skompilowania i wydania wszelkich zmian kodu wprowadzonych w repozytorium. Polecenie generuje nowy plik YAML, który definiuje potok kompilacji i wydania, a następnie zatwierdza go w repozytorium. Wymagania wstępne dotyczące tego polecenia zależą od lokalizacji kodu.
Jeśli twój kod znajduje się w usłudze GitHub:
Musisz mieć uprawnienia do zapisu dla subskrypcji.
Musisz być administratorem projektu w usłudze Azure DevOps.
Musisz mieć uprawnienia do tworzenia osobistego tokenu dostępu w usłudze GitHub, który ma wystarczające uprawnienia. Aby uzyskać więcej informacji, zobacz Wymagania dotyczące uprawnień pat w usłudze GitHub.
Musisz mieć uprawnienia do zatwierdzania gałęzi głównej w repozytorium GitHub, aby można było zatwierdzić automatycznie wygenerowany plik YAML.
Jeśli kod znajduje się w usłudze Azure Repos:
Musisz mieć uprawnienia do zapisu dla subskrypcji.
Musisz być administratorem projektu w usłudze Azure DevOps.