Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020
Виртуальные машины можно добавить в качестве ресурсов в средах Azure Pipelines и нацелить их на развертывания. Для рабочего процесса непрерывной интеграции и непрерывного развертывания (CI/CD) история развертывания среды обеспечивает трассируемость каждой виртуальной машины к инициирующему коммиту.
В этой статье показано, как настроить конвейер Azure DevOps для развертываний в нескольких ресурсах виртуальной машины Linux в среде. Эти инструкции создают и развертывают приложение JavaScript или Java, но их можно адаптировать для любого приложения, публикующего пакет веб-развертывания.
Дополнительные сведения о средах и ресурсах, предназначенных для задания развертывания, см. в определении схемы YAML jobs.deployment.environment . Дополнительные сведения о заданиях развертывания см. в определении jobs.deployment .
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Организация и проект Azure DevOps. Регистрация в Azure Pipelines
Кроме того, для приложений JavaScript или Node.js:
- По крайней мере две виртуальные машины Linux, настроенные с помощью Nginx в Azure.
- Собственный форк репозитория примера кода GitHub на https://github.com/MicrosoftDocs/pipelines-javascript. Если у вас уже есть приложение в GitHub, которое вы хотите развернуть, вместо этого можно использовать код.
Внимание
- Для развертывания приложений целевые ресурсы виртуальной машины среды должны иметь все необходимые программы, зависимости, разрешения и имена входа, установленные и настроенные.
- Чтобы использовать исходный код GitHub, необходимо подключение службы GitHub. GitHub также может предложить вам войти, установить приложение GitHub Azure Pipelines или авторизовать Azure Pipelines. Чтобы завершить каждый процесс, следуйте инструкциям на экране. Дополнительные сведения см. в разделе Access к репозиториям GitHub.
Создание среды и добавление виртуальных машин Linux
В проекте Azure Pipelines создайте среду и добавьте виртуальные машины Linux в качестве ресурсов среды, выполнив инструкции по созданию среды и добавлению виртуальной машины.
Запустите скрипт регистрации скопированного агента на каждой виртуальной машине, чтобы зарегистрировать его в среде. Вы также можете назначить теги отдельным виртуальным машинам, отвечая на интерактивные запросы.
Создание и запуск конвейера сборки
Создайте конвейер CI, который будет создавать и развертывать ваше приложение при каждом коммите в ветку main вашего репозитория кода.
Создание конвейера YAML
- В проекте Azure DevOps выберите конвейер ">Создать конвейер " или "Создать конвейер", а затем выберите GitHub в качестве расположения исходного кода.
- На экране "Выбор репозитория" выберите вилку репозитория.
- На экране "Настройка конвейера" выберите "Начальный конвейер".
- На экране Обзор вашего конвейера YAML замените созданный начальный код следующим кодом в зависимости от используемой среды выполнения.
Добавление задания сборки
Работа Build выполняет задачи по сборке и тестированию проекта и отправляет результаты сборки в drop местоположение. Это задание выполняется на агентах сборки, указанных в конвейере pool, а не на виртуальных машинах среды Linux.
Следующий конвейер собирает и тестирует проект Node.js с помощью npm, затем упаковывает выходные данные и отправляет их в расположение выгрузки.
trigger:
- main
pool:
vmImage: ubuntu-latest
jobs:
- job: Build
displayName: Build
steps:
- task: UseNode@1
inputs:
version: '16.x'
displayName: 'Install Node.js'
- script: |
npm install
npm run build --if-present
npm run test --if-present
displayName: 'npm install, build and test'
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
includeRootFolder: false
archiveType: tar
tarCompression: gz
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).gz
replaceExistingArchive: true
- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).gz
artifact: drop
Дополнительные сведения см. в разделе Сборка приложения Node.js с помощью gulp.
Запуск конвейера
Чтобы сохранить файл azure-pipelines.yml в репозитории и запустить конвейер CI/CD, нажмите кнопку "Сохранить и запустить", а затем нажмите кнопку "Сохранить и снова запустить ".
По завершении конвейера просмотрите страницу сводки заданий, чтобы убедиться, что задание сборки выполнено успешно, и в разделе "Связанные" появится 1 опубликованный артефакт.
Добавление и запуск задания развертывания
Задание развертывания выполняет хуки жизненного цикла preDeploy, deploy, routeTraffic, и postRouteTraffic один раз, а затем выполняет либо on: success, либо on: failure. При развертывании на виртуальные машины среды preDeploy фаза выполняется на агенте сборки, а не на виртуальных машинах этой среды. Все остальные шаги выполняются на зарегистрированных виртуальных машинах в среде.
- Необязательный
preDeployшаг выполняется перед развертыванием. Этот шаг можно использовать для оркестрации, подготовки виртуальных машин и артефактов, проверок работоспособности. - Шаг
deployразвертывает объект развертывания на виртуальных машинах целевой среды. - Необязательный
routeTrafficшаг может применять переключение трафика. - Необязательный
postRouteTrafficшаг может выполнять проверки состояния и уведомления. - Пользовательские
on.failureиon.successшаги могут предоставлять уведомления или восстановление.
Задание развертывания в среду с виртуальными машинами resourceType: VirtualMachine требует, чтобы эти машины могли выполнять все задачи конвейера, такие как Bash или Azure CLI. Вы можете использовать шаг preDeploy для установки необходимого программного обеспечения и разрешений на целевых виртуальных машинах.
Например, если шаг развертывания использует Azure CLI, виртуальные машины агента должны иметь Azure CLI, установленные и доступные в PATH для пользователя агента. Пользователь агента должен иметь разрешение на запуск интерфейса командной строки и должен пройти проверку подлинности в Azure. Возможно, потребуется добавить пользователя агента в sudoers или настроить переменные среды для автоматизации установки.
Вы можете использовать preDeploy скрипт для установки Azure CLI на целевых виртуальных машинах. Чтобы выполнить проверку подлинности в Azure, можно запустить az login, или для автоматизации определить служебный объект и выполнить az login --service-principal на этапе preDeploy.
Добавьте задание развертывания
Задание развертывания в приведенном примере начинается после успешного завершения задания Build. Чтобы добавить задание в конвейер, выполните следующие действия.
Щелкните значок "Дополнительные действия " в правом верхнем углу страницы "Сводка ", выберите "Изменить конвейер" и добавьте следующий код в конец конвейера. Замените
<environment-name>именем созданной среды.При желании можно выбрать определенные виртуальные машины из среды для развертывания, используя параметр
tagsи указав<VMtag>, который вы определили для виртуальной машины.- deployment: VMDeploy displayName: Web deploy dependsOn: Build condition: succeeded() environment: name: <environment-name> resourceType: VirtualMachine tags: <VMtag> # VMs to deploy toДобавьте
strategyк заданиюdeployment. Стратегия развертывания runOnce является самым простым и выполняется по умолчанию, если не указатьstrategy. Эта стратегия выполняет шаги развертывания один раз на каждой виртуальной машине в среде без параллелизма или управления трафиком.strategy: runOnce: deploy: steps: - script: echo my first deploymentПосле добавления задания развертывания выберите "Проверить и сохранить", а затем нажмите кнопку "Сохранить", " Выполнить" и снова нажмите кнопку "Выполнить ". При каждом выполнении этого задания история развертываний фиксируется относительно среды.
Примечание.
При первом запуске конвейера, использующего среду, необходимо предоставить разрешение для всех запусков конвейера для доступа к пулу агентов и среде. Выберите символ ожидания рядом с заданием на экране запуска сводки конвейера, а затем нажмите кнопку "Разрешить предоставить необходимые разрешения".
Стратегия последовательного развертывания
Вместо стратегии развертывания runOnce можно использовать rolling.
Стратегия последовательного развертывания может управлять параллелизмом, проверками работоспособности и маршрутизацией трафика.
runOnce Хотя стратегия выполняется на одной виртуальной машине одновременно, последовательное развертывание может выполняться параллельно при перекатных наборах до пяти целевых виртуальных машин в зависимости от maxParallel параметра.
Параметр maxParallel задает количество или процент виртуальных машин, которые должны оставаться доступными, гарантируя, что приложение может обрабатывать запросы и уменьшать общее время простоя во время развертывания. Этот параметр также определяет условия успешности и сбоя развертывания.
Дополнительные сведения о стратегии последовательного развертывания см. в определении схемы jobs.deployment.strategy.rolling .
Пример задания развертывания
Для развертывания ресурсов виртуальных машин требуется наличие всех необходимых приложений, зависимостей и разрешений, установленных и настроенных. Необходимо вручную предварительно установить эти требования, или конвейер должен установить или внедрить их.
Развертывание приложения Java на ресурсы виртуальных машин проще реализовать, так как оно самодостаточно. Виртуальная машина Java (JVM) часто предварительно настроена на агентах виртуальных машин, и вам не нужно беспокоиться о зависимости приложений, разрешениях или управлении пакетами. Вы можете просто скачать JAR-файл, а затем запустить его с java -jarпомощью.
Приложению Node.js требуется наличие и настройка Node.js, возможно, npm-зависимостей, а также диспетчер служб, такой как systemd, который должен быть установлен и настроен на каждой виртуальной машине агента. Для автоматизации скрипт развертывания конвейера должен быть неинтерактивным и иметь возможность перезапуска и управления службой приложения.
Следующее задание по развертыванию YAML rolling для приложения JavaScript зависит от успешного завершения этапа Build. Задание развертывания предполагает, что следующие требования уже предварительно установлены или предварительно настроены на каждой виртуальной машине агента. Для полной автоматизации можно установить и настроить эти приложения и службы на виртуальных машинах в рамках конвейера.
- Node.js 16.x установлен и npm доступен в PATH на агенте сборки.
- Система Systemd с файлом службы Systemd, настроенным для запуска Node.js приложения, например /etc/systemd/system/pipelines-javascript.service.
- Настройка безпарольного доступа sudo для пользователя агента для необходимых команд через
NOPASSWD:в /etc/sudoers. - Разрешения на запись для агентного пользователя в /opt/pipelines-javascript или другой целевой директории развертывания.
Подсказка
Для большинства приложений Node.js рекомендуется развертывать в Службе приложений Azure или использовать обычные задания конвейера с агентами, размещенными корпорацией Майкрософт, вместо использования заданий развертывания. Этот подход проще и позволяет избежать операционных накладных расходов на управление средами виртуальных машин. Развертывание на конкретных ресурсах виртуальных машин лучше всего подходит для сценариев, требующих прямого управления серверами виртуальных машин, расширенной оркестрацией или устаревшей инфраструктурой.
- stage: Deploy
displayName: Rolling Deploy to VMs
dependsOn: Build
condition: succeeded()
jobs:
- deployment: RollingDeploy
displayName: Rolling deploy to Ubuntu VMs
environment:
name: <environment-name>
resourceType: VirtualMachine
strategy:
rolling:
maxParallel: 1 #or 2 for parallel. For percentages, use x%
preDeploy:
steps:
- download: current
artifact: drop
- script: echo "Pre-deploy on $(hostname)"
deploy:
steps:
- script: |
echo "Unpacking Node.js app on $(hostname)"
sudo mkdir -p /opt/pipelines-javascript
sudo tar -xzf $(Pipeline.Workspace)/drop/$(Build.BuildId).tar.gz -C /opt/pipelines-javascript --strip-components=1
cd /opt/pipelines-javascript
echo "Installing production dependencies"
sudo npm ci --only=production
echo "Restarting Node.js service"
sudo systemctl restart pipelines-javascript
displayName: 'Extract, install, and restart Node.js service'
routeTraffic:
steps:
- script: echo "Routing traffic on $(hostname)"
postRouteTraffic:
steps:
- script: echo "Post-route health check on $(hostname)"
on:
failure:
steps:
- script: echo "Deployment failed on $(hostname)"
success:
steps:
- script: echo "Deployment succeeded on $(hostname)"
Доступ к трассировке конвейера в среде
Вкладка "Развертывания" обеспечивает полную трассируемость фиксаций и рабочих элементов, а также историю развертывания для среды с учетом всех конвейеров.