С какими CI/CD инструментами вы работали?

Ответ

Я имею опыт работы со следующими CI/CD инструментами: GitHub Actions, GitLab CI/CD, Jenkins и Bitbucket Pipelines.

  • GitHub Actions: Интегрированное решение для GitHub-репозиториев, идеально подходит для автоматизации тестирования, сборки и деплоя. Его YAML-синтаксис интуитивно понятен, а обширный маркетплейс экшенов ускоряет разработку пайплайнов.

    Пример workflow для Python CI:

    name: Python CI
    on: [push, pull_request]
    jobs:
      test:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v3
          - name: Set up Python
            uses: actions/setup-python@v4
            with:
              python-version: '3.9'
          - name: Install dependencies
            run: pip install -r requirements.txt
          - name: Run tests
            run: pytest
  • GitLab CI/CD: Глубоко интегрирован в экосистему GitLab, использует файл .gitlab-ci.yml. Отличается мощными возможностями для управления репозиториями, контейнеризации и деплоя, особенно удобен для проектов, полностью размещенных на GitLab.

  • Jenkins: Высокогибкий и расширяемый open-source сервер автоматизации. Требует больше усилий на начальную настройку и поддержку, но предоставляет полный контроль над окружением и поддерживает огромное количество плагинов, что делает его подходящим для сложных корпоративных сред.

  • Bitbucket Pipelines: Встроенный CI/CD сервис для Bitbucket. Удобен для команд, использующих Bitbucket для управления кодом, предлагает простую настройку и интеграцию с другими продуктами Atlassian.

Основные задачи, которые я автоматизировал с помощью этих инструментов, включают: запуск юнит- и интеграционных тестов, статический анализ кода (линтеры), сборку Docker-образов, публикацию артефактов и автоматический деплой приложений на различные среды.

Ответ 18+ 🔞

Ну, смотри, я тут с этими вашими CI/CD-штуками на короткой ноге, как говорится. Всю эту механическую хуйню по автоматизации я через них пропускал, так что могу рассказать, что к чему.

Вот, например, GitHub Actions — это такая встроенная приблуда для тех, кто код на GitHub хранит. Удобная штука, ей-богу. Написал себе YAML-файлик, который даже читать можно, и понеслась: тесты гонять, приложение собирать, куда надо выкладывать. А ещё там целая толкучка готовых действий, как на базаре — бери и пользуйся, не надо велосипед изобретать.

Вот, смотри, как простой пайплайн для питона может выглядеть, я не шучу:

name: Python CI
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.9'
      - name: Install dependencies
        run: pip install -r requirements.txt
      - name: Run tests
        run: pytest

Дальше, GitLab CI/CD. Это, можно сказать, родной брат-близнец, только для другой песочницы. Если вся твоя команда сидит в GitLab, то это твой выбор. Тоже через .gitlab-ci.yml всё настраивается, и там вообще мощь нереальная, особенно если с контейнерами и деплоем замутить.

А вот Jenkins — это уже, простите, старый добрый монстр. Ёперный театр! Гибкий до безобразия, но чтобы его настроить, нужно терпения, как у святого. Зато если настроишь — он тебе вообще что угодно сделает, хоть Луну на сервер задеплой. Плагинов на него — овердохуища, но и головной боли прибавляет.

Ну и Bitbucket Pipelines — для тех, кто в домике Atlassian. Простота, интеграция со всеми ихними штуками, в общем, если вся экосистема там, то и пайплайны там логично делать.

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