Как мне кэшировать шаги в действиях GitHub?

Скажем, у меня есть рабочий процесс действий GitHub с 2 шагами.

  1. Скачайте и скомпилируйте зависимости моего приложения.
  2. Скомпилируйте и протестируйте мое приложение

Мои зависимости редко меняются, и скомпилированные зависимости можно безопасно кэшировать до следующего изменения файла блокировки, в котором указываются их версии.

Можно ли сохранить результат первого шага, чтобы в будущем рабочий процесс мог пропустить этот шаг?

Ответ 1

Нативное кэширование в настоящее время невозможно, ожидается к середине ноября.

Вы можете использовать артефакты (1, 2) для перемещения каталогов между заданиями (в пределах 1 рабочего процесса), как это предлагается на доске сообщества GH. Однако это не работает в рабочих процессах.

Ответ 2

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

Первый шаг:

Скачайте и скомпилируйте зависимости моего приложения.

Действия GitHub сами по себе не сделают этого за вас. Единственный совет, который я могу вам дать, - это следовать рекомендациям Docker, чтобы гарантировать, что если в действиях действительно используется кэширование Docker, ваше изображение можно будет использовать повторно, а не восстанавливать. Смотрите: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#leverage-build-cache

При создании изображения Docker выполняет инструкции в вашем Dockerfile, выполняя каждое из них в указанном порядке. При рассмотрении каждой инструкции Docker ищет существующее изображение в своем кэше, которое он может использовать повторно, вместо создания нового (дублирующего) изображения.

Это также подразумевает, что базовая система GitHub Actions может/будет использовать кэширование Docker.

Однако при таких вещах, как компиляция, Docker не сможет использовать механизм кэширования, поэтому я советую вам очень хорошо подумать, если это то, что вам крайне необходимо. Альтернативой является загрузка скомпилированных/обработанных файлов из хранилища артефактов (Nexus, NPM, MavenCentral), чтобы пропустить этот шаг. Вы должны взвесить преимущества и сложность, которую вы добавляете в свою сборку.

Ответ 3

В текущей версии GitHub Actions (23 августа 2019 г.) файл кэша невозможен. На круге это возможно.

Следующие мои тесты:

Напишите файл на работу, попробуйте прочитать на следующем

Использован тестовый файл.

1) Запись на GITHUB_WORKSPACE
Мой путь: /home/runner/работа /github-actions-test/github-actions-test)
Результаты: записываемые и читаемые на первой работе, но пустые на второй Действующая ссылка

2) Запись в /github/home
Мой путь: /github/home
Результаты: cannot access '/github/home/ Действующая ссылка

3) Запись на /home
Мой путь: /home
Результаты: touch: cannot touch '/home/myFile.txt': Permission denied
Действие ссылка

Заключение

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