Udostępnij za pomocą


Konfigurowanie dostarczania za pomocą usługi Azure Pipelines

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

Pamiętaj, aby przekazać projekt kodu lokalnego do repozytorium GitHub lub Azure Repos po opublikowaniu go w aplikacji funkcji.

Kompilowanie aplikacji

  1. Zaloguj się do organizacji usługi Azure DevOps i przejdź do projektu.
  2. W projekcie przejdź do strony Potoki . Następnie wybierz akcję, aby utworzyć nowy potok.
  3. Zapoznaj się z krokami kreatora, wybierając najpierw usługę GitHub jako lokalizację kodu źródłowego.
  4. Być może nastąpi przekierowanie do usługi GitHub w celu zalogowania się. Jeśli tak, wprowadź poświadczenia usługi GitHub.
  5. Po wyświetleniu listy repozytoriów wybierz przykładowe repozytorium aplikacji.
  6. 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.
  7. 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'
  1. Zaloguj się do organizacji usługi Azure DevOps i przejdź do projektu.
  2. W projekcie przejdź do strony Potoki . Następnie wybierz pozycję Nowy potok.
  3. 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.
  4. Po wyświetleniu listy repozytoriów wybierz przykładowe repozytorium aplikacji.
  5. 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.
  6. 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.
  7. 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.

Następne kroki

  • Zapoznaj się z omówieniem usługi Azure Functions.
  • Zapoznaj się z omówieniem usługi Azure DevOps.