Примеры работы с actions/upload-artifact и actions/download-artifact

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

  1. Сохранение файлов и директорий как артефактов после выполнения шага.
  2. Передача артефактов между различными задачами в рамках одного рабочего процесса.
  3. Возможность скачивания артефактов из интерфейса CI/CD после завершения рабочего процесса.
  1. Файлы в составе артефактов CI/CD, созданные с помощью actions/upload-artifact, хранятся на сервере и доступны для скачивания не более 30 суток.
  2. Срок хранения можно настроить вручную, используйте параметр retention-days
with:
  retention-days: 7
  1. Максимальный объем хранимых сборочных артефактов — 500 Мб (см. Лимиты в настройках учетной записи).

Создание и выгрузка артефакта в задаче (upload-artifact)

name: Пример использования upload-artifact для выгрузки артефакта
on:
  workflow_dispatch: # Ручной запуск
  push:              # Запуск при push
jobs:
  build:
    runs-on: ubuntu-cloud-runner
    steps:
      - run: echo "some data" > result.txt
      - uses: actions/upload-artifact@v3
        with:
          name: my-artifact
          path: result.txt

Результат:

В этом примере после выполнения шага:

  • создается файл result.txt с помощью команды echo;
  • этот файл сохраняется как артефакт с именем my-artifact с помощью действия upload-artifact.

Передача артефакта между задачами (download-artifact и needs)

Для передачи файлов между задачами в одном рабочем процессе используйте связку actions/upload-artifact (для сохранения) и actions/download-artifact (для получения артефакта в другой задаче).

Пример:

name: Пример использования upload-artifact и download-artifact
on:                  
  workflow_dispatch: # Ручной запуск
  push:              # Запуск при push
jobs:
  build:
    runs-on: ubuntu-cloud-runner
    steps:
      - run: echo "some data" > result.txt
      - uses: actions/upload-artifact@v3
        with:
          name: my-artifact
          path: result.txt
 
  test:
    runs-on: ubuntu-cloud-runner
    needs: build
    steps:
      - uses: actions/download-artifact@v3
        with:
          name: my-artifact
      - run: cat result.txt

Результат:

В этом примере:

  • Задача build создает файл result.txt и сохраняет его как артефакт с помощью upload-artifact.
  • Задача test (запускается после build благодаря needs: build) скачивает артефакт с помощью download-artifact и использует его в своих шагах.
  1. Для передачи артефакта между задачами обязательно используйте параметр needs, чтобы обеспечить правильный порядок выполнения задач.
  2. Путь к скачанному артефакту по умолчанию совпадает с именем файла или директории, указанным при загрузке.

Пример c composite, upload-artifact и download-artifact

upload-artifact может использоваться не только в обычных рабочих процессах, но и в составных рабочих процессах (composite actions). Это позволяет переиспользовать логику загрузки артефактов в разных проектах.

Подключаемый .yaml-файл

name: Базовый пример composite action с upload-artifact
runs:
  using: "composite"
  steps:
    - name: Hello world
      run: echo "Hello world" > hello.txt
    - uses: actions/upload-artifact@v3
      with:
        name: hello-artifact
        path: hello.txt

Подключаемый yaml-файл должен:

  1. Находиться в корне репозитория.
  2. Называться actions.yaml.

Целевой yaml-файл

name: Использование composite action для артефакта и чтение результата
on:
  workflow_dispatch: # Ручной запуск
  push:              # Запуск при push
jobs:
  say-hello:
    runs-on: ubuntu-cloud-runner
    steps:
      - uses: cicd_tutorials/custom_uses_example@v0.0.1  # <username>/<repo-with-composite-action>@<tag>
      - uses: actions/download-artifact@v3
        with:
          name: hello-artifact
      - name: Показать содержимое hello.txt
        run: cat hello.txt

Результат:

В этом примере:

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