Что такое 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:

1# Запуск агента в контейнере
2docker run -d \
3  -e BUILDKITE_AGENT_TOKEN="YOUR_AGENT_TOKEN_HERE" \
4  -v /var/run/docker.sock:/var/run/docker.sock \
5  buildkite/agent:3

Создание пайплайна

Файл .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)

Безопасность и управление доступом

1# Настройка команд с ограниченными правами
2steps:
3  - label: "🔐 Secure Deploy"
4    command: "deploy.sh"
5    agents:
6      queue: "secure"
7      environment: "production"
8    env:
9      DEPLOY_KEY: "vault:secret/deploy-key"

Интеграция с 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 системами

ОсобенностьBuildkiteJenkinsGitHub Actions
Управление инфраструктуройГибридноеСамостоятельноеОблачное
МасштабированиеАвтоматическоеРучноеАвтоматическое
СтоимостьПо агентамБесплатноПо минутам
НастройкаПростаяСложнаяПростая

Случаи использования

  • Крупные команды — нужен контроль над инфраструктурой
  • Высокие требования к безопасности — данные остаются внутри
  • Специфичное железо — GPU, большие объёмы RAM
  • Hybrid cloud — часть в облаке, часть on-premise

Преимущества Buildkite

  • Полный контроль над агентами сборки
  • Автоматическое масштабирование инфраструктуры
  • Простота настройки и использования
  • Отличная интеграция с облачными провайдерами
  • Активное сообщество и поддержка

Рекомендации по использованию

  • Используй Elastic CI Stack для автоматического масштабирования
  • Настрой мониторинг агентов и очередей
  • Применяй теги агентов для маршрутизации задач
  • Кешируй зависимости между сборками

FAQ

Подходит ли Buildkite для небольших проектов?

Buildkite больше подходит для средних и крупных команд, которым нужен контроль над инфраструктурой. Для небольших проектов GitHub Actions может быть проще.

Можно ли запускать агенты в Kubernetes?

Да, есть официальные Helm charts для развертывания агентов Buildkite в Kubernetes кластерах.