DevOps & CI/CD

Bitbucket

Хостинг Git-репозиториев от Atlassian со встроенным CI (Pipelines) и глубокой интеграцией с Jira и Confluence.

Что такое Bitbucket

Bitbucket (битбакет) — платформа для хостинга Git-репозиториев от Atlassian: репозитории, pull request'ы, code review, встроенный CI/CD под названием Pipelines.

Главная причина, по которой выбирают именно его, — экосистема Atlassian. Если компания уже живёт в Jira и Confluence, Bitbucket встраивается бесшовно: ветка создаётся прямо из задачи Jira, статус сборки виден в тикете, а задача автоматически переходит в «Done» при слиянии pull request'а. Вне этой связки Bitbucket проигрывает GitHub и GitLab по экосистеме и сообществу.

Исторический факт, объясняющий часть путаницы: Bitbucket начинался как хостинг Mercurial и долго поддерживал обе VCS. Поддержку Mercurial убрали в 2020 году — сейчас это чистый Git.

Варианты поставки

Bitbucket Cloud Bitbucket Data Center
Где работает SaaS Atlassian Свои серверы
CI Pipelines (встроен) Bamboo или внешний
Лицензия Подписка на пользователей Платная, для крупных установок

Bitbucket Server (одиночная self-hosted-установка) выведен из поддержки — остались только облако и Data Center. Это заметный аргумент против self-hosted-сценария по сравнению с бесплатным GitLab Community Edition.

Bitbucket Pipelines

Встроенный CI. Конфиг — файл bitbucket-pipelines.yml в корне репозитория; каждый шаг выполняется в Docker-контейнере.

image: python:3.12

pipelines:
  default:                    # на любой push
    - step:
        name: Test
        caches: [pip]
        script:
          - pip install -r requirements.txt
          - pytest -q

  branches:
    main:
      - step:
          name: Build & push
          services: [docker]
          script:
            - docker build -t $IMAGE:$BITBUCKET_COMMIT .
            - echo $REG_PASS | docker login -u $REG_USER --password-stdin $REG
            - docker push $IMAGE:$BITBUCKET_COMMIT
      - step:
          name: Deploy
          deployment: production
          trigger: manual
          script:
            - kubectl set image deploy/api api=$IMAGE:$BITBUCKET_COMMIT

Особенность модели: Pipelines тарифицируются в build-минутах, а не по числу runner'ов. Тяжёлые сборки быстро упираются в квоту — тогда подключают self-hosted runner на своём VPS, и его минуты не тратятся:

- step:
    runs-on: [self.hosted, linux]
    script: [make build]

Что стоит знать при выборе

  • Плюсы: связка с Jira из коробки, аккуратные pull request'ы, простой YAML для CI, приватные репозитории для малых команд дёшевы.
  • Минусы: слабая экосистема open source-проектов, нет бесплатного self-hosted-варианта, CI менее гибкий, чем GitLab CI или GitHub Actions, лимиты build-минут.

Работа с репозиторием

Со стороны разработчика ничего специфичного нет — это обычный Git-репозиторий:

git clone git@bitbucket.org:team/project.git
git switch -c feature/PROJ-42-add-auth   # ключ задачи Jira в имени ветки
git push -u origin feature/PROJ-42-add-auth

Имя ветки с ключом задачи (PROJ-42) — не формальность: именно по нему Bitbucket связывает коммиты, pull request и тикет Jira.

Связанные термины

  • Git — система контроля версий, которую хостит Bitbucket
  • GitHub — крупнейший конкурент
  • GitLab — конкурент с бесплатным self-hosted
  • CI/CD — практика, которую реализуют Pipelines
  • Code review — процесс вокруг pull request'ов
  • Git-репозиторий — что вы там храните

Готовы запустить GPU-задачу?

Запустить GPU-сервер