Работа с артефактами
Добавим в workflow работу с артефактами.
Основные возможности:
- Сохранение файлов и директорий как артефактов после выполнения шагов CI/CD.
- Передача артефактов между задачами в рамках одного workflow.
- Скачивание артефактов через интерфейс GitVerse после завершения workflow.
- Файлы, сохраненные как артефакты (через
actions/upload-artifact), хранятся на сервере и доступны для скачивания 30 дней. - Этот срок можно настроить вручную с помощью параметра
retention-days. Например:
with:
retention-days: 7- Максимальный общий объем артефактов на аккаунт — 500 Мб (см. раздел «Лимиты» в настройках учетной записи).
Создание и выгрузка артефакта
name: Пример использования upload-artifact для выгрузки артефакта
on:
workflow_dispatch: # Ручной запуск
push: # Запуск при push
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: echo "some data" > result.txt
- uses: actions/upload-artifact@v4
with:
name: my-artifact
path: result.txtРезультат: После выполнения шага в примере выше:
- создается файл
result.txt(командойecho); - этот файл сохраняется как артефакт с именем
my-artifactс помощью действияupload-artifact.
Передача артефакта между заданиями
Чтобы передать файлы между задачами в одном workflow, используйте связку действий: actions/upload-artifact (сохранение) и actions/download-artifact (загрузка артефакта в другой задаче).
Пример:
name: Пример использования upload-artifact и download-artifact
on:
workflow_dispatch: # Ручной запуск
push: # Запуск при push
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: echo "some data" > result.txt
- uses: actions/upload-artifact@v4
with:
name: my-artifact
path: result.txt
test:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/download-artifact@v4
with:
name: my-artifact
- run: cat result.txtРезультат: В этом примере:
- Задача
buildсоздает файлresult.txtи сохраняет его как артефакт (upload-artifact). - Задача
test(начинается послеbuildблагодаряneeds: build) скачивает этот артефакт (download-artifact) и использует файлresult.txtв своих шагах.
- Для передачи артефакта между задачами обязательно используйте параметр
needs— это гарантирует правильный порядок выполнения задач. - Путь к скачанному артефакту по умолчанию совпадает с именем файла или директории, указанным при загрузке.
Пример расширенного использования
Действие upload-artifact можно вызывать не только напрямую в workflow, но и внутри составных workflow (composite actions). Это позволяет переиспользовать логику сохранения артефактов в разных проектах.
Подключаемый файл (композитный action):
name: Базовый пример composite action с upload-artifact
runs:
using: "composite"
steps:
- name: Hello world
run: echo "Hello world" > hello.txt
- uses: actions/upload-artifact@v4
with:
name: hello-artifact
path: hello.txtПодключаемый yaml-файл (composite action) должен:
- находиться в корне репозитория;
- называться actions.yaml.
Целевой workflow-файл:
name: Использование composite action для артефакта и чтение результата
on:
workflow_dispatch: # Ручной запуск
push: # Запуск при push
jobs:
say-hello:
runs-on: ubuntu-latest
steps:
- uses: cicd_tutorials/custom_uses_example@v0.0.1 # <username>/<repo-with-composite-action>@<tag>
- uses: actions/download-artifact@v4
with:
name: hello-artifact
- name: Показать содержимое hello.txt
run: cat hello.txtРезультат: В этом примере:
- Подключаемый файл создает файл hello.txt с текстом
Hello worldи загружает его как артефакт. - Основной workflow подключает composite action (yaml-файл выше), затем скачивает артефакт (
download-artifact) и выводит содержимое файлаhello.txt.