Сведения об установке GitHub Packages с помощью GitHub Actions
GitHub Actions позволяет автоматизировать рабочие процессы разработки программного обеспечения в том же расположении, где вы храните код и совместно работаете над запросами на вытягивание и проблемами. Вы можете написать отдельные задачи (т. н. действия) и объединить их для создания пользовательского рабочего процесса. С помощью GitHub Actions можно создавать комплексные возможности непрерывной интеграции и непрерывного развертывания непосредственно в репозитории. Дополнительные сведения см. в разделе Изучение GitHub Actions.
Вы можете расширить возможности CI и CD вашего репозитория, публикуя или устанавливая пакеты в рамках рабочего процесса.
Для проверки подлинности в реестрах пакетов в GitHub Enterprise Server, рекомендуется использовать GITHUB_TOKEN
, который GitHub Enterprise Server автоматически создает для репозитория при включении GitHub Actions. Вам следует установить разрешения для этого маркера доступа в файле рабочего процесса, чтобы предоставить доступ на чтение в области contents
и доступ на запись в области packages
. Для вилок GITHUB_TOKEN
предоставляется доступ на чтение в родительском репозитории. Дополнительные сведения см. в разделе Автоматическая проверка подлинности токенов.
Вы можете ссылаться на GITHUB_TOKEN
в файле рабочего процесса с помощью контекста {{secrets.GITHUB_TOKEN}}
. Дополнительные сведения см. в разделе Автоматическая проверка подлинности токенов.
Сведения о разрешениях и доступе к пакетам
Когда вы включаете GitHub Actions, GitHub устанавливает приложение GitHub в вашем репозитории. Секрет GITHUB_TOKEN
— это маркер доступа к установке приложения GitHub. Маркер доступа установки можно использовать для проверки подлинности от имени приложения GitHub, установленного в вашем репозитории. Разрешения маркера ограничены репозиторием, содержащим ваш рабочий процесс. Дополнительные сведения см. в разделе Автоматическая проверка подлинности токенов.
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:
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.
# GitHub рекомендует закрепить действия в фиксации SHA.
# Чтобы получить более новую версию, потребуется обновить SHA.
# Вы также можете ссылаться на тег или ветвь, однако действие может измениться без предупреждения.
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.pkg.github.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.pkg.github.com/${{ github.repository }}/octo-image:${{ github.sha }}
Соответствующие параметры описаны в следующей таблице. Полные сведения о каждом элементе рабочего процесса см. в разделе Синтаксис рабочего процесса для GitHub Actions.
```yaml on: push: branches: ['release'] ``` |
Настраивает рабочий процесс Create and publish a Docker image для запуска при каждой отправке изменений в ветвь с именем release .
|
|
Это задание устанавливает NPM и использует его для сборки приложения. |
|
Это задание использует 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.pkg.github.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.pkg.github.com/${{ github.repository }}/octo-image:${{ github.sha }} ``` | Помечает образ с помощью SHA фиксации, которая активировала рабочий процесс. |
Этот новый рабочий процесс будет запускаться автоматически при каждой отправке изменения в ветвь с именем release
в репозитории. Ход выполнения можно просматривать на вкладке Действия.
Через несколько минут после завершения рабочего процесса новый пакет будет отображаться в репозитории. Сведения о том, как найти доступные пакеты, см. в разделе Просмотр пакетов.
Установка пакета с помощью действия
Пакеты можно устанавливать в рамках потока CI с помощью GitHub Actions. Например, можно настроить рабочий процесс так, чтобы каждый раз, когда разработчик отправляет код в запрос на вытягивание, этот рабочий процесс разрешал зависимости путем загрузки и установки пакетов, размещенных в GitHub Packages. Затем рабочий процесс может выполнять тесты CI, которые требуют зависимости.
Установка пакетов, размещенных в GitHub Packages с помощью GitHub Actions, требует минимальной настройки или дополнительной проверки подлинности при использовании GITHUB_TOKEN
.
Действия по настройке зависят от клиента пакета. Общие сведения о настройке рабочего процесса для GitHub Actions см. в разделе Использование рабочих процессов.