Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Użyj wieloetapowego potoku Azure DevOps, aby podzielić proces CI/CD na etapy, które reprezentują różne części cyklu rozwoju. Rurociąg wieloetapowy zapewnia lepszy wgląd w proces wdrażania i ułatwia integrację zatwierdzeń i kontroli.
W tym artykule utworzysz dwa wystąpienia usługi App Service i zbudujesz potok YAML z trzema fazami.
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 .NET dla fikcyjnej gry kosmicznej, która zawiera ranking pokazujący wysokie wyniki. Wdrożysz zarówno w instancjach deweloperskich, jak i testowych usługi Azure Web App dla systemu Linux.
Wymagania wstępne
| produkt | Wymagania |
|---|---|
| Azure DevOps | — Organizacja i projekt usługi Azure DevOps.
Utwórz je bezpłatnie. Uprawnienia: - - Aby udzielić dostępu do wszystkich linii w projekcie: musisz być członkiem Grupy Administratorzy Projektu . - Aby utworzyć połączenia usług: musisz mieć rolę Administrator lub Twórca dla połączeń usług. — Możliwość uruchamiania pipeline'ów na agentach hostowanych przez firmę Microsoft. Możesz kupić zadanie równoległe albo poprosić o darmowy poziom. |
| Usługa GitHub | — Konto GitHub . |
Sforkuj projekt
Rozgałęź podane przykładowe repozytorium na GitHubie.
https://github.com/MicrosoftDocs/mslearn-tailspin-spacegame-web-deploy
Tworzenie wystąpień usługi App Service
Przed wdrożeniem potoku musisz najpierw utworzyć wystąpienie App Service, do którego chcesz wdrażać. Użyjesz Azure CLI do utworzenia wystąpienia.
Zaloguj się do witryny Azure Portal.
Z menu wybierz Cloud Shell i Bash.
Wygeneruj losową liczbę, która sprawia, że nazwa domeny aplikacji internetowej jest unikatowa. Zaletą unikalnej wartości jest to, że wystąpienie usługi App Service nie będzie miało konfliktu nazw z innymi osobami realizującymi ten samouczek.
webappsuffix=$RANDOMOtwórz wiersz polecenia i użyj
az group createpolecenia , aby utworzyć grupę zasobów o nazwie tailspin-space-game-rg , która zawiera wszystkie wystąpienia usługi App Service. Zaktualizuj wartośćlocation, aby korzystać z najbliższego regionu.az group create --location eastus --name tailspin-space-game-rgUż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-linuxW wierszu polecenia utwórz dwa wystąpienia usługi App Service, po jednym dla każdego wystąpienia (deweloperskie i przejściowe) przy użyciu polecenia
az webapp create.az webapp create \ --name tailspin-space-game-web-dev-$webappsuffix \ --resource-group tailspin-space-game-rg \ --plan tailspin-space-game-asp \ --runtime "DOTNET|8.0" az webapp create \ --name tailspin-space-game-web-staging-$webappsuffix \ --resource-group tailspin-space-game-rg \ --plan tailspin-space-game-asp \ --runtime "DOTNET|8.0"W wierszu polecenia wyświetl listę obu wystąpień usługi App Service za pomocą polecenia
az webapp list, aby sprawdzić, czy działają.az webapp list \ --resource-group tailspin-space-game-rg \ --query "[].{hostName: defaultHostName, state: state}" \ --output tableSkopiuj nazwy wystąpień usługi App Service do użycia jako zmienne w następnej sekcji.
Tworzenie projektu i zmiennych usługi Azure DevOps
Skonfiguruj projekt usługi Azure DevOps i potok kompilacji. Dodasz również zmienne dla wystąpień programistycznych i środowiska testowego.
Potok kompilacji:
- Zawiera wyzwalacz uruchamiany po zmianie kodu w gałęzi
- Definiuje dwie zmienne
buildConfigurationireleaseBranchName - 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
W projekcie usługi Azure DevOps wybierz pozycję Potoki z menu nawigacji po lewej stronie.
Wybierz pozycję Nowy potok lub Utwórz potok , jeśli ten potok jest pierwszym w projekcie.
Na ekranie Gdzie jest twój kod wybierz pozycję GitHub.
Być może nastąpi przekierowanie do usługi GitHub w celu zalogowania się. Jeśli tak, wprowadź poświadczenia GitHub.
Na ekranie Wybieranie repozytorium wybierz repozytorium, w których znajduje się aplikacja .NET.
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-22.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '8.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: dropGdy wszystko będzie gotowe, wybierz pozycję Zapisz i uruchom.
Dodaj zmienne wystąpienia
W usłudze Azure DevOps przejdź do Potoki>Biblioteka.
Wybierz + Grupa zmiennych.
W obszarze Właściwości dodaj Release jako nazwę grupy zmiennych.
Utwórz dwie zmienne, aby odwoływać się do nazw hostów programistycznych i testowych. Zastąp wartość
1234poprawną 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 ciąg pracy, aby przekazać kompilację do fazy deweloperskiej.
W usłudze Azure Pipelines przejdź do
Pipelines Pipelines .Wybierz pozycję Edytuj w menu kontekstowym, aby edytować pipeline.
Zaktualizuj azure-pipelines.yml , aby uwzględnić etap deweloperski. Na etapie rozwoju twój potok będzie:
- Uruchomienie po pomyślnym zakończeniu etapu kompilacji na skutek spełnienia warunku
- Pobieranie artefaktu z
drop - Wdrażanie w usłudze Azure App Service 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-22.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '8.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-22.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ść
your-subscriptiondla subskrypcji 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 Typ aplikacji na Aplikację webową na 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 Testowego. W przeciwieństwie do środowiska deweloperskiego, w środowisku przejściowym chcesz mieć większą kontrolę, dlatego dodasz zatwierdzenie ręczne.
Utwórz środowisko przejściowe
W obszarze Azure Pipelines wybierz pozycję Środowiska.
Wybierz pozycję Nowe środowisko.
Utwórz nowe środowisko o nazwie staging i ustaw zasób na Brak.
Na stronie środowiska przejściowego wybierz pozycję Zatwierdzenia i testy.
Wybierz Zatwierdzenia.
W obszarze Osoby zatwierdzające wybierz pozycję Dodaj użytkowników i grupy, a następnie wybierz swoje konto.
W sekcji Instrukcje dla zatwierdzających napisz zatwierdź tę zmianę, gdy będzie gotowa do wprowadzenia.
Wybierz pozycję Zapisz.
Dodawanie nowego etapu do potoku
Do potoku dodasz nowy etap Staging, który zawiera ręczne zatwierdzenie.
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-22.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '8.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-22.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-22.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 Staging
AzureWebApp@1, aby używać swojej subskrypcji.Wybierz pozycję Ustawienia zadania.
Zaktualizuj wartość
your-subscriptiondla subskrypcji Azure, aby używać własnej subskrypcji. W ramach tego procesu może być konieczne autoryzowanie dostępu.
Ustaw Typ aplikacji na Aplikację webową na systemie Linux.
Wybierz pozycję Dodaj , aby zaktualizować zadanie.
Przejdź do wyników działania potoku. Obejrzyj kompilację podczas jej uruchamiania. Gdy osiągnie
Stagingwartość , potok czeka na ręczne zatwierdzenie wydania. Otrzymasz również wiadomość e-mail z informacją, że twój proces oczekuje na zatwierdzenie.
Przejrzyj zatwierdzenie i zezwól na uruchomienie pipeline'u.
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 komunikatu wybierz opcję Bash.
Uruchom następujące polecenie az group delete, aby usunąć użytą grupę zasobów .
tailspin-space-game-rgaz group delete --name tailspin-space-game-rg
Aby usunąć projekt usługi Azure DevOps, w tym potok kompilacji, zobacz Usuwanie projektu.