Skip to main content

Публикация и установка пакета с помощью GitHub Actions

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

Примечание. GitHub Packages сейчас находится в бета-версии для GitHub AE.

Сведения об установке GitHub Packages с помощью GitHub Actions

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

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

Для проверки подлинности в реестрах пакетов в GitHub AE, рекомендуется использовать GITHUB_TOKEN , который GitHub AE автоматически создает для репозитория при включении GitHub Actions. Вам следует установить разрешения для этого маркера доступа в файле рабочего процесса, чтобы предоставить доступ на чтение в области contents и доступ на запись в области packages. Для вилок GITHUB_TOKEN предоставляется доступ на чтение в родительском репозитории. Дополнительные сведения см. в разделе Проверка подлинности с помощью GITHUB_TOKEN.

Вы можете ссылаться на GITHUB_TOKEN в файле рабочего процесса с помощью контекста {{secrets.GITHUB_TOKEN}}. Дополнительные сведения см. в разделе Проверка подлинности с помощью GITHUB_TOKEN.

Сведения о разрешениях и доступе к пакетам

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

GitHub Packages позволяют отправлять и получать пакеты с помощью маркера GITHUB_TOKEN, доступного рабочему процессу GitHub Actions.

Публикация пакета с помощью действия

Для автоматической публикации пакетов в рамках потока непрерывной интеграции (CI) можно использовать GitHub Actions. Такой подход к непрерывному развертыванию (CD) позволяет автоматизировать создание новых версий пакетов, если код соответствует вашим стандартам качества. Например, можно создать рабочий процесс, который выполняет тесты CI каждый раз, когда разработчик отправляет код в определенную ветвь. Если тесты будут пройдены, рабочий процесс сможет опубликовать новую версию пакета в GitHub Packages.

Действия по настройке зависят от клиента пакета. Общие сведения о настройке рабочего процесса для GitHub Actionsсм. в разделе Настройка рабочего процесса.

В следующем примере показано, как использовать GitHub Actions, чтобы выполнить сборку и тестирование вашего приложения, а затем автоматически создать образ Docker и опубликовать его в GitHub Packages.

Создайте новый файл рабочего процесса в репозитории (таком как .github/workflows/deploy-image.yml) и добавьте следующий код YAML:

YAML
# <a name="this-workflow-uses-actions-that-are-not-certified-by-github"></a>Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# <a name="they-are-provided-by-a-third-party-and-are-governed-by"></a>Они предоставляются сторонним поставщиком, и на них распространяются
# <a name="separate-terms-of-service-privacy-policy-and-support"></a>отдельные условия обслуживания, политика конфиденциальности и поддержка
# <a name="documentation"></a>документации.

# <a name="github-recommends-pinning-actions-to-a-commit-sha"></a>GitHub рекомендует закрепить действия в фиксации SHA.
# <a name="to-get-a-newer-version-you-will-need-to-update-the-sha"></a>Чтобы получить более новую версию, потребуется обновить SHA.
# <a name="you-can-also-reference-a-tag-or-branch-but-the-action-may-change-without-warning"></a>Вы также можете ссылаться на тег или ветвь, однако действие может измениться без предупреждения.

name: Create and publish a Docker image

on:
  push:
    branches: ['release']

jobs:
  run-npm-build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: npm install and build webpack
        run: |
          npm install
          npm run build
      - uses: actions/upload-artifact@v2
        with:
          name: webpack artifacts
          path: public/

  run-npm-test:
    runs-on: ubuntu-latest
    needs: run-npm-build
    strategy:
      matrix:
        os: [ubuntu-latest]
        node-version: [12.x, 14.x]
    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node-version }}
      - uses: actions/download-artifact@v2
        with:
          name: webpack artifacts
          path: public
      - name: npm install, and test
        run: |
          npm install
          npm test
        env:
          CI: true

  build-and-push-image:
    runs-on: ubuntu-latest
    needs: run-npm-test 
    permissions: 
      contents: read
      packages: write 
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Log in to GitHub Docker Registry
        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
        with:
          registry: docker.YOUR-HOSTNAME.com
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push Docker image
        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
        with:
          push: true
          tags: |
            docker.YOUR-HOSTNAME.com/${{ github.repository }}/octo-image:${{ github.sha }}

Соответствующие параметры описаны в следующей таблице. Полные сведения о каждом элементе рабочего процесса см. в разделе Синтаксис рабочего процесса для GitHub Actions.

```yaml on: push: branches: ['release'] ``` Настраивает рабочий процесс Create and publish a Docker image для запуска при каждой отправке изменений в ветвь с именем release.
run-npm-build:
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v2
    - name: npm install and build webpack
      run: |
        npm install
        npm run build
    - uses: actions/upload-artifact@v2
      with:
        name: webpack artifacts
        path: public/
Это задание устанавливает NPM и использует его для сборки приложения.
run-npm-test:
  runs-on: ubuntu-latest
  needs: run-npm-build
  strategy:
    matrix:
      os: [ubuntu-latest]
      node-version: [12.x, 14.x]
  steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v2
      with:
        node-version: ${{ matrix.node-version }}
    - uses: actions/download-artifact@v2
      with:
        name: webpack artifacts
        path: public
    - name: npm install, and test
      run: |
        npm install
        npm test
      env:
        CI: true
Это задание использует npm test для тестирования кода. Команда needs: run-npm-build делает это задание зависимым от задания run-npm-build.
```yaml build-and-push-image: runs-on: ubuntu-latest needs: run-npm-test ``` Это задание публикует пакет. Команда needs: run-npm-test делает это задание зависимым от задания run-npm-test.
```yaml permissions: contents: read packages: write ``` Задает разрешения, предоставляемые GITHUB_TOKEN для действий в этом задании.
```yaml - name: Log in to GitHub Docker Registry uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 with: registry: docker.YOUR-HOSTNAME.com username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} ``` Создает новый шаг с именем Log in to GitHub Docker Registry, выполняющий вход в реестр с помощью учетной записи и пароля, которые будут публиковать пакеты. После публикации пакеты становятся собственностью определенной здесь учетной записи.
```yaml - name: Build and push Docker image ``` Создает новый шаг с именем Build and push Docker image. Этот шаг выполняется как часть задания build-and-push-image.
```yaml uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc ``` Использует действие Docker build-push-action для сборки образа на основе Dockerfile вашего репозитория. Если сборка выполнена успешно, передает образ в GitHub Packages.
```yaml with: ``` Отправляет необходимые параметры в действие build-push-action. Они определяются в последующих строках.
```yaml push: true ``` Отправляет этот образ в реестр, если он был успешно собран.
```yaml tags: | docker.YOUR-HOSTNAME.com/${{ github.repository }}/octo-image:${{ github.sha }} ``` Помечает образ с помощью SHA фиксации, которая активировала рабочий процесс.

Этот новый рабочий процесс будет запускаться автоматически при каждой отправке изменения в ветвь с именем release в репозитории. Ход выполнения можно просматривать на вкладке Действия.

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

Установка пакета с помощью действия

Пакеты можно устанавливать в рамках потока CI с помощью GitHub Actions. Например, можно настроить рабочий процесс так, чтобы каждый раз, когда разработчик отправляет код в запрос на вытягивание, этот рабочий процесс разрешал зависимости путем загрузки и установки пакетов, размещенных в GitHub Packages. Затем рабочий процесс может выполнять тесты CI, которые требуют зависимости.

Установка пакетов, размещенных в GitHub Packages с помощью GitHub Actions, требует минимальной настройки или дополнительной проверки подлинности при использовании GITHUB_TOKEN.

Действия по настройке зависят от клиента пакета. Общие сведения о настройке рабочего процесса для GitHub Actionsсм. в разделе Настройка рабочего процесса.