Необходимые компоненты
Прежде чем завершить работу с этим руководством, необходимо понять артефакты рабочего процесса. См . раздел AUTOTITLE.
Отправка артефактов сборки и тестирования
Выходные данные сборки и тестирования кода часто содержат файлы, которые можно использовать для отладки сбоев тестов и рабочего кода, который можно развернуть. Вы можете настроить рабочий процесс для сборки и тестирования отправляемого в репозиторий кода, а также получения отчетов об успешном или неудачном выполнении. Вы можете отправить выходные данные сборки и тестирования для развертывания, отладки неудачно завершенных тестов или сбоев, а также для просмотра охвата набора тестов.
Для отправки артефактов можно использовать действие 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 в каталоге code-coverage.html будет создан отчет об объеме протестированного кода с именем output/test/.
Рабочий процесс отправляет рабочие артефакты в каталог dist, исключая при этом все файлы Markdown. Также в виде другого артефакта отправляется отчет code-coverage.html.
name: Node CI
on: [push]
jobs:
build_and_test:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v5
- 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
name: Node CI
on: [push]
jobs:
build_and_test:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v5
- 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:
- name: 'Upload Artifact'
uses: actions/upload-artifact@v3
with:
name: my-artifact
path: my_file.txt
retention-days: 5
- name: 'Upload Artifact'
uses: actions/upload-artifact@v3
with:
name: my-artifact
path: my_file.txt
retention-days: 5
Значение retention-days не может превышать установленное для репозитория, организации или предприятия ограничение на продолжительность хранения.
Скачивание артефактов во время выполнения рабочего процесса
Действие можно использовать 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 позволяют совместно использовать данные между заданиями в рабочем процессе. В этом примере рабочего процесса показано, как передавать данные между заданиями в одном рабочем процессе. Дополнительные сведения см. в разделе .
Задания, зависящие от артефактов предыдущего задания, должны дожидаться его успешного завершения. В этом рабочем процессе используется ключевое слово needs, чтобы обеспечить последовательное выполнение заданий job_1, job_2 и job_3. Например, требование использовать задание job_2 в задании job_1, задается с помощью синтаксиса 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.
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
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
При выполнении рабочего процесса архивируются все создаваемые им артефакты. Дополнительные сведения о скачивании архивных артефактов см. в разделе Скачивание артефактов рабочего процесса.