Что такое Buildkite?
Buildkite — это современная платформа непрерывной интеграции, которая позволяет запускать CI/CD пайплайны на твоей собственной инфраструктуре, сохраняя при этом удобство облачного управления. Это гибридное решение даёт полный контроль над агентами сборки.
Ключевые особенности Buildkite
- Гибридная архитектура — управление в облаке, выполнение на твоих серверах
- Elastic CI Stack — автоматическое масштабирование агентов
- Pipeline as Code — описание пайплайнов в YAML
- Параллельное выполнение — распределение задач между агентами
- Интеграции — GitHub, GitLab, Slack, и многие другие
Установка агента Buildkite
Установка на Linux:
1# Установка через пакетный менеджер
2sudo sh -c 'echo deb https://apt.buildkite.com/buildkite-agent stable main > /etc/apt/sources.list.d/buildkite-agent.list'
3sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 32A37959C2FA5C3C99EFBC32A79206696452D198
4sudo apt-get update && sudo apt-get install -y buildkite-agent
5
6# Настройка токена
7sudo sed -i "s/xxx/YOUR_AGENT_TOKEN_HERE/g" /etc/buildkite-agent/buildkite-agent.cfg
8
9# Запуск агента
10sudo systemctl enable buildkite-agent && sudo systemctl start buildkite-agent
Установка через Docker:
Создание пайплайна
Файл .buildkite/pipeline.yml
в корне репозитория:
1steps:
2 - label: "🔍 Lint"
3 command: "npm run lint"
4
5 - label: "🧪 Test"
6 command: "npm test"
7 parallelism: 3
8
9 - wait: ~
10
11 - label: "🏗 Build"
12 command: "npm run build"
13 artifact_paths: "dist/*"
14
15 - label: "🐳 Docker Build"
16 plugins:
17 - docker#v5.3.0:
18 image: "node:16"
19 command: ["npm", "run", "docker:build"]
20
21 - block: "🚀 Deploy to production?"
22 if: build.branch == "main"
23
24 - label: "🚀 Deploy"
25 command: "npm run deploy:prod"
26 if: build.branch == "main"
27 concurrency: 1
28 concurrency_group: "production-deploy"
Использование плагинов
Buildkite имеет богатую экосистему плагинов:
1steps:
2 - label: "🐳 Docker Compose"
3 plugins:
4 - docker-compose#v4.7.0:
5 run: app
6 command: ["pytest", "tests/"]
7
8 - label: "☁️ AWS S3 Upload"
9 plugins:
10 - aws-s3#v2.0.0:
11 upload: "build/artifacts/*"
12 bucket: "my-artifacts-bucket"
13
14 - label: "📊 Test Analytics"
15 plugins:
16 - test-collector#v1.5.0:
17 files: "test-results/*.xml"
18 format: "junit"
Elastic CI Stack на AWS
Автоматическое масштабирование агентов:
1# Развертывание через CloudFormation
2aws cloudformation create-stack \
3 --stack-name buildkite-elastic-ci \
4 --template-url https://s3.amazonaws.com/buildkite-aws-stack/latest/aws-stack.yml \
5 --parameters ParameterKey=BuildkiteAgentToken,ParameterValue=YOUR_TOKEN \
6 ParameterKey=KeyName,ParameterValue=my-key-pair \
7 --capabilities CAPABILITY_IAM
Мониторинг и метрики
Buildkite предоставляет API для мониторинга:
1import requests
2import json
3
4# Получение статистики билдов
5def get_build_stats(org, pipeline, token):
6 url = f"https://api.buildkite.com/v2/organizations/{org}/pipelines/{pipeline}/builds"
7 headers = {"Authorization": f"Bearer {token}"}
8
9 response = requests.get(url, headers=headers)
10 builds = response.json()
11
12 stats = {
13 "total": len(builds),
14 "passed": len([b for b in builds if b["state"] == "passed"]),
15 "failed": len([b for b in builds if b["state"] == "failed"]),
16 "running": len([b for b in builds if b["state"] == "running"])
17 }
18
19 return stats
20
21# Отправка уведомлений в Slack
22def notify_build_failure(webhook_url, build_info):
23 payload = {
24 "text": f"❌ Build failed: {build_info['pipeline']['name']}",
25 "attachments": [{
26 "color": "danger",
27 "fields": [
28 {"title": "Branch", "value": build_info["branch"], "short": True},
29 {"title": "Commit", "value": build_info["commit"][:8], "short": True}
30 ]
31 }]
32 }
33
34 requests.post(webhook_url, json=payload)
Безопасность и управление доступом
Интеграция с GitHub
1# .github/workflows/buildkite.yml
2name: Trigger Buildkite
3on: [push, pull_request]
4
5jobs:
6 trigger:
7 runs-on: ubuntu-latest
8 steps:
9 - name: Trigger Buildkite Build
10 uses: buildkite/trigger-pipeline-action@v1.5.0
11 with:
12 buildkite_api_access_token: ${{ secrets.BUILDKITE_API_ACCESS_TOKEN }}
13 pipeline: "my-org/my-pipeline"
14 commit: ${{ github.sha }}
15 branch: ${{ github.ref_name }}
16 message: ${{ github.event.head_commit.message }}
Сравнение с другими CI/CD системами
Особенность | Buildkite | Jenkins | GitHub Actions |
---|---|---|---|
Управление инфраструктурой | Гибридное | Самостоятельное | Облачное |
Масштабирование | Автоматическое | Ручное | Автоматическое |
Стоимость | По агентам | Бесплатно | По минутам |
Настройка | Простая | Сложная | Простая |
Случаи использования
- Крупные команды — нужен контроль над инфраструктурой
- Высокие требования к безопасности — данные остаются внутри
- Специфичное железо — GPU, большие объёмы RAM
- Hybrid cloud — часть в облаке, часть on-premise
Преимущества Buildkite
- Полный контроль над агентами сборки
- Автоматическое масштабирование инфраструктуры
- Простота настройки и использования
- Отличная интеграция с облачными провайдерами
- Активное сообщество и поддержка
Рекомендации по использованию
- Используй Elastic CI Stack для автоматического масштабирования
- Настрой мониторинг агентов и очередей
- Применяй теги агентов для маршрутизации задач
- Кешируй зависимости между сборками
FAQ
Подходит ли Buildkite для небольших проектов?
Buildkite больше подходит для средних и крупных команд, которым нужен контроль над инфраструктурой. Для небольших проектов GitHub Actions может быть проще.
Можно ли запускать агенты в Kubernetes?
Да, есть официальные Helm charts для развертывания агентов Buildkite в Kubernetes кластерах.