📄 Travis CI
1. Общее описание
Travis CI — это сервис непрерывной интеграции (Continuous Integration), который автоматически запускает тесты и сборку при пуше кода в репозиторий. Поддерживает GitHub как основную платформу.
Основные особенности:
- Интеграция с GitHub.
- Автоматический запуск билдов на основе
.travis.yml
. - Поддержка множества языков программирования.
- Бесплатный тарифный план для open-source проектов.
- Возможность использования собственных (custom) виртуальных машин или Docker-образов.
2. Архитектура Travis CI
Компонент | Описание |
---|---|
GitHub Repository | Источник кода, из которого запускается билд. |
.travis.yml | YAML-файл в корне проекта, определяющий этапы билда. |
Build Environment | Виртуальная машина или контейнер, где выполняются команды. |
Job | Отдельное выполнение одного этапа билда. |
Build | Группа связанных job'ов, запущенных вместе. |
Matrix Build | Запуск нескольких конфигураций билдов одновременно (например, разные версии Python). |
3. Основные понятия
Термин | Определение |
---|---|
Build | Процесс выполнения всех указанных шагов в .travis.yml . |
Job | Отдельная часть билда, например, одна комбинация среды в матрице. |
Stage | Логическая группа шагов (например: install , test , deploy ). |
Environment Variables | Переменные окружения, доступные во время билда. |
Build Matrix | Множество билдов, созданных на основе разных параметров. |
Cache | Кэширование зависимостей между билдами для ускорения. |
Services | Вспомогательные сервисы, которые можно запустить (PostgreSQL, MySQL, Redis и др.). |
4. Настройка Travis CI
4.1 Активация проекта
- Зайти на https://travis-ci.com (или https://travis-ci.org для open-source).
- Авторизоваться через GitHub.
- Включить нужный репозиторий в списке проектов.
4.2 Файл .travis.yml
Это главный файл конфигурации Travis CI. Пример:
language: python
python:
- "3.8"
- "3.9"
install:
- pip install -r requirements.txt
script:
- python -m pytest
5. Примеры конфигураций
Node.js проект
language: node_js
node_js:
- "14"
- "16"
script:
- npm test
Django проект
language: python
python:
- "3.9"
env:
- DATABASE_URL=postgres://user:password@localhost/mydb
install:
- pip install -r requirements.txt
- pip install pytest
script:
- python manage.py test
Матричная сборка
language: ruby
rvm:
- 2.7
- 3.0
env:
matrix:
- DB=mysql
- DB=postgres
script:
- bundle exec rspec
6. Уведомления
Travis позволяет отправлять уведомления о статусе билда:
notifications:
email:
- your@email.com
slack:
rooms:
secure: "your_slack_token_here"
Также поддерживаются: - IRC - Campfire - Webhooks - Telegram (через сторонние интеграции)
7. Работа с приватными репозиториями
Для приватных репозиториев:
- Нужно использовать travis-ci.com
(не .org
).
- Для шифрования данных используется утилита travis
.
Пример установки CLI:
gem install travis
Шифрование переменных:
travis encrypt MY_SECRET=password --add env.global
8. Ограничения
Платформа | Бесплатный тариф (open source) | Платный тариф |
---|---|---|
travis-ci.org (устарел) | ✅ | ❌ |
travis-ci.com | ❌ (требуется миграция) | ✅ |
macOS / iOS билды | ✅ | ✅ |
Windows билды | ❌ | ✅ (ограничено) |
Время билда | до 50 минут | зависит от тарифа |
Параллельные билды | ограничено | да |
9. Best Practices
- Храните
.travis.yml
в репозитории. - Используйте кэширование (
cache:
) для ускорения установки зависимостей. - Разделяйте задачи на stages.
- Шифруйте чувствительные данные через
travis encrypt
. - Используйте
before_install
,install
,before_script
,script
логично. - Следите за временем выполнения билдов.