Ciągłe dostarczanie za pomocą usługi Azure Pipelines

Użyj usługi Azure Pipelines do automatycznego wdrażania w usłudze Azure Functions. 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.

Do wdrożenia w usłudze Azure Functions użyjesz zadania AzureFunctionApp. Istnieją teraz dwie wersje zadania AzureFunctionApp (AzureFunctionApp@1, AzureFunctionApp@2). AzureFunctionApp@2 obejmuje rozszerzoną obsługę walidacji, która sprawia, że potoki są mniej narażone na niepowodzenie z powodu błędów.

Wybierz wersję zadania w górnej części artykułu. Potoki YAML nie są dostępne dla usługi Azure DevOps 2019 i starszych.

Wymagania wstępne

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 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 jest to pierwsze połączenie z usługą 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:
- 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'

Wdrażanie aplikacji

Wdrożysz za pomocą zadania Wdrażanie aplikacji funkcji platformy Azure. 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.

Aby wdrożyć w usłudze Azure Functions, dodaj następujący fragment kodu na końcu azure-pipelines.yml pliku. Wartość domyślna appType to Windows. Możesz określić system Linux, ustawiając wartość na appTypefunctionAppLinux.

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>'

W fragmencie kodu założono, że kroki kompilacji w pliku YAML tworzą archiwum zip w $(System.ArtifactsDirectory) folderze na agencie.

Wdrażanie kontenera

Kod można wdrożyć automatycznie w usłudze Azure Functions jako kontener niestandardowy po każdej pomyślnej kompilacji. Aby dowiedzieć się więcej na temat kontenerów, zobacz Tworzenie funkcji w systemie Linux przy użyciu kontenera niestandardowego.

Wdrażanie za pomocą aplikacji funkcji platformy Azure dla kontenera

Najprostszym sposobem wdrożenia w kontenerze jest użycie zadania Azure Function App on Container Deploy.

Aby wdrożyć, dodaj następujący fragment kodu na końcu pliku 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)

Fragment kodu wypycha obraz platformy Docker do usługi Azure Container Registry. Zadanie Azure Function App on Container Deploy pobiera odpowiedni obraz platformy Docker odpowiadający BuildId określonemu repozytorium, a następnie wdraża obraz.

Wdrażanie w miejscu

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

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.

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:
- 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'

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.

Wersja 2 zadania obejmuje obsługę nowszych stosów aplikacji dla platform .NET, Python i Node. Zadanie obejmuje kontrole wstępnego wdrażania sieci. Jeśli występują problemy z wdrożeniem wstępnym, wdrożenie zostaje zatrzymane.

Aby wdrożyć w usłudze Azure Functions, dodaj następujący fragment kodu na końcu azure-pipelines.yml pliku. Wartość domyślna appType to Windows. Możesz określić system Linux, ustawiając wartość na appTypefunctionAppLinux.

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@2 # Add this at the end of your file
  inputs:
    azureSubscription: <Azure service connection>
    appType: functionAppLinux # default is functionApp
    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 Name>'
    #slotName: '<Slot name>'

W fragmencie kodu założono, że kroki kompilacji w pliku YAML tworzą archiwum zip w $(System.ArtifactsDirectory) folderze na agencie.

Wdrażanie kontenera

Kod można wdrożyć automatycznie w usłudze Azure Functions jako kontener niestandardowy po każdej pomyślnej kompilacji. Aby dowiedzieć się więcej na temat kontenerów, zobacz Praca z kontenerami i usługą Azure Functions .

Wdrażanie za pomocą aplikacji funkcji platformy Azure dla kontenera

Najprostszym sposobem wdrożenia w kontenerze jest użycie zadania Azure Function App on Container Deploy.

Aby wdrożyć, dodaj następujący fragment kodu na końcu pliku 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)

Fragment kodu wypycha obraz platformy Docker do usługi Azure Container Registry. Zadanie Azure Function App on Container Deploy pobiera odpowiedni obraz platformy Docker odpowiadający BuildId określonemu repozytorium, a następnie wdraża obraz.

Wdrażanie w miejscu

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@2
  inputs:
    azureSubscription: <Azure service connection>
    appType: functionAppLinux
    appName: <Name of the Function app>
    package: $(System.ArtifactsDirectory)/**/*.zip
    deploymentMethod: 'auto'
    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

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.