Налаштування CI/CD для вашого сайту з Bitbucket Pipelines
Bitbucket Pipelines вбудована в Bitbucket Cloud — окремий CI-сервер не потрібен. Конфігурація описується в bitbucket-pipelines.yml у корені сховища. Кожен крок виконується в Docker-контейнері; безплатний план надає 50 хвилин/місяць, платні плани усувають обмеження.
Базова конфігурація
image: node:20-alpine
pipelines:
branches:
main:
- step:
name: Test
caches:
- node
script:
- npm ci
- npm test
- step:
name: Build
caches:
- node
script:
- npm ci
- npm run build
artifacts:
- dist/**
- step:
name: Deploy
deployment: production
script:
- apt-get update && apt-get install -y openssh-client rsync
- mkdir -p ~/.ssh
- echo "$SSH_PRIVATE_KEY" | base64 -d > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
- rsync -avz --delete dist/ deploy@$DEPLOY_HOST:/var/www/mysite/
pull-requests:
'**':
- step:
name: Test PR
script:
- npm ci
- npm test
- npm run lint
Артефакти між кроками
- step:
name: Build
script:
- npm run build
artifacts:
- dist/** # шаблон glob
- .env.production # конкретний файл
- step:
name: Deploy
script:
- ls dist/ # файли з попереднього кроку доступні
Артефакти автоматично передаються між кроками в одному конвеєрі. Тривалість зберігання становить 14 днів.
Змінні середовища
Настроюються в Repository Settings → Pipelines → Repository variables. Прапор Secured приховує значення в журналах.
Для кількох сховищ — використовуйте Workspace variables (налаштовані на рівні робочої области).
script:
- echo "$DATABASE_URL" # з Repository variables
- echo "$WORKSPACE_TOKEN" # з Workspace variables
Паралельні кроки
- parallel:
- step:
name: Unit Tests
script:
- npm test
- step:
name: E2E Tests
image: cypress/base:20
script:
- npm ci
- npm run test:e2e
- step:
name: Lint
script:
- npm run lint
Паралельні кроки виконуються одночасно; наступний крок чекає завершення всіх.
Середовища розгортання
Bitbucket підтримує названі середовища з ручним затвердженням:
- step:
name: Deploy to Staging
deployment: staging
script:
- ./deploy.sh staging
- step:
name: Deploy to Production
deployment: production
trigger: manual # кнопка в UI
script:
- ./deploy.sh production
У розділі Deployments (ліва панель Bitbucket) ви можете побачити історію розгортань за середовищами, хто розгортав і коли.
Користувацькі конвеєри (ручний запуск)
pipelines:
custom:
rollback:
- variables:
- name: RELEASE_TAG
default: 'v1.0.0'
- step:
name: Rollback to tag
script:
- git fetch --tags
- git checkout $RELEASE_TAG
- npm ci && npm run build
- ./deploy.sh production
Запустіть: Pipeline → Run pipeline → виберіть rollback → введіть змінну. Корисно для екстрених відкатів.
Docker-складання
image: atlassian/default-image:4
pipelines:
branches:
main:
- step:
name: Build and push Docker image
services:
- docker
script:
- docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
- docker build -t myrepo/mysite:$BITBUCKET_COMMIT .
- docker push myrepo/mysite:$BITBUCKET_COMMIT
- docker tag myrepo/mysite:$BITBUCKET_COMMIT myrepo/mysite:latest
- docker push myrepo/mysite:latest
Сервіс docker підключає Docker daemon до кроку.
PHP/Composer проект
image: php:8.3-cli
definitions:
caches:
composer: vendor
pipelines:
branches:
main:
- step:
caches:
- composer
script:
- apt-get update && apt-get install -y unzip libpq-dev
- docker-php-ext-install pdo_pgsql
- curl -sS https://getcomposer.org/installer | php
- php composer.phar install --no-dev --optimize-autoloader
- php artisan config:cache
- php artisan migrate --force
Сповіщення
Bitbucket надсилає електронну пошту при помилці. Для Slack/Telegram — використовуйте Webhook або Pipe:
- step:
script:
- npm run build
after-script:
- |
if [ $BITBUCKET_EXIT_CODE -ne 0 ]; then
curl -s -X POST $SLACK_WEBHOOK \
-H 'Content-type: application/json' \
-d '{"text":"Build failed: '"$BITBUCKET_REPO_FULL_NAME"'"}'
fi
Терміни налаштування
Перший робочий конвеєр — 1 день: bitbucket-pipelines.yml, змінні, SSH-ключі. Паралельні кроки, користувацькі конвеєри, Docker — ще 1–2 дні.







