8.1 Знакомство с CI/CD
Continuous Integration (CI/CD) является суперважным аспектом современного процесса разработки программного обеспечения. CI/CD позволяет автоматизировать тестирование и развертывание приложений, что способствует более быстрым и качественным релизам.
В этой лекции мы рассмотрим, как настроить автоматическое тестирование и деплоймент TypeScript проектов с использованием популярных CI/CD сервисов, таких как GitHub Actions и Jenkins.
Основные принципы CI/CD
- Непрерывная интеграция (CI): автоматический запуск тестов при каждом коммите в репозиторий, что позволяет сразу выявлять ошибки и предотвращать их попадание в основную ветку.
- Непрерывное внедрение (CD): автоматический деплоймент приложения на test или в production среду после успешного прохождения всех тестов.
Преимущества использования CI/CD
- Повышение качества кода: автоматическое тестирование позволяет выявлять ошибки на ранних этапах разработки.
- Сокращение времени на деплоймент: автоматизация процесса деплоймента позволяет быстро и без ошибок релизить новые версии приложения.
- Улучшение совместной работы: CI/CD способствует лучшей координации между разработчиками, снижая риск конфликтов и ошибок при объединении кода.
8.2 Интеграция с GitHub Actions
GitHub Actions — это встроенный инструмент для автоматизации рабочих процессов в GitHub. Он позволяет настраивать CI/CD процессы с помощью YAML файлов.
1. Настройка проекта
Для начала убедитесь, что ваш проект имеет следующие файлы и структуры:
my-ts-app/
├── .github/
│ └── workflows/
│ └── ci.yml
├── src/
│ ├── app.ts
├── dist/
├── tsconfig.json
├── package.json
├── jest.config.js
2. Создание конфигурационного файла GitHub Actions
Создайте файл .github/workflows/ci.yml:
name: CI
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm install
- name: Compile TypeScript
run: npm run build
- name: Run tests
run: npm test
Этот файл конфигурирует GitHub Actions для выполнения следующих шагов:
- Клонирование репозитория.
- Установка Node.js.
- Установка зависимостей.
- Компиляция TypeScript кода.
- Запуск тестов.
- Добавление скриптов в package.json
Добавьте следующие скрипты в package.json для компиляции и тестирования:
"scripts": {
"build": "tsc",
"test": "jest"
}
3. Запуск рабочего процесса
Теперь, при каждом коммите или pull request в ветку main, GitHub Actions автоматически выполнит шаги, описанные в ci.yml, проверяя, что код компилируется и все тесты проходят успешно.
8.3 Интеграция с Jenkins
Jenkins — это популярный инструмент для автоматизации процессов CI/CD, который можно настроить для выполнения различных задач, включая тестирование и деплоймент.
1. Установка Jenkins
Следуйте инструкциям на официальном сайте Jenkins для установки Jenkins на ваш сервер или локальную машину.
2. Создание нового Jenkins задания
После установки Jenkins:
- Откройте Jenkins в браузере.
- Нажмите "Создать новое задание" (New Item).
- Введите имя задания и выберите "Проект Freestyle" (Freestyle Project).
- Нажмите "ОК".
3. Настройте задание Jenkins
Настройте задание для выполнения следующих шагов:
1. Получение кода из репозитория
Перейдите в раздел "Управление исходным кодом" (Source Code Management) и выберите "Git". Укажите URL репозитория и ветку, которую нужно клонировать.
2. Настройка триггеров сборки
В разделе "Триггеры сборки" (Build Triggers) выберите "GitHub hook trigger for GITScm polling". Это позволит Jenkins автоматически запускать сборку при каждом коммите в репозиторий.
3. Настройка шагов сборки
В разделе "Шаги сборки" (Build Steps) добавьте шаги для установки зависимостей, компиляции кода и запуска тестов.
Пример шагов сборки:
Шаг 1: Установка зависимостей
Добавьте шаг "Выполнить команду оболочки" (Execute Shell) и введите команду:
npm install
Шаг 2: Компиляция TypeScript кода
Добавьте еще один шаг "Выполнить команду оболочки" и введите команду:
npm run build
Шаг 3: Запуск тестов
Добавьте еще один шаг "Выполнить команду оболочки" и введите команду:
npm test
4. Запуск задания Jenkins
Сохраните задание и нажмите "Собрать сейчас" (Build Now) для запуска процесса. Jenkins клонирует репозиторий, установит зависимости, скомпилирует код и запустит тесты.
8.4 Автоматический деплоймент
Автоматический деплоймент позволяет автоматически обновлять приложение в тестовой или продакшн среде после успешного прохождения всех тестов.
1. Настройка деплоймента с GitHub Actions
Добавьте шаги деплоймента в файл .github/workflows/ci.yml. Например, для деплоймента на Heroku:
- name: Deploy to Heroku
env:
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
run: |
git remote add heroku https://git.heroku.com/<your-app-name>.git
git push heroku main
Убедитесь, что вы добавили HEROKU_API_KEY в Secrets вашего репозитория на GitHub.
2. Настройка деплоймента с Jenkins
Добавьте шаги деплоймента в настройках вашего задания Jenkins. Например, для деплоймента на сервер с использованием SCP:
Шаг 4: Деплоймент на сервер
Добавьте шаг "Выполнить команду оболочки" и введите команду:
scp -r dist/ user@your-server:/path/to/deploy
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ