JavaRush /Курсы /Модуль 2: Fullstack /Интеграция с CI/CD

Интеграция с CI/CD

Модуль 2: Fullstack
9 уровень , 7 лекция
Открыта

8.1 Знакомство с CI/CD

Continuous Integration (CI/CD) является суперважным аспектом современного процесса разработки программного обеспечения. CI/CD позволяет автоматизировать тестирование и развертывание приложений, что способствует более быстрым и качественным релизам.

В этой лекции мы рассмотрим, как настроить автоматическое тестирование и деплоймент TypeScript проектов с использованием популярных CI/CD сервисов, таких как GitHub Actions и Jenkins.

Основные принципы CI/CD

  1. Непрерывная интеграция (CI): автоматический запуск тестов при каждом коммите в репозиторий, что позволяет сразу выявлять ошибки и предотвращать их попадание в основную ветку.
  2. Непрерывное внедрение (CD): автоматический деплоймент приложения на test или в production среду после успешного прохождения всех тестов.

Преимущества использования CI/CD

  1. Повышение качества кода: автоматическое тестирование позволяет выявлять ошибки на ранних этапах разработки.
  2. Сокращение времени на деплоймент: автоматизация процесса деплоймента позволяет быстро и без ошибок релизить новые версии приложения.
  3. Улучшение совместной работы: CI/CD способствует лучшей координации между разработчиками, снижая риск конфликтов и ошибок при объединении кода.

8.2 Интеграция с GitHub Actions

GitHub Actions — это встроенный инструмент для автоматизации рабочих процессов в GitHub. Он позволяет настраивать CI/CD процессы с помощью YAML файлов.

1. Настройка проекта

Для начала убедитесь, что ваш проект имеет следующие файлы и структуры:

Terminal
    
      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:

Yaml
    
      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 для выполнения следующих шагов:

  1. Клонирование репозитория.
  2. Установка Node.js.
  3. Установка зависимостей.
  4. Компиляция TypeScript кода.
  5. Запуск тестов.
  6. Добавление скриптов в package.json

Добавьте следующие скрипты в package.json для компиляции и тестирования:

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:

  1. Откройте Jenkins в браузере.
  2. Нажмите "Создать новое задание" (New Item).
  3. Введите имя задания и выберите "Проект Freestyle" (Freestyle Project).
  4. Нажмите "ОК".

3. Настройте задание Jenkins

Настройте задание для выполнения следующих шагов:

1. Получение кода из репозитория

Перейдите в раздел "Управление исходным кодом" (Source Code Management) и выберите "Git". Укажите URL репозитория и ветку, которую нужно клонировать.

2. Настройка триггеров сборки

В разделе "Триггеры сборки" (Build Triggers) выберите "GitHub hook trigger for GITScm polling". Это позволит Jenkins автоматически запускать сборку при каждом коммите в репозиторий.

3. Настройка шагов сборки

В разделе "Шаги сборки" (Build Steps) добавьте шаги для установки зависимостей, компиляции кода и запуска тестов.

Пример шагов сборки:

Шаг 1: Установка зависимостей

Добавьте шаг "Выполнить команду оболочки" (Execute Shell) и введите команду:

Terminal
    
      npm install
    
  

Шаг 2: Компиляция TypeScript кода

Добавьте еще один шаг "Выполнить команду оболочки" и введите команду:

Terminal
    
      npm run build
    
  

Шаг 3: Запуск тестов

Добавьте еще один шаг "Выполнить команду оболочки" и введите команду:

Terminal
    
      npm test
    
  

4. Запуск задания Jenkins

Сохраните задание и нажмите "Собрать сейчас" (Build Now) для запуска процесса. Jenkins клонирует репозиторий, установит зависимости, скомпилирует код и запустит тесты.

8.4 Автоматический деплоймент

Автоматический деплоймент позволяет автоматически обновлять приложение в тестовой или продакшн среде после успешного прохождения всех тестов.

1. Настройка деплоймента с GitHub Actions

Добавьте шаги деплоймента в файл .github/workflows/ci.yml. Например, для деплоймента на Heroku:

Yaml
    
- 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: Деплоймент на сервер

Добавьте шаг "Выполнить команду оболочки" и введите команду:

Terminal
    
      scp -r dist/ user@your-server:/path/to/deploy
    
  
3
Задача
Модуль 2: Fullstack, 9 уровень, 7 лекция
Недоступна
Настройка CI с GitHub Actions **
Настройка CI с GitHub Actions **
3
Задача
Модуль 2: Fullstack, 9 уровень, 7 лекция
Недоступна
Тестирование с GitHub Actions **
Тестирование с GitHub Actions **
3
Задача
Модуль 2: Fullstack, 9 уровень, 7 лекция
Недоступна
Автоматический деплой с GitHub Actions **
Автоматический деплой с GitHub Actions **
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ