Конспект "Concource CI с кубиками на чистом YAML. Максим Залысин"

21.11.2018

Суть: Concource CI может интегрироваться с чем угодно с помощью ресурсов, декларативно описывается, легко расширяется.

Из чего состоит Concource

Concource написан на go. Состоит из сервера с вебом, апи, шедулером и регистратором воркеров. Через ssh-туннель создается соединение между воркерами (кроссплатформенные) и вебом. Веб хранит данные в постгресе, в котором хранятся пайплайны, логи и т.п. Артефакты конкурс хранить не умеет.

Есть утилита fly, через которую можно взаимодействовать с вебом. Управлять командами, проектами, плайплайнами и т.п. Как правило, всем хватает веб-морды для взаимодействия. Для дебага можно выполнить таск локально или провалиться в уже существующий.

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

Какие есть сущности

Есть пайплайн, который состоит из ресурсов и джобов. Ресурсы — кубик, которым конкурс взаимодействует с чем-то. Например, ресурс слак позволяет работать со слаком. Джобы, в которых выполняются команды. Есть встроенный дашборд со статусом тасков.

Resource

Есть встроенные ресурсы, их около 20. Например, git, который постоянно проверяет наличие новых коммитов, скачивает код. Есть комьюнити-ресурсы. Например, который умеет создавать пулреквесты в битбакет. Объявляем в пайплайне какие внешние ресурсы нам нужны и используем.

Ресурсы могут забирать секреты из разных источников(вольт, кубер и т.п.) или отдельного yml-файла.

Каждый ресурс состоит из 3-х бинарных файлов(check, in, out). Через check ресурс проверят, что ему что делать. In используется внутри джоба, там описано что нужно делать. Out отправляет результат.

Job

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

Преимущества

  • YAML
  • CLI
  • Интеграция с чем угодно через Resource
  • Просто написать свой ресурс. Можно написать все три части ресурса на разных языках
  • Job выполняет много танков в связке с разными ресурсами
  • Переиспользуемые таски

Недостатки

  • Воркеры требовательны к ресурсам, иногда они залипают
  • Сложно повторно запустить job на устаревшем ресурсе. Т.е. Если ресурс обновился, конкурс его сразу заберет и придется покостылить, чтобы запустить старый пайплайн на старой версии ресурса
  • Нет разделения доступа по ролям в одной команде

Автор сейчас решает требовательность к ресурсам, переписывает встроенные ресурсы на го.

Ссылки

Я консультирую о том о чем пишу, связаться со мной можно через telegram @aladmit или по почте [email protected]

Подпишись, чтобы не пропустить новые статьи Telegram