Как мне кэшировать шаги в действиях GitHub?
Скажем, у меня есть рабочий процесс действий GitHub с 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
Действие ссылка
Заключение
Вы не можете сохранять файлы между заданиями в любой папке.