Привет!
Хотел поделиться с вами небольшой находкой, которую я совсем недавно обнаружил. Речь пойдёт про прекрассный CI/CD сервис — CircleCI.
Когда мы говорим о непрерывной интеграции и деплое, чаще всего на ум приходят ровно два решения — Бесплатный, неприятный, лагающший, херовый Дженкикс и прекрасный, cool и даже pretty — ТимСити. Но он, сука, стоит кучу денег, а у нас кризис, импортозамещение, и вообще, жаба душит, не хочется кому-то платить бабло.
В этот момент люди вспоминают, что на рынке существует ещё овер дохера решений по CI/CD. Самое популярное из них — это Travis CI. Именно на тревис в основном дрочат все открытые проекты на гитхабе. Так сложилось чисто исторически, что это решение было первым на рынке cool CI.
Однако время идёт, мир меняется. Теперь мы не одним Тревисом едины. Есть и такой прекрасный сервис, как CircleCI. Сёкл-ом можно пользоваться, как бесплатно (у вас будет лишь одна нода для запуска процесса сборки), так и платно — платя по 50$ за каждый следующий воркер, после первого.
Как работает в общем CircleCI? Ничего хитрого. Вся сборка происходит на Линуксах, в Докер-контейнере. Для сборки задаётся один основной контейнер, который свойственнен вашему языку, а также ряд вторичных контейнеров, которые выступают в качестве сервисов. Самый типичный сервис — это БД, которую вы можете использовать для интеграционных тестов при сборки проекта.
Pipeline сборки описывается в отвратительном (моё оценочное суждение, nothing personal) yml-файле. Всё, как обычно, сначала конфигурируем рабочее окружение. Затем описываем набор step, в каждом из которых выполняется какое-то атамарное действие: checkout файлов с гита, запуск грэдл таска, ожидание запуска БД и тд.
Я для примера набросал простой spring boot проект (spring boot, jooq, flyway, postgresql) — https://github.com/Hixon10/spring-boot-circle-ci. Для тестирования данного приложения на Сёкле потребовалось написать такой конфиг:
# Java Gradle CircleCI 2.0 configuration file # # Check https://circleci.com/docs/2.0/language-java/ for more details # version: 2 jobs: build: docker: # specify the version you desire here - image: circleci/openjdk:8-jdk - image: circleci/postgres:9.6.2-alpine environment: POSTGRES_USER: spring-boot-user POSTGRES_DB: blog POSTGRES_PASSWORD: spring-boot-user working_directory: ~/repo environment: # Customize the JVM maximum heap limit JVM_OPTS: -Xmx3200m TERM: dumb steps: - checkout # Download and cache dependencies - restore_cache: keys: - v1-dependencies-{{ checksum "build.gradle" }} # fallback to using the latest cache if no exact match is found - v1-dependencies- - run: gradle dependencies - save_cache: paths: - ~/.m2 key: v1-dependencies-{{ checksum "build.gradle" }} - run: name: Wait for DB command: dockerize -wait tcp://localhost:5432 -timeout 1m # run tests! - run: gradle test
Как вы видите, ничего хитроного. Весьма стандартный способ описания Пайплайна в CI.
Подытожив статью, хочу выделить приятные стороны CircleCI:
Категории: Программирование