CI/CD для разработчиков: GitHub Actions за 5 минут от Богдана Новотарского

Обложка поста: CI/CD для разработчиков: GitHub Actions за 5 минут от Богдана Новотарского

CI/CD для разработчиков: GitHub Actions за 5 минут от Богдана Новотарского

В современном мире разработки программного обеспечения автоматизация играет ключевую роль. CI/CD (Continuous Integration/Continuous Delivery или Continuous Deployment) – это практика, позволяющая автоматизировать процессы сборки, тестирования и развертывания вашего приложения. Это не только экономит время, но и снижает вероятность ошибок, повышает качество кода и ускоряет выпуск новых версий.

GitHub Actions – это мощный инструмент от GitHub, который позволяет вам автоматизировать практически любой аспект вашего рабочего процесса разработки прямо в репозитории. И сегодня я, Богдан Новотарский, покажу вам, как настроить простой CI/CD пайплайн с помощью GitHub Actions всего за 5 минут.

Что такое CI/CD и зачем это нужно?

CI/CD – это аббревиатура, обозначающая Continuous Integration (непрерывная интеграция) и Continuous Delivery/Continuous Deployment (непрерывная доставка/непрерывное развертывание). Давайте разберемся, что это значит:

  • Continuous Integration (CI): Разработчики регулярно интегрируют свои изменения кода в общий репозиторий. Каждый раз, когда происходит интеграция, автоматически запускается сборка и тестирование приложения. Это позволяет быстро выявлять и исправлять ошибки интеграции.
  • Continuous Delivery (CD): Автоматизирует процесс доставки изменений кода в окружение, готовое к развертыванию. Это может быть тестовое окружение, staging или production. Процесс развертывания запускается вручную.
  • Continuous Deployment (CD): Автоматически развертывает изменения кода в production-окружение после успешного прохождения всех тестов. Этот процесс полностью автоматизирован.

Преимущества CI/CD:

  • Ускорение разработки: Автоматизация рутинных задач экономит время разработчиков.
  • Повышение качества кода: Автоматическое тестирование помогает выявлять и исправлять ошибки на ранних этапах.
  • Уменьшение рисков: Небольшие, частые изменения легче тестировать и развертывать, чем большие и редкие.
  • Быстрый выпуск новых версий: Автоматизация позволяет быстрее доставлять новые функции и исправления пользователям.

GitHub Actions: Ваш инструмент автоматизации

GitHub Actions – это платформа автоматизации рабочих процессов, интегрированная непосредственно в GitHub. Она позволяет создавать собственные workflows (рабочие процессы) для автоматизации различных задач, таких как:

  • Сборка и тестирование кода.
  • Развертывание приложений.
  • Автоматизация задач управления проектом (например, создание issue, добавление меток).
  • Интеграция со сторонними сервисами.

GitHub Actions использует YAML-файлы для определения рабочих процессов. Эти файлы хранятся в каталоге .github/workflows вашего репозитория.

Схема CI/CD пайплайна с GitHub Actions, визуализация Богдана Новотарского

Настройка CI/CD с GitHub Actions за 5 минут: Пошаговая инструкция от Богдана Новотарского

Предположим, у вас есть простой Node.js проект, и вы хотите настроить CI/CD для автоматического тестирования вашего кода при каждом push или pull request.

Шаг 1: Создайте YAML-файл workflow

Создайте файл .github/workflows/node.js.yml в вашем репозитории. Этот файл будет содержать определение вашего workflow.

Шаг 2: Определите workflow

Добавьте следующий код в файл node.js.yml:

name: Node.js CI/CD

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: ["14.x", "16.x", "18.x"]

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v2
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    - name: Install dependencies
      run: npm install
    - name: Run tests
      run: npm test
    - name: Deploy to Heroku
      if: github.ref == 'refs/heads/main' && job.status == 'success'
      uses: akhileshns/heroku-deploy@v3.12.12 # This is the action
      with:
        heroku_api_key: ${{secrets.HEROKU_API_KEY}}
        heroku_app_name: "your-heroku-app-name" #Must be unique in Heroku
        heroku_email: "your-email@example.com"

Разберем этот YAML-файл:

  • name: Имя вашего workflow.
  • on: Определяет, когда workflow должен запускаться. В данном случае, он запускается при push в ветку main и при создании pull_request в ветку main.
  • jobs: Определяет список задач, которые будут выполняться.
    • build: Имя задачи.
      • runs-on: Определяет, на каком окружении будет выполняться задача (в данном случае, Ubuntu).
      • strategy: Определяет стратегию выполнения задачи. В данном случае, мы используем матрицу для запуска задачи на разных версиях Node.js.
      • steps: Определяет список шагов, которые будут выполняться в задаче.
        • uses: Использует готовые actions от GitHub Marketplace. Например, actions/checkout@v2 клонирует ваш репозиторий, а actions/setup-node@v2 устанавливает Node.js.
        • name: Имя шага.
        • run: Запускает команду. В данном случае, мы устанавливаем зависимости (npm install) и запускаем тесты (npm test).
        • if: Условие для выполнения шага. В данном случае, деплой на Heroku будет выполнен только если текущая ветка main и предыдущие шаги завершились успешно.
        • heroku_api_key: Секрет, содержащий ваш Heroku API key. Как безопасно хранить секреты, я, Богдан Новотарский, расскажу чуть позже.
        • heroku_app_name: Имя вашего приложения на Heroku.
        • heroku_email: Ваш email в Heroku.

Пример YAML-файла workflow для Node.js проекта, созданный Богданом Новотарским

Шаг 3: Настройте переменные окружения (секреты)

Для безопасного хранения конфиденциальной информации, такой как API ключи, используйте GitHub Secrets.

  1. Перейдите в раздел Settings вашего репозитория.
  2. Выберите Secrets -> Actions.
  3. Нажмите New repository secret.
  4. Введите имя секрета (например, HEROKU_API_KEY) и его значение.
  5. Нажмите Add secret.

Шаг 4: Запустите workflow

Просто сделайте push изменений в ветку main или создайте pull request в эту ветку. GitHub Actions автоматически запустит ваш workflow.

Шаг 5: Проверьте результаты

Перейдите на вкладку Actions в вашем репозитории, чтобы увидеть результаты выполнения workflow. Вы сможете увидеть логи каждого шага и узнать, если что-то пошло не так.

Расширенные возможности GitHub Actions: Советы от Богдана Новотарского

GitHub Actions предлагает множество возможностей для автоматизации ваших рабочих процессов. Вот несколько примеров:

  • Использование Marketplace Actions: GitHub Marketplace содержит тысячи готовых actions для различных задач. Вы можете использовать их для упрощения своих workflows.
  • Создание собственных Actions: Если вам не хватает готовых actions, вы можете создать свои собственные.
  • Автоматизация задач управления проектом: Вы можете использовать GitHub Actions для автоматического создания issue при возникновении ошибок, добавления меток к pull requests и т.д.
  • Интеграция со сторонними сервисами: GitHub Actions позволяет интегрироваться с различными сторонними сервисами, такими как Slack, Jira и т.д.

Интеграция GitHub Actions с различными сервисами, иллюстрация Богдана Новотарского

Безопасность в GitHub Actions: Рекомендации Богдана Новотарского

Безопасность – это важный аспект при использовании GitHub Actions. Вот несколько рекомендаций:

  • Используйте GitHub Secrets для хранения конфиденциальной информации.
  • Проверяйте actions, которые вы используете из Marketplace. Убедитесь, что они надежны и не содержат вредоносного кода.
  • Ограничивайте права доступа для actions. Не предоставляйте им излишние права.
  • Регулярно обновляйте actions. Обновления часто содержат исправления безопасности.

Заключение от Богдана Новотарского

GitHub Actions – это мощный и удобный инструмент для автоматизации ваших рабочих процессов разработки. С его помощью вы можете значительно ускорить разработку, повысить качество кода и уменьшить риски. Надеюсь, это краткое руководство от Богдана Новотарского помогло вам понять основы CI/CD с GitHub Actions. Начните использовать его в своих проектах, и вы увидите, насколько это упростит вашу жизнь!

Логотип GitHub Actions на фоне кода, заключение Богдана Новотарского

Если у вас есть вопросы, не стесняйтесь задавать их в комментариях. Удачи вам в автоматизации ваших проектов!