Azure DevOps

Что это такое

Azure DevOps — набор инструментов поставки от Microsoft: хостинговые git-репозитории, служба конвейеров, трекер рабочих элементов и канал артефактов, продаваемые вместе и пригодные к использованию по отдельности. Конвейеры могут выполняться на раннерах, хостингуемых Microsoft, или на агентах, которые вы устанавливаете на своих машинах, что делает этот набор средней позицией между полностью хостинговым сервисом и полностью самостоятельно размещённым.

Почему это важно

Преимущество набора — интеграция: рабочий элемент связан с веткой, сборка ветки связана с рабочим элементом, а выпущенный артефакт записан против обоих. Для организации, которая уже пользуется инструментами Microsoft и хочет одного поставщика для планирования и поставки, эта непрерывность убирает несколько работ по синхронизации и целый класс вопросов «где требование для этого релиза». Цена в том, что набор сильнее всего, когда используется как набор, а принятие одной части тянет в разговор остальные.

Ключевые идеи

Рабочий элемент — единица прослеживаемости

Коммит ссылается на рабочий элемент, сборка ссылается на коммит, а релиз ссылается на сборку, поэтому путь от запроса до развёрнутого артефакта — одна непрерывная запись. Это по-настоящему ценно при аудите и во время инцидента, и это та возможность, которую труднее всего собрать из отдельных инструментов.

рабочий элемент -> ветка -> pull request -> сборка -> релиз -> развёрнутая версия

Конвейеры разделяют непрерывную интеграцию и релиз

Конвейер интеграции собирает и тестирует на каждом изменении; конвейер релиза берёт артефакт и разворачивает его по окружениям, часто с воротами одобрения между ними. Держать их различными значит, что прошедшая сборка сама по себе не является развёртыванием, — то же разделение делает любой здоровый конвейер.

Агенты могут быть хостинговыми или своими для каждой задачи

Раннер выбирается на каждый конвейер, поэтому сборка, которой нужна внутренняя сеть, идёт на самостоятельно размещённом агенте, а всё остальное — на хостинговом. Эта гибкость и есть причина, по которой набор подходит организациям, наполовину прошедшим путь к облачной инфраструктуре.

Окружения и одобрения — полноправные объекты

Развёртывание в защищённое окружение может требовать одобрения названного человека, и запись о том, кто что и когда одобрил, сохраняется. Это превращает политику в то, что инструмент обеспечивает, а не в соглашение, которое люди помнят.

У набора есть вес, и вам может быть нужна одна часть

Трекер, канал артефактов и репозитории — каждый сам по себе существенный продукт, и использование одного не требует остальных. Принять весь набор ради одного конвейера — значит ввезти инструменты, о которых никто не просил; принять только конвейер — совершенно обычное решение, и оно поддерживается.

Это один продукт среди сильных конкурентов

Возможности сходятся с другими хостинговыми сервисами; различия — в интеграции, корпоративных соглашениях и привычности окружающих инструментов Microsoft. Выбирать по этим основаниям разумно; выбирать по списку возможностей обычно нет.

Практика

Проследите один релиз от начала до конца

Возьмите недавний релиз и пройдите цепочку от рабочего элемента, который его запросил, до развёрнутого артефакта, отмечая на каждом шаге, какой инструмент записал связь.

Готово, когда: вы можете назвать развёрнутую версию, исходя только из рабочего элемента, никого не спрашивая.

Закройте развёртывание одобрением

Создайте защищённое окружение и потребуйте одобрения, прежде чем релиз сможет в него развернуться.

Готово, когда: релиз останавливается и ждёт, одобряющий записан, и на решение есть запись аудита.

Частые ошибки

  • Запускать интеграцию и релиз в одном конвейере — прошедшая сборка становится автоматическим релизом; исправить: разделите их и закройте релиз воротами.
  • Ставить самостоятельно размещённый агент повсюду — вы платите эксплуатационную цену там, где хватило бы хостингового раннера; исправить: размещайте свой агент только там, где есть сетевое требование.
  • Принимать весь набор ради одной возможности — команда наследует трекеры и каналы, которых не просила; исправить: пользуйтесь только теми частями, что оправдывают себя.
  • Держать определения вне репозитория — конвейеры нельзя ни отрецензировать, ни восстановить; исправить: держите определения конвейеров в системе контроля версий.
  • Считать одобрения формальностью — ворота щёлкают, не читая; исправить: прикладывайте к одобрению артефакт и сводку изменений, чтобы решение было осознанным.

Что читать дальше

  • CI/CD (06-cloud-devops/08-ci-cd) — практика, которую реализует этот набор, поэтому читайте первым.
  • GitHub Actions (06-cloud-devops/15-github-actions) — ближайшая хостинговая альтернатива и то, с чем стоит сравнивать.
  • Стадии конвейера (06-cloud-devops/08-ci-cd/01-pipeline-stages) — как здесь правильно делить стадии интеграции и релиза.