# Хранение и предоставление общего доступа к данным с артефактами рабочего процесса

Используйте артефакты для совместного использования данных между заданиями в рабочем процессе и хранения данных после завершения рабочего процесса.

## Необходимые компоненты

Прежде чем завершить работу с этим руководством, необходимо понять артефакты рабочего процесса. См [. раздел AUTOTITLE](/ru/actions/concepts/workflows-and-actions/workflow-artifacts).

## Отправка артефактов сборки и тестирования

Выходные данные сборки и тестирования кода часто содержат файлы, которые можно использовать для отладки сбоев тестов и рабочего кода, который можно развернуть. Вы можете настроить рабочий процесс для сборки и тестирования отправляемого в репозиторий кода, а также получения отчетов об успешном или неудачном выполнении. Вы можете отправить выходные данные сборки и тестирования для развертывания, отладки неудачно завершенных тестов или сбоев, а также для просмотра охвата набора тестов.

Для отправки артефактов можно использовать действие `upload-artifact`. При отправке артефакта можно указать любое количество файлов или каталогов. Также можно исключить конкретные файлы или каталоги и использовать шаблоны с подстановочными знаками. Рекомендуется указать имя артефакта. Если это не сделать, по умолчанию будет использоваться имя `artifact`. Для получения дополнительной информации о синтаксисе см.
действие [действий/загрузка артефакта](https://github.com/actions/upload-artifact).

### Пример

Например, репозиторий или веб-приложение может содержать файлы SASS и TypeScript, которые необходимо преобразовать в CSS и JavaScript. Если в соответствии с конфигурацией сборки скомпилированные файлы записываются в каталог `dist`, в случае успешного завершения всех тестов файлы будут развернуты в каталоге `dist` на сервере веб-приложений.

```text
|-- hello-world (repository)
|   └── dist
|   └── tests
|   └── src
|       └── sass/app.scss
|       └── app.ts
|   └── output
|       └── test
|
```

В этом примере показано, как создать для проекта Node.js рабочий процесс, который создает код в каталоге `src` и выполняет тесты в каталоге `tests`. Можно предположить, что при выполнении `npm test` в каталоге `code-coverage.html` будет создан отчет об объеме протестированного кода с именем `output/test/`.

Рабочий процесс отправляет рабочие артефакты в каталог `dist`, исключая при этом все файлы Markdown. Также в виде другого артефакта отправляется отчет `code-coverage.html`.

```yaml copy
name: Node CI

on: [push]

jobs:
  build_and_test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6
      - name: npm install, build, and test
        run: |
          npm install
          npm run build --if-present
          npm test
      - name: Archive production artifacts
        uses: actions/upload-artifact@v4
        with:
          name: dist-without-markdown
          path: |
            dist
            !dist/**/*.md
      - name: Archive code coverage results
        uses: actions/upload-artifact@v4
        with:
          name: code-coverage-report
          path: output/test/code-coverage.html
```

> \[!TIP]
> Чтобы отображать результаты покрытия кода напрямую в pull requestах вместо скачивания артефактов, можно загрузить отчёт о покрытии Cobertura XML в Code Quality. См [. раздел AUTOTITLE](/ru/code-security/how-tos/maintain-quality-code/set-up-code-coverage).

## Настройка пользовательского периода хранения артефакта

Вы можете определить пользовательский период хранения для отдельных артефактов, создаваемых рабочим процессом. При создании нового артефакта в рамках рабочего процесса можно использовать значение `retention-days` с действием `upload-artifact`. В этом примере показано, как установить 5-дневный пользовательский период хранения для артефакта с именем `my-artifact`:

```yaml copy
  - name: 'Upload Artifact'
    uses: actions/upload-artifact@v4
    with:
      name: my-artifact
      path: my_file.txt
      retention-days: 5
```

Значение `retention-days` не может превышать установленное для репозитория, организации или предприятия ограничение на продолжительность хранения.

## Скачивание артефактов во время выполнения рабочего процесса

Действие можно использовать [`actions/download-artifact`](https://github.com/actions/download-artifact) для скачивания ранее загруженных артефактов во время выполнения рабочего процесса.

> \[!NOTE]
> Если вы хотите скачать артефакты из другого рабочего процесса или запуска, нужно указать токен и идентификатор запуска. См. статью ["Скачать артефакты" из других запусков рабочих процессов или репозиториев](https://github.com/actions/download-artifact?tab=readme-ov-file#download-artifacts-from-other-workflow-runs-or-repositories) в документации по `download-artifact` действию.

Чтобы скачать отдельный артефакт, укажите его имя. Если не указать имя артефакта при скачивании, по умолчанию будет использоваться имя `artifact`.

```yaml
- name: Download a single artifact
  uses: actions/download-artifact@v5
  with:
    name: my-artifact
```

Также во время выполнения рабочего процесса можно скачать все артефакты, не указывая имя. Это удобно при работе с большим количеством артефактов.

```yaml
- name: Download all workflow run artifacts
  uses: actions/download-artifact@v5
```

При скачивании всех артефактов во время выполнения рабочего процесса для каждого артефакта создается каталог с его именем.

Для получения дополнительной информации о синтаксисе см. [действие действий/скачать артефакт](https://github.com/actions/download-artifact).

## Передача данных между заданиями в рабочем процессе

Действия `upload-artifact` и `download-artifact` позволяют совместно использовать данные между заданиями в рабочем процессе. В этом примере рабочего процесса показано, как передавать данные между заданиями в одном рабочем процессе. Для получения дополнительной информации смотрите
действия[/загрузка-артефакт](https://github.com/actions/upload-artifact) и скачать-артефакт [](https://github.com/actions/download-artifact)

Задания, зависящие от артефактов предыдущего задания, должны дожидаться его успешного завершения. В этом рабочем процессе используется ключевое слово `needs`, чтобы обеспечить последовательное выполнение заданий `job_1`, `job_2` и `job_3`. Например, требование использовать задание `job_2` в задании `job_1`, задается с помощью синтаксиса `needs: job_1`.

Задание 1 выполняет следующие действия:

* Выполняет математические вычисления и сохраняет результат в текстовый файл с именем `math-homework.txt`.
* Использует `upload-artifact` действие для загрузки `math-homework.txt` файла с именем`homework_pre` артефакта .

Используя результаты предыдущего задания, задание 2 выполняет следующие действия:

* Скачивает `homework_pre` артефакт, загруженный в предыдущей работе. По умолчанию действие `download-artifact` скачивает артефакты в каталог рабочей области, где выполняется шаг. С помощью входного параметра `path` можно указать другой каталог для скачивания.
* Считывает значение в файле `math-homework.txt`, выполняет математические вычисления и снова сохраняет результат в файл `math-homework.txt`, перезаписывая его содержимое.
* Отправляет файл `math-homework.txt`.
  Поскольку артефакты считаются неизменными в `v4`, артефакту передаётся другой ввод, `homework_final`, как имя.

Задание 3 отображает отправленный в предыдущем задании результат, выполняя следующие действия:

* Скачивает `homework_final` артефакт из Работы 2.
* Выводит результат вычисления в журнал.

В этом примере рабочего процесса вычисляется выражение `(3 + 7) x 9 = 90`.

```yaml copy
name: Share data between jobs

on: [push]

jobs:
  job_1:
    name: Add 3 and 7
    runs-on: ubuntu-latest
    steps:
      - shell: bash
        run: |
          expr 3 + 7 > math-homework.txt
      - name: Upload math result for job 1
        uses: actions/upload-artifact@v4
        with:
          name: homework_pre
          path: math-homework.txt

  job_2:
    name: Multiply by 9
    needs: job_1
    runs-on: windows-latest
    steps:
      - name: Download math result for job 1
        uses: actions/download-artifact@v5
        with:
          name: homework_pre
      - shell: bash
        run: |
          value=`cat math-homework.txt`
          expr $value \* 9 > math-homework.txt
      - name: Upload math result for job 2
        uses: actions/upload-artifact@v4
        with:
          name: homework_final
          path: math-homework.txt

  job_3:
    name: Display results
    needs: job_2
    runs-on: macOS-latest
    steps:
      - name: Download math result for job 2
        uses: actions/download-artifact@v5
        with:
          name: homework_final
      - name: Print the final result
        shell: bash
        run: |
          value=`cat math-homework.txt`
          echo The result is $value
```

При выполнении рабочего процесса архивируются все создаваемые им артефакты. Дополнительные сведения о скачивании архивных артефактов см. в разделе [Скачивание артефактов рабочего процесса](/ru/actions/how-tos/manage-workflow-runs/download-workflow-artifacts).

## Проверка артефактов

Каждый раз, когда действие upload-artifact используется, оно возвращает выходные данные с именем `digest`. Это дайджест SHA256 артефакта, который вы отправляете во время выполнения рабочего процесса.

Когда действие download-artifact затем используется для скачивания этого артефакта, он автоматически вычисляет дайджест для этого скачаемого артефакта и проверяет, соответствует ли он выходным данным шага отправки артефакта.

Если дайджест не соответствует, выполнение отобразит предупреждение в пользовательском интерфейсе и в журналах заданий.

Чтобы просмотреть дайджест SHA256, откройте журналы для задания отправки артефактов или проверьте выходные данные артефакта, отображаемые в пользовательском интерфейсе выполнения рабочего процесса.