Samouczek: tworzenie potoku wieloestowego za pomocą usługi Azure DevOps
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
Możesz użyć potoku wieloetapowego usługi Azure DevOps, aby podzielić proces ciągłej integracji/ciągłego wdrażania na etapy reprezentujące różne części cyklu programowania. Użycie potoku wieloestegożowego zapewnia lepszy wgląd w proces wdrażania i ułatwia integrowanie zatwierdzeń i kontroli.
W tym artykule utworzysz dwa wystąpienia usługi App Service i utworzysz potok YAML z trzema etapami:
W rzeczywistym scenariuszu może istnieć kolejny etap wdrażania w środowisku produkcyjnym w zależności od procesu DevOps.
Przykładowy kod w tym ćwiczeniu jest przeznaczony dla aplikacji internetowej platformy .NET dla gry w przestrzeni pretendentów, która zawiera ranking pokazujący wysokie wyniki. Wdrożysz zarówno w wystąpieniach programistycznych, jak i przejściowych aplikacji internetowej platformy Azure dla systemu Linux.
Wymagania wstępne
- Konto usługi GitHub, na którym można utworzyć repozytorium. Utwórz je bezpłatnie.
- Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Organizacja i projekt usługi Azure DevOps. Utwórz je bezpłatnie.
- Możliwość uruchamiania potoków na agentach hostowanych przez firmę Microsoft. Możesz kupić zadanie równoległe lub zażądać warstwy Bezpłatna.
Rozwidlenie projektu
Rozwidlenie następującego przykładowego repozytorium w usłudze GitHub.
https://github.com/MicrosoftDocs/mslearn-tailspin-spacegame-web-deploy
Tworzenie wystąpień usługi App Service
Przed wdrożeniem potoku należy najpierw utworzyć wystąpienie usługi App Service do wdrożenia. Użyjesz interfejsu wiersza polecenia platformy Azure do utworzenia wystąpienia.
Zaloguj się w witrynie Azure Portal.
Z menu wybierz pozycję Cloud Shell i środowisko powłoki Bash .
Wygeneruj losową liczbę, która sprawia, że nazwa domeny aplikacji internetowej jest unikatowa. Zaletą unikatowej wartości jest to, że wystąpienie usługi App Service nie będzie miało konfliktu nazw z innymi osobami uczącymi się ukończenia tego samouczka.
webappsuffix=$RANDOM
Otwórz wiersz polecenia i użyj
az group create
polecenia , aby utworzyć grupę zasobów o nazwie tailspin-space-game-rg , która zawiera wszystkie wystąpienia usługi App Service. Zaktualizuj wartość taklocation
, aby korzystała z najbliższego regionu.az group create --location eastus --name tailspin-space-game-rg
Użyj wiersza polecenia, aby utworzyć plan usługi App Service.
az appservice plan create \ --name tailspin-space-game-asp \ --resource-group tailspin-space-game-rg \ --sku B1 \ --is-linux
W wierszu polecenia utwórz dwa wystąpienia usługi App Service, po jednym dla każdego wystąpienia (deweloperskie i przejściowe) za
az webapp create
pomocą polecenia .az webapp create \ --name tailspin-space-game-web-dev-$webappsuffix \ --resource-group tailspin-space-game-rg \ --plan tailspin-space-game-asp \ --runtime "DOTNET|6.0" az webapp create \ --name tailspin-space-game-web-staging-$webappsuffix \ --resource-group tailspin-space-game-rg \ --plan tailspin-space-game-asp \ --runtime "DOTNET|6.0"
W wierszu polecenia wyświetl listę obu wystąpień usługi App Service, aby sprawdzić, czy są uruchomione za
az webapp list
pomocą polecenia .az webapp list \ --resource-group tailspin-space-game-rg \ --query "[].{hostName: defaultHostName, state: state}" \ --output table
Skopiuj nazwy wystąpień usługi App Service do użycia jako zmienne w następnej sekcji.
Tworzenie projektu i zmiennych usługi Azure DevOps
Konfigurowanie projektu usługi Azure DevOps i potoku kompilacji. Dodasz również zmienne dla wystąpień programistycznych i przejściowych.
Potok kompilacji:
- Zawiera wyzwalacz uruchamiany po zmianie kodu na gałąź
- Definiuje dwie zmienne i
buildConfiguration
releaseBranchName
- Zawiera etap o nazwie Kompilacja, który kompiluje aplikację internetową
- Publikuje artefakt, którego będziesz używać w późniejszym etapie
Dodawanie etapu kompilacji
Zaloguj się do organizacji usługi Azure DevOps i przejdź do projektu.
Przejdź do obszaru Potoki, a następnie wybierz pozycję Nowy potok lub Utwórz potok , jeśli tworzysz pierwszy potok.
Wykonaj kroki 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 repozytorium.
Możesz zostać przekierowany do usługi GitHub, aby zainstalować aplikację Azure Pipelines. Jeśli tak, wybierz pozycję Zatwierdź i zainstaluj.
Po wyświetleniu karty Konfigurowanie wybierz pozycję Potok startowy.
Zastąp zawartość azure-pipelines.yml tym kodem.
trigger: - '*' variables: buildConfiguration: 'Release' releaseBranchName: 'release' stages: - stage: 'Build' displayName: 'Build the web application' jobs: - job: 'Build' displayName: 'Build job' pool: vmImage: 'ubuntu-20.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '6.x' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets' - task: gulp@1 displayName: 'Run gulp tasks' - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt' displayName: 'Write build info' workingDirectory: $(wwwrootDir) - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--no-restore --configuration $(buildConfiguration)' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - publish: '$(Build.ArtifactStagingDirectory)' artifact: drop
Gdy wszystko będzie gotowe, wybierz pozycję Zapisz i uruchom.
Dodawanie zmiennych wystąpienia
W usłudze Azure DevOps przejdź do pozycji Biblioteka potoków>.
Wybierz pozycję + Grupa zmiennych.
W obszarze Właściwości dodaj wartość Release dla nazwy grupy zmiennych.
Utwórz dwie zmienne, aby odwoływać się do nazw hostów programistycznych i przejściowych. Zastąp wartość
1234
poprawną wartością wystąpienia.Nazwa zmiennej Przykładowa wartość WebAppNameDev tailspin-space-game-web-dev-1234 WebAppNameStaging tailspin-space-game-web-staging-1234 Wybierz pozycję Zapisz , aby zapisać zmienne.
Dodawanie etapu deweloperskiego
Następnie zaktualizujesz potok, aby podwyższyć poziom kompilacji do etapu deweloperskiego.
W usłudze Azure Pipelines przejdź do pozycji Potoki>.
Wybierz pozycję Edytuj w menu kontekstowym, aby edytować potok.
Zaktualizuj azure-pipelines.yml , aby uwzględnić etap deweloperski. Na etapie tworzenia potok będzie:
Uruchamianie po pomyślnym zakończeniu etapu kompilacji z powodu warunku
Pobieranie artefaktu z
drop
Wdrażanie w usłudze aplikacja systemu Azure przy użyciu połączenia usługi Azure Resource Manager
trigger: - '*' variables: buildConfiguration: 'Release' releaseBranchName: 'release' stages: - stage: 'Build' displayName: 'Build the web application' jobs: - job: 'Build' displayName: 'Build job' pool: vmImage: 'ubuntu-20.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '6.x' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets' - task: gulp@1 displayName: 'Run gulp tasks' - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt' displayName: 'Write build info' workingDirectory: $(wwwrootDir) - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--no-restore --configuration $(buildConfiguration)' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - publish: '$(Build.ArtifactStagingDirectory)' artifact: drop - stage: 'Dev' displayName: 'Deploy to the dev environment' dependsOn: Build condition: succeeded() jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: dev variables: - group: Release strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: dev website' inputs: azureSubscription: 'your-subscription' appType: 'webAppLinux' appName: '$(WebAppNameDev)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
Zmień zadanie,
AzureWebApp@1
aby używało subskrypcji.Wybierz pozycję Ustawienia zadania.
Zaktualizuj wartość subskrypcji platformy
your-subscription
Azure, aby używać własnej subskrypcji. W ramach tego procesu może być konieczne autoryzowanie dostępu. Jeśli wystąpi problem z autoryzowaniem zasobu w edytorze YAML, alternatywnym podejściem jest utworzenie połączenia z usługą.Ustaw wartość Typ aplikacji na Aplikację internetową w systemie Linux.
Wybierz pozycję Dodaj , aby zaktualizować zadanie.
Zapisz i uruchom potok.
Dodawanie etapu przejściowego
Na koniec podwyższ poziom etapu deweloperskiego do etapu Przejściowego. W przeciwieństwie do środowiska deweloperskiego chcesz mieć większą kontrolę w środowisku przejściowym, które należy dodać do zatwierdzenia ręcznego.
Tworzenie środowiska przejściowego
W obszarze Azure Pipelines wybierz pozycję Środowiska.
Wybierz pozycję Nowe środowisko.
Utwórz nowe środowisko o nazwie przejściowej i ustawić zasób na Wartość Brak.
Na stronie środowiska przejściowego wybierz pozycję Zatwierdzenia i testy.
Wybierz pozycję Zatwierdzenia.
W obszarze Osoby zatwierdzające wybierz pozycję Dodaj użytkowników i grupy, a następnie wybierz swoje konto.
W obszarze Instrukcje dotyczące osób zatwierdzających napisz zatwierdź tę zmianę, gdy będzie gotowa do przemieszczania.
Wybierz pozycję Zapisz.
Dodawanie nowego etapu do potoku
Do potoku zostanie dodany nowy etap Staging
, który zawiera zatwierdzenie ręczne.
Edytuj plik potoku i dodaj sekcję
Staging
.trigger: - '*' variables: buildConfiguration: 'Release' releaseBranchName: 'release' stages: - stage: 'Build' displayName: 'Build the web application' jobs: - job: 'Build' displayName: 'Build job' pool: vmImage: 'ubuntu-20.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '6.x' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets' - task: gulp@1 displayName: 'Run gulp tasks' - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt' displayName: 'Write build info' workingDirectory: $(wwwrootDir) - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--no-restore --configuration $(buildConfiguration)' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - publish: '$(Build.ArtifactStagingDirectory)' artifact: drop - stage: 'Dev' displayName: 'Deploy to the dev environment' dependsOn: Build condition: succeeded() jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: dev variables: - group: Release strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: dev website' inputs: azureSubscription: 'your-subscription' appType: 'webAppLinux' appName: '$(WebAppNameDev)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip' - stage: 'Staging' displayName: 'Deploy to the staging environment' dependsOn: Dev jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: staging variables: - group: 'Release' strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: staging website' inputs: azureSubscription: 'your-subscription' appType: 'webAppLinux' appName: '$(WebAppNameStaging)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
Zmień zadanie na etapie przejściowym
AzureWebApp@1
, aby używać subskrypcji.Wybierz pozycję Ustawienia zadania.
Zaktualizuj wartość subskrypcji platformy
your-subscription
Azure, aby używać własnej subskrypcji. W ramach tego procesu może być konieczne autoryzowanie dostępu.Ustaw wartość Typ aplikacji na Aplikację internetową w systemie Linux.
Wybierz pozycję Dodaj , aby zaktualizować zadanie.
Przejdź do uruchomienia potoku. Obejrzyj kompilację podczas jej uruchamiania. Gdy osiągnie
Staging
wartość , potok czeka na ręczne zatwierdzenie wydania. Otrzymasz również wiadomość e-mail z informacją o oczekiwaniu na zatwierdzenie potoku.Przejrzyj zatwierdzenie i zezwól na uruchomienie potoku.
Czyszczenie zasobów
Jeśli nie zamierzasz nadal korzystać z tej aplikacji, usuń grupę zasobów w witrynie Azure Portal i projekt w usłudze Azure DevOps, wykonując następujące czynności:
Aby wyczyścić grupę zasobów:
Przejdź do witryny Azure Portal i zaloguj się.
Na pasku menu wybierz pozycję Cloud Shell. Po wyświetleniu monitu wybierz środowisko powłoki Bash .
Uruchom następujące polecenie az group delete, aby usunąć użytą grupę zasobów .
tailspin-space-game-rg
az group delete --name tailspin-space-game-rg
Aby usunąć projekt usługi Azure DevOps, w tym potok kompilacji, zobacz Usuwanie projektu.