Загрузка артефактов сборки в GitHub Actions

GitBeginner
Практиковаться сейчас

Введение

В конвейере непрерывной интеграции (CI) одна задача часто создает файлы (например, скомпилированные бинарные файлы, сборки webpack или отчеты о тестировании), которые вы хотите сохранить или передать другим задачам. Эти файлы называются артефактами (artifacts).

По умолчанию файлы, созданные во время выполнения рабочего процесса (workflow run), теряются после его завершения. Чтобы сохранить их, вам необходимо "загрузить" их в качестве артефактов.

В этой лабораторной работе вы модифицируете свой рабочий процесс Node.js, чтобы имитировать процесс сборки, который создает каталог dist, а затем используете действие actions/upload-artifact для сохранения этого каталога.

Эта лабораторная работа основана на репозитории, который вы создали в предыдущих лабораторных работах. Вы будете работать с репозиторием github-actions-demo.

Обновление рабочего процесса для генерации файла сборки

На этом шаге вы измените файл рабочего процесса (workflow file), чтобы имитировать процесс сборки. Вы добавите шаг, который создает директорию dist и фиктивный артефакт (dummy artifact file).

  1. На странице вашего репозитория GitHub для github-actions-demo нажмите зеленую кнопку Code.
  2. Убедитесь, что выбрана вкладка HTTPS, и скопируйте URL. Он должен выглядеть примерно так: https://github.com/your-username/github-actions-demo.git.
  3. Откройте терминал в среде LabEx. Путь по умолчанию — ~/project.
  4. Используйте команду git clone для загрузки репозитория. Замените your-username на ваш фактический логин GitHub.
cd ~/project
git clone https://github.com/your-username/github-actions-demo.git

Пример вывода:

Cloning into 'github-actions-demo'...
remote: Enumerating objects: X, done.
remote: Counting objects: 100% (X/X), done.
remote: Total X (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (X/X), done.
  1. Перейдите в клонированный репозиторий:
cd ~/project/github-actions-demo
  1. Создайте новый файл рабочего процесса .github/workflows/upload-artifacts.yml с помощью редактора WebIDE. Вы можете найти этот файл в проводнике файлов слева, в разделе project/github-actions-demo/.github/workflows/.

  2. Начните с создания базовой структуры рабочего процесса. Добавьте имя рабочего процесса и триггер:

name: Upload Artifacts

on: [push]
  1. Добавьте секцию jobs и определите задание build с указанием раннера (runner):
jobs:
  build:
    runs-on: ubuntu-latest
  1. Добавьте секцию steps. Сначала добавьте шаг для извлечения кода (checkout):
steps:
  - uses: actions/checkout@v4
  1. Добавьте шаг настройки Node.js:
- name: Use Node.js
  uses: actions/setup-node@v4
  with:
    node-version: "20"
  1. Добавьте шаг для установки зависимостей:
- name: Install dependencies
  run: npm install
  1. Добавьте шаг сборки, который создает директорию dist и файл внутри нее:
- name: Build project
  run: |
    mkdir dist
    echo "This is the build artifact" > dist/build.txt
  1. Добавьте шаг для запуска тестов:
- name: Run tests
  run: npm test

Ваш полный файл теперь должен выглядеть следующим образом:

name: Upload Artifacts

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "20"
      - name: Install dependencies
        run: npm install
      - name: Build project
        run: |
          mkdir dist
          echo "This is the build artifact" > dist/build.txt
      - name: Run tests
        run: npm test

Объяснение

  • mkdir dist: Создает директорию с именем dist.
  • echo ... > dist/build.txt: Создает простой текстовый файл внутри dist для имитации скомпилированного актива (asset).

Сохраните файл (Ctrl+S или Cmd+S) после внесения изменений.

Использование actions/upload-artifact@v4 для загрузки директории dist

Теперь, когда мы создали некоторые файлы, нам нужно их загрузить. Мы будем использовать официальное действие (action) actions/upload-artifact.

  1. В файле .github/workflows/upload-artifacts.yml добавьте новый шаг в конец задания (job):
- name: Upload build artifact
  uses: actions/upload-artifact@v4
  with:
    name: build-assets
    path: dist
  1. Ваш полный файл должен выглядеть примерно так:
name: Upload Artifacts

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "20"
      - name: Install dependencies
        run: npm install
      - name: Build project
        run: |
          mkdir dist
          echo "This is the build artifact" > dist/build.txt
      - name: Run tests
        run: npm test
      - name: Upload build artifact
        uses: actions/upload-artifact@v4
        with:
          name: build-assets
          path: dist

Объяснение

  • uses: actions/upload-artifact@v4: Вызывает действие для обработки загрузки.
  • name: build-assets: Имя артефакта, под которым он будет отображаться в интерфейсе GitHub (UI).
  • path: dist: Каталог (или файл) для загрузки.

Сохраните файл (Ctrl+S или Cmd+S).

Зафиксируйте изменения (commit), отправьте (push) и проверьте артефакт в интерфейсе GitHub

На этом шаге вы закоммитите изменения и отправите их в GitHub. Это запустит рабочий процесс (workflow), который вы только что обновили.

  1. Убедитесь, что вы находитесь в директории репозитория:
cd ~/project/github-actions-demo
  1. Добавьте изменения в индекс (Stage the changes):
git add .
  1. Закоммитьте изменения:
git commit -m "Add build step and upload artifacts"
  1. Отправьте изменения в удаленный репозиторий на GitHub:
git push

Примечание об аутентификации (Note on Authentication)

Когда вы выполните команду git push, WebIDE автоматически предложит вам пройти аутентификацию. Следуйте этим подробным шагам:

  1. Появится всплывающее окно с сообщением: "The extension 'GitHub' wants to sign in using GitHub." Нажмите Allow (Разрешить).
  2. Появится новое уведомление. Нажмите "Copy&Continue to GitHub", а затем "Open" в следующем запросе.
  3. Войдите в свою учетную запись GitHub в открывшемся окне браузера и введите скопированный код авторизации. После подтверждения авторизации страница автоматически закроется.
  4. Подождите несколько секунд, и вы увидите, что терминал успешно завершил операцию пуша.

Примечание о конфиденциальности (Privacy Note): WebIDE запросит полный доступ к вашей учетной записи GitHub для целей аутентификации. Вам не нужно беспокоиться о проблемах конфиденциальности — виртуальная машина LabEx будет немедленно уничтожена после завершения текущей лабораторной работы, и ваши учетные данные и информация об авторизации не будут сохранены.

Этот процесс аутентификации не требует ручной настройки имени пользователя или Персонального токена доступа (Personal Access Token).

Проверка на GitHub (Verify on GitHub)

  1. Посетите свой репозиторий на GitHub в веб-браузере.
  2. Нажмите на вкладку Actions.
  3. Нажмите на последний запуск рабочего процесса (например, "Add build step and upload artifacts").
  4. Прокрутите страницу сводки вниз. Вы должны увидеть раздел с названием Artifacts.
  5. Вы должны увидеть артефакт с именем build-assets.
  6. Нажмите на него, чтобы скачать. Это будет zip-файл, содержащий build.txt.
GitHub Artifacts

Резюме

В этой лабораторной работе вы узнали, как сохранять данные из запуска рабочего процесса (workflow run) с помощью артефактов. Вы:

  1. Создали шаг "build" (сборка), который генерировал выходные файлы.
  2. Использовали actions/upload-artifact для сохранения каталога dist.
  3. Убедились, что артефакт доступен для загрузки в интерфейсе GitHub (UI).

Артефакты необходимы для обмена файлами между заданиями (jobs) (например, из задания сборки в задание развертывания) или для отладки сбоев путем загрузки логов.