Что такое CI/CD?

Ответ

CI/CD (Continuous Integration / Continuous Delivery/Deployment) — это набор практик и инструментов для автоматизации жизненного цикла ПО, ключевая часть DevOps.

  • Continuous Integration (CI): Автоматическая сборка, тестирование (юнит, интеграционные) и проверка качества кода при каждом коммите в репозиторий. Цель — быстро обнаружить проблемы. Инструменты: Jenkins, GitLab CI, GitHub Actions.
  • Continuous Delivery (CD): Автоматизация процесса релиза. После успешного CI артефакт автоматически подготавливается и может быть вручную развернут в production. Это гарантирует, что код всегда находится в готовом к деплою состоянии.
  • Continuous Deployment: Расширение Delivery, где каждое успешное изменение автоматически разворачивается в production без ручного вмешательства.

Практический пример пайплайна GitLab CI для Docker-приложения:

# .gitlab-ci.yml
stages:
  - test
  - build
  - deploy

test:
  stage: test
  image: golang:1.19
  script:
    - go test ./...

build:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

deploy_to_staging:
  stage: deploy
  image: bitnami/kubectl:latest
  script:
    - kubectl set image deployment/my-app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -n staging
  only:
    - main

Ключевые преимущества для DevOps: предсказуемость релизов, снижение ручного труда, быстрое исправление багов и откат изменений.

Ответ 18+ 🔞

А, вот эта тема про CI/CD! Ну, слушай, если по-простому, то это такая хитрая жопа, которая за тебя всю рутину делает. Представь: ты пишешь код, а потом начинается этот ёперный театр — собрать, проверить, задеплоить. Раньше это всё руками делали, доверия ебать ноль было, полный пиздец. А теперь — автомат.

Continuous Integration (CI) — это когда ты каждый раз, как закинул код в общую кучу, сразу запускается адская машина. Она твой код хватает, собирает, как конструктор, и начинает гонять кучу тестов. Юниты там, интеграционные проверки. Если где-то косяк — сразу тебе красным по ебалу: «Чувак, ты тут хуйню написал, почини!». Инструменты — Jenkins, GitLab CI, GitHub Actions. Без них сейчас — как без рук, волнение ебать каждое утро, не сломал ли чего.

Continuous Delivery (CD) — это следующий уровень. Допустим, CI всё проглотил и не подавился. Тогда этот этап берёт готовую сборку, аккуратно её упаковывает и кладёт тебе на блюдечко: «Вот, мужик, всё готово к бою, жми кнопку — и в продакшен». Код всегда в боевой готовности, терпения ноль ебать ждать.

Continuous Deployment — это вообще песня. Это когда ты такой написал строчку, закоммитил, и пошло-поехало. Всё само: собралось, проверилось, и — хуй с горы! — уже летит на рабочие сервера. Без твоего «окей». Страшно? Да похуй, зато быстро. Главное, чтобы тесты были железные, а то будет вам хиросима и нигерсраки.

Вот, смотри, как это выглядит на практике, простой пример для GitLab:

# .gitlab-ci.yml
stages:
  - test
  - build
  - deploy

test:
  stage: test
  image: golang:1.19
  script:
    - go test ./...

build:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

deploy_to_staging:
  stage: deploy
  image: bitnami/kubectl:latest
  script:
    - kubectl set image deployment/my-app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -n staging
  only:
    - main

Видишь? Всё по полочкам. Сначала тесты гоняет, потом в Docker запаковывает, и если всё чисто — выкатывает на тестовый стенд. Красота!

Итог для DevOps-инженера: жизнь меняется просто овердохуища. Релизы перестают быть лотереей, ручной работы — как грязи убавилось, а если вдруг накосячил — откатиться можно за секунды. В общем, вещь, бля, must have. Без этого сейчас — как на телеге против танков.

Видео-ответы