Зарегистрируйтесь, чтобы продолжить обучение

Задания Непрерывная интеграция (CI)

Задания в воркфлоу обозначают какую-то часть процесса интеграции — например, сборку, тестирование, деплой и тому подобное. По умолчанию задания запускаются параллельно, но если нужно, то их можно упорядочивать:

# сборка фронтенда и бекенда происходит одновременно
# а тесты бекенда запускаются только после сборки бекенда
jobs:
  build-frontend:
  build-backend:
  test:
    needs: build-backend

Задание test запустится только в том случае, если build-backend завершился без ошибок. Иногда задание нужно выполнять в любом случае, независимо от результата выполнения предыдущих. Типичный пример – нотификация. Для этого добавляется специальная конструкция через ключ if:

jobs:
  build-frontend:
  build-backend:
  test:
    # конструкция внутри ${{}} называется выражением
    if: ${{ always() }}
    needs: build-backend

Для обеспечения параллельности Github запускает задания в независимых директориях. Файлы, которые создает конкретное задание, не видно из других заданий. Если во время сборки build-backend у нас на диске оказались какие-то файлы, то задание test их не увидит. Для этого нужно дополнительно включать шаги по переносу данных из одного задания в другое. Поэтому для проектов с простой структурой достаточно создать одно задание, которое делает сразу все:

# Пример для проекта на Node.js
jobs:
  build: # имя взято для примера
    runs-on: ubuntu-latest

    steps:
      # Клонируем репозиторий
      - uses: actions/checkout@v4
      # Устанавливаем Node.js
      - uses: actions/setup-node@v4
      # Ставим зависимости
      - run: npm install
      # Запускаем линтер
      - run: npm run lint
      # Запускаем тесты
      # у шагов может быть имя, иногда это помогает отладке
      # имя выводится на Github при просмотре сборки
      - name: run tests
        run: npm test # name и run относятся к одной задаче, поэтому дефис ставится только перед name

Каждый шаг задания запускается в одной и той же директории. Туда же клонируется репозиторий экшеном checkout.

Операционная система

Github Actions позволяет выбрать одну из трех операционных систем: Ubuntu, Windows и MacOS. Все возможные варианты перечислены на специальной странице. В большинстве случаев для запуска используется ubuntu-latest. А что если мы хотим тестировать код на разных операционных системах? Самый дубовый вариант – создать идентичные задания под каждую операционную систему, но можно лучше.

В Github Actions встроена возможность описать одно задание так, чтобы оно запускалось для разных версий операционных систем, языков и так далее:

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest]
    steps:
      # тут шаги

Переменные окружения

С помощью ключа env можно добавить переменные окружения, доступные для всех шагов текущего задания:

jobs:
  run:
    env:
      RAILS_ENV: staging
      DEBUG: 1

Довольно много полезных переменных окружения добавлено сразу. Вот как их можно использовать прямо в шагах:

steps:
  - run: echo "Имя текущего воркфлоу – $GITHUB_WORKFLOW"

Точно так же переменные можно определять или переопределять в конкретных шагах:

steps:
  - run: echo "$key"
    env:
      # Если такой ключ определен на уровне задания,
      # то он будет переопределен текущим значением
      key: value

Самостоятельная работа

В этой самостоятельной мы сделаем воркфлоу для рабочего приложения.

  1. Форкните репозиторий hexlet-ci-app

  2. Изучите ридми репозитория

  3. Создайте воркфлоу. В нем должны быть:

    • make setup — сетап проекта

    • make test — запуск тестов

    • make lint — запуск линтера

  4. Запушьте все изменения на гитхаб и проверьте, что воркфлоу выполнился успешно. Не делайте пулл реквест в исходный репозиторий

  5. Добавьте в README.md бейдж со ссылкой на Github Actions


Дополнительные материалы

  1. Запуск сервисов

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка фронтенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 26 декабря
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 26 декабря
профессия
от 25 000 ₸ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 26 декабря
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 26 декабря
профессия
от 39 525 ₸ в месяц
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
16 месяцев
с нуля
Старт 26 декабря
профессия
от 25 000 ₸ в месяц
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 26 декабря
профессия
новый
Автоматизированное тестирование веб-приложений на JavaScript
8 месяцев
c опытом
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»