Skip to main content
Мы публикуем частые обновления нашей документации, и перевод этой страницы может все еще выполняться. Актуальные сведения см. в документации на английском языке.

Хранение данных рабочего процесса в виде артефактов

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

Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.

Сведения об артефактах рабочего процесса

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

По умолчанию GitHub Enterprise Server хранит журналы сборки и артефакты в течение 90 дней, и этот период хранения можно настроить. Дополнительные сведения см. в разделе Ограничения использования, выставление счетов и администрирование. Отсчет периода хранения запроса на вытягивание начинается заново каждый раз, когда в него отправляется новая фиксация.

Ниже перечислены некоторые распространенные артефакты, которые можно отправлять:

  • Файлы журналов и дампы ядра.
  • Результаты тестов, сведения о сбоях и снимки экрана.
  • Двоичные или сжатые файлы.
  • Выходные показатели нагрузочных тестов и объема протестированного кода.

Артефакты потребляют дисковое пространство во внешнем хранилище BLOB-объектов, настроенном для GitHub Actions в экземпляр GitHub Enterprise Server.

Артефакты отправляются во время выполнения рабочего процесса. При этом вы можете просмотреть имя и размер артефакта в пользовательском интерфейсе. При скачивании артефакта с помощью пользовательского интерфейса GitHub Enterprise Server все отдельные файлы, которые были отправлены в составе артефакта, упаковываются в один файл. Это означает, что счета выставляются на основе размера отправленного артефакта, а не ZIP-файла.

Для отправки и скачивания артефактов сборки GitHub Enterprise Server предоставляет два действия. Дополнительные сведения см. в разделе upload-artifact и download-artifact действия в экземпляр GitHub Enterprise Server.

Совместное использование данных между заданиями:

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

Шаги задания размещаются в общей среде на компьютере средства выполнения, но выполняются в отдельных процессах. Для передачи данных между шагами задания можно использовать входные и выходные данные. Дополнительные сведения о входных и выходных данных см. в разделе Синтаксис метаданных для GitHub Actions.

Сравнение артефактов и кэширования зависимостей

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

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

Дополнительные сведения о кэшировании зависимостей см. в разделе Кэширование зависимостей для ускорения рабочих процессов.

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

Вы можете создать рабочий процесс непрерывной интеграции для сборки и тестирования кода. Дополнительные сведения об использовании GitHub Actions для выполнения CI см. в разделе Сведения о непрерывной интеграции.

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

Для отправки артефактов можно использовать действие upload-artifact. При отправке артефакта можно указать любое количество файлов или каталогов. Также можно исключить конкретные файлы или каталоги и использовать шаблоны с подстановочными знаками. Рекомендуется указать имя артефакта. Если это не сделать, по умолчанию будет использоваться имя artifact. Дополнительные сведения о синтаксисе см. в описании действия actions/upload-artifact в экземпляр GitHub Enterprise Server.

Пример

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

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

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

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

YAML
name: Node CI

on: [push]

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

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

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

YAML
  - name: 'Upload Artifact'
    uses: actions/upload-artifact@v3
    with:
      name: my-artifact
      path: my_file.txt
      retention-days: 5

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

Скачивание или удаление артефактов

С помощью действия download-artifact во время выполнения рабочего процесса можно скачивать артефакты, которые ранее были отправлены в том же рабочем процессе.

После завершения выполнения рабочего процесса можно скачать или удалить артефакты на GitHub или с помощью REST API. Дополнительные сведения см. в разделах Скачивание артефактов рабочего процесса, Удаление артефактов рабочего процесса и Действия.

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

С помощью действия actions/download-artifact во время выполнения рабочего процесса можно скачать ранее отправленные артефакты.

Примечание. Скачивать можно только те артефакты, которые были отправлены во время выполнения того же рабочего процесса.

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

- name: Download a single artifact
  uses: actions/download-artifact@v3
  with:
    name: my-artifact

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

- name: Download all workflow run artifacts
  uses: actions/download-artifact@v3

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

Дополнительные сведения о синтаксисе см. в действии actions/download-artifact в экземпляр GitHub Enterprise Server.

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

Действия upload-artifact и download-artifact позволяют совместно использовать данные между заданиями в рабочем процессе. В этом примере рабочего процесса показано, как передавать данные между заданиями в одном рабочем процессе. Дополнительные сведения см. в разделе actions/upload-artifact и download-artifact действия в экземпляр GitHub Enterprise Server.

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

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

  • Выполняет математические вычисления и сохраняет результат в текстовый файл с именем math-homework.txt.
  • С помощью действия upload-artifact отправляет файл math-homework.txt с именем артефакта homework.

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

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

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

  • Скачивает артефакт homework.
  • Выводит результат вычисления в журнал.

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

YAML
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@v3
        with:
          name: homework
          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@v3
        with:
          name: homework
      - 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@v3
        with:
          name: homework
          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@v3
        with:
          name: homework
      - name: Print the final result
        shell: bash
        run: |
          value=`cat math-homework.txt`
          echo The result is $value

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