Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Задания (Jobs) Непрерывная интеграция (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@v2
      # Устанавливаем Node.js
      - uses: actions/setup-node@v1
      # Ставим зависимости
      - run: npm install
      # Запускаем линтер
      - run: npm run lint
      # Запускаем тесты
      # у шагов может быть имя, иногда это помогает отладке
      # имя выводится на Github при просмотре сборки
      - name: run tests
        run: npm test

Каждый шаг задания запускается в одной и той же директории. Туда же клонируется репозиторий экшеном 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. Создайте воркфлоу. В нём должны быть: сетап проекта, запуск тестов и линтера

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

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


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

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

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

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

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

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

Об обучении на Хекслете

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

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

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

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

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

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

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

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

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

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

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

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»