Полный цикл в digital

Makefile в Docker

Makefile это файл, который хранится вместе с кодом в репозитории. Его обычно помещают в корень проекта. Он выступает и как документация, и как исполняемый код. Мейкфайл скрывает за собой детали реализации и раскладывает по полочкам команды, а утилита make запускает их из того мейкфайла, который находится в текущей директории.

Синтаксис Makefile

Команда make запускает цели из Makefile, которые состоят из команд:

Makefile# имя цели, поддерживается kebab-case и snake_case
цель1: 
  # для отступа используется табуляция, команды будут выполняться последовательно и только в случае успеха предыдущей
  команда1  
  команда2 

Недостаточно просто начать использовать мейкфайл в проекте. Чтобы получить эффект от его внедрения, понадобится поработать над разделением команд на цели, а целям дать семантически подходящие имена, вот пример правильного файла:

Makefile# создать .env-файл для секретов
env-prepare: 
  cp -n .env.example .env
# подготовить локальную БД
sqlite-prepare: 
  touch database/database.sqlite
# установить зависимости
install: 
  composer install
  npm install
# сгенерировать ключи
key: 
  php artisan key:generate
# загрузить данные в БД
db-prepare: 
  php artisan migrate --seed
# запустить приложение
start: 
  heroku local -f Procfile.dev

Зависимости Makefile

Когда команды разбиты на цели, можно отдельно установить зависимости командой make install. Остальные цели нужны только при первом разворачивании проекта и выполнять их нужно в определённой последовательности. Говоря языком мейкфайла, цель имеет пререквизиты:

Makefile# такой синтаксис указывает на зависимость задач — цель1 зависит от цель2
цель1: цель2
  # команда2 выполнится только в случае успеха команды из цель2
  команда2
цель2:
  команда1

Задачи будут выполняться только в указанной последовательности и только в случае успеха предыдущей задачи. Значит, можно добавить цель setup, чтобы объединить в себе все необходимые действия:

Makefile# можно ссылаться на цели, описанные ниже
setup: env-prepare sqlite-prepare install key db-prepare 
env-prepare:
  cp -n .env.example .env
sqlite-prepare:
  touch database/database.sqlite
install:
  composer install
  npm install
key:
  php artisan key:generate
db-prepare:
  php artisan migrate --seed
start:
  heroku local -f Procfile.dev

Запуск Makefile

Запустить make в текущей директории:

Bashmake

Запустить make в текущей директории и обратиться к конкретной цели:

Bashmake setup # выполнит последовательно: env-prepare sqlite-prepare install key db-prepare

Благодаря проделанной работе Makefile, команды проекта вместе с флагами сведены в Makefile. Он обеспечивает правильный порядок выполнения и не важно, какие при этом задействованы языки и технологии.

Специальные цели

В большинстве make-файлов можно найти цели, называемые специальными. Вот самые распространенные:

  1. all собрать весь проект целиком
  2. clean удалить все сгенерированные артефакты
  3. install установить сгенерированные файлы в систему
  4. release или dist для подготовки дистрибутивов (модули и тарболы)

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг