Руководство. Создание многоэтапного конвейера с помощью Azure DevOps
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
С помощью конвейера Azure DevOps можно разделить процесс CI/CD на этапы, представляющие различные части цикла разработки. Использование многоэтапного конвейера обеспечивает более подробную информацию о процессе развертывания и упрощает интеграцию утверждений и проверок.
В этой статье вы создадите два экземпляра Служба приложений и создадите конвейер YAML с тремя этапами:
В реальном сценарии может потребоваться еще один этап развертывания в рабочей среде в зависимости от процесса DevOps.
Пример кода в этом упражнении предназначен для веб-приложения .NET для притворного пространства игры, которая включает в себя список лидеров для отображения высоких показателей. Вы развернете как разработку, так и промежуточный экземпляр веб-приложения Azure для Linux.
Необходимые компоненты
- Учетная запись GitHub, в которой можно создать репозиторий. Создайте ее бесплатно.
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Организация и проект Azure DevOps. Создайте ее бесплатно.
- Возможность запуска конвейеров на размещенных агентах Майкрософт. Вы можете приобрести параллельное задание или запросить уровень "Бесплатный".
Вилка проекта
Вилку из следующего примера репозитория на сайте GitHub.
https://github.com/MicrosoftDocs/mslearn-tailspin-spacegame-web-deploy
Создание экземпляров Служба приложений
Прежде чем развернуть конвейер, необходимо сначала создать экземпляр Служба приложений для развертывания. Вы будете использовать Azure CLI для создания экземпляра.
Войдите на портал Azure.
В меню выберите Cloud Shell и интерфейс Bash .
Создайте случайное число, которое делает доменное имя веб-приложения уникальным. Преимущество уникального значения заключается в том, что ваш экземпляр Служба приложений не будет иметь конфликта имен с другими обучающимися, завершив работу с этим руководством.
webappsuffix=$RANDOM
Откройте командную строку и используйте
az group create
команду для создания группы ресурсов с именем tailspin-space-game-rg, содержащей все экземпляры Служба приложений. Обновите значение, чтобы использовать ближайшийlocation
регион.az group create --location eastus --name tailspin-space-game-rg
Используйте командную строку для создания плана Служба приложений.
az appservice plan create \ --name tailspin-space-game-asp \ --resource-group tailspin-space-game-rg \ --sku B1 \ --is-linux
В командной строке создайте два экземпляра Служба приложений, по одному для каждого экземпляра (разработки и промежуточного
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|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"
В командной строке выведите список Служба приложений экземпляров, чтобы убедиться, что они выполняются с
az webapp list
помощью команды.az webapp list \ --resource-group tailspin-space-game-rg \ --query "[].{hostName: defaultHostName, state: state}" \ --output table
Скопируйте имена экземпляров Служба приложений, которые будут использоваться в качестве переменных в следующем разделе.
Создание проекта и переменных Azure DevOps
Настройте проект Azure DevOps и конвейер сборки. Вы также добавите переменные для разработки и промежуточный экземпляр.
Конвейер сборки:
- Включает триггер, который выполняется при изменении кода в ветвь
- Определяет две переменные и
buildConfiguration
releaseBranchName
- Включает этап с именем Build, который создает веб-приложение.
- Публикует артефакт, который вы будете использовать на более позднем этапе
Добавление этапа сборки
Войдите в свою организацию Azure DevOps и откройте нужный проект.
Перейдите к конвейерам и выберите "Создать конвейер" или "Создать конвейер" при создании первого конвейера.
Выполните все шаги мастера, выбрав GitHub в качестве расположения исходного кода.
Возможно, вам придется выполнить вход в GitHub. Для этого введите учетные данные GitHub.
Когда появится список репозиториев, выберите свой.
Вы можете перенаправиться на GitHub, чтобы установить приложение Azure Pipelines. В этом случае выберите " Утвердить" и "Установить".
Когда откроется вкладка "Настройка", выберите конвейер начального сервера.
Замените содержимое azure-pipelines.yml этим кодом.
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
Когда будете готовы, выберите Сохранить и запустить.
Добавление переменных экземпляра
В Azure DevOps перейдите в библиотеку Pipelines>.
Выберите и группу переменных.
В разделе "Свойства" добавьте выпуск для имени группы переменных.
Создайте две переменные, чтобы ссылаться на имена разработчиков и промежуточных узлов. Замените значение правильным значением
1234
для экземпляра.Имя переменной Пример значения WebAppNameDev tailspin-space-game-web-dev-1234 WebAppNameStaging tailspin-space-game-web-staging-1234 Нажмите кнопку "Сохранить", чтобы сохранить переменные.
Добавление этапа разработки
Затем вы обновите конвейер, чтобы повысить уровень сборки до этапа разработки.
В Azure Pipelines перейдите к конвейерам>Конвейеров.
Выберите "Изменить " в контекстном меню, чтобы изменить конвейер.
Обновление azure-pipelines.yml , чтобы включить этап разработки. На этапе разработки конвейер будет:
- Запуск при успешном выполнении этапа сборки из-за условия
- Скачивание артефакта из
drop
- Развертывание в службе приложение Azure с подключением службы 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'
Измените
AzureWebApp@1
задачу, чтобы использовать подписку.Выберите параметры для задачи.
your-subscription
Обновите значение подписки Azure, чтобы использовать собственную подписку. Возможно, вам потребуется авторизовать доступ в рамках этого процесса. При возникновении проблемы с авторизацией ресурса в редакторе YAML альтернативный подход заключается в создании подключения к службе.Задайте для типа приложения значение Web App в Linux.
Нажмите кнопку "Добавить ", чтобы обновить задачу.
Сохраните и запустите конвейер.
Добавление промежуточного этапа
Наконец, вы продвигаете этап разработки до промежуточного. В отличие от среды разработки, вы хотите иметь больше управления в промежуточной среде, которую вы добавите ручное утверждение.
Создание промежуточной среды
В Azure Pipelines выберите "Среды".
Выберите новую среду.
Создайте новую среду с промежуточным именем , а для ресурса задано значение None.
На странице промежуточной среды выберите "Утверждения" и "Проверки".
Выберите утверждения.
В утверждающих выберите " Добавить пользователей и группы", а затем выберите свою учетную запись.
В инструкциях утверждающих напишите это изменение, когда оно готово к промежуточному выполнению.
Выберите Сохранить.
Добавление нового этапа в конвейер
Вы добавите новый этап в конвейер, Staging
включающий утверждение вручную.
Измените файл конвейера и добавьте
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'
Измените
AzureWebApp@1
задачу на промежуточном этапе, чтобы использовать подписку.Выберите параметры для задачи.
your-subscription
Обновите значение подписки Azure, чтобы использовать собственную подписку. Возможно, вам потребуется авторизовать доступ в рамках этого процесса.Задайте для типа приложения значение Web App в Linux.
Нажмите кнопку "Добавить ", чтобы обновить задачу.
Перейдите к запуску конвейера. Просмотрите сборку при выполнении. По достижении
Staging
конвейер ожидает утверждения выпуска вручную. Вы также получите сообщение электронной почты, ожидающее утверждения конвейера.Просмотрите утверждение и разрешите запуск конвейера.
Очистка ресурсов
Если вы не собираетесь продолжать использовать это приложение, удалите группу ресурсов в портал Azure и проект в Azure DevOps, выполнив следующие действия:
Чтобы очистить группу ресурсов, выполните приведенные действия.
Перейдите на портал Azure и войдите в систему.
В строке меню выберите Cloud Shell. При появлении запроса выберите интерфейс Bash .
Выполните следующую команду az group delete , чтобы удалить используемую
tailspin-space-game-rg
группу ресурсов.az group delete --name tailspin-space-game-rg
Чтобы удалить проект Azure DevOps, включая конвейер сборки, см. статью "Удалить проект".