CI/CDПрактические руководстваРабота с артефактами

Работа с артефактами

Добавим в workflow работу с артефактами.

Основные возможности:

  1. Сохранение файлов и директорий как артефактов после выполнения шагов CI/CD.
  2. Передача артефактов между задачами в рамках одного workflow.
  3. Скачивание артефактов через интерфейс GitVerse после завершения workflow.
  1. Файлы, сохраненные как артефакты (через actions/upload-artifact), хранятся на сервере и доступны для скачивания 30 дней.
  2. Этот срок можно настроить вручную с помощью параметра retention-days. Например:
with:
retention-days: 7
  1. Максимальный общий объем артефактов на аккаунт — 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 в своих шагах.
  1. Для передачи артефакта между задачами обязательно используйте параметр needs — это гарантирует правильный порядок выполнения задач.
  2. Путь к скачанному артефакту по умолчанию совпадает с именем файла или директории, указанным при загрузке.

Пример расширенного использования

Действие 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

Результат: В этом примере:

  1. Подключаемый файл создает файл hello.txt с текстом Hello world и загружает его как артефакт.
  2. Основной workflow подключает composite action (yaml-файл выше), затем скачивает артефакт (download-artifact) и выводит содержимое файла hello.txt.