У GitHub Actions існують різні способи зберігання та передачі даних між jobs та workflow, такі як кешування, артефакти та вихідні дані (outputs). Це дозволяє оптимізувати виконання ваших workflow, зберігати важливі файли для подальшого використання та передавати дані між jobs.
Кешування дозволяє зберігати залежності або інші файли між різними запусками workflow, щоб зменшити час виконання. Це особливо корисно для пакетних менеджерів, таких як npm, Yarn, або Gradle, де збереження залежностей може значно прискорити повторні запуски.
Для кешування використовується дія actions/cache@v2
, яка зберігає файли на основі ключів (keys). Якщо ключ, який ви вказали, збігається з тим, що вже збережено, GitHub відновить кешовані файли. Якщо ні, створюється новий кеш.
Приклад використання:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Cache node modules
uses: actions/cache@v2
with:
path: node_modules
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
У цьому прикладі node_modules
буде кешовано на основі змісту файлу package-lock.json
.
Артефакти дозволяють зберігати вихідні файли після завершення jobs і надають їх для подальшого використання, наприклад, для завантаження користувачем або передачі між jobs.
Артефакти зберігаються за допомогою дії actions/upload-artifact@v2
, яка завантажує файли як артефакти, та дії actions/download-artifact@v2
, яка дозволяє їх завантажити в наступних jobs.
Приклад використання:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Build project
run: npm run build
- name: Upload build artifacts
uses: actions/upload-artifact@v2
with:
name: build-artifacts
path: ./build
У цьому прикладі створені файли з папки build
завантажуються як артефакт.
Outputs дозволяють передавати результати виконання одного завдання (job) до іншого. Це дозволяє ділитися ключовою інформацією між різними jobs у workflow.
Outputs задаються у job і можуть бути доступні у всіх наступних jobs через контекст needs
.
Приклад використання: