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

Поддержка этой версии GitHub Enterprise будет прекращена 2023-03-15. Исправления выпускаться не будут даже при критических проблемах безопасности. Для повышения производительности, укрепления безопасности и новых функций установите последнюю версию GitHub Enterprise. Чтобы получить справку по обновлению, обратитесь в службу поддержки GitHub Enterprise.

Публикация образов Docker

Образы Docker можно публиковать в реестре, например Docker Hub или GitHub Packages, в рамках рабочего процесса непрерывной интеграции (CI).

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

Введение

В этом руководстве показано, как создать рабочий процесс, который выполняет сборку Docker, а затем публикует образы Docker в Docker Hub или GitHub Packages. С помощью одного рабочего процесса можно публиковать образы в одном или нескольких реестрах.

Примечание. Если требуется выполнить отправку в другой сторонний реестр Docker, пример в разделе «Публикация образов в GitHub Packages» может послужить хорошим шаблоном.

Предварительные требования

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

Кроме того, могут быть полезны базовые знания в следующих областях:

Сведения о конфигурации образа

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

В этом руководстве мы будем использовать действие build-push-action Docker для сборки образа Docker и отправки его в один или несколько реестров Docker. Дополнительные сведения см. на веб-сайте build-push-action.

Примечание. GitHub Actions в экземпляр GitHub Enterprise Server может иметь ограниченный доступ к действиям в GitHub.com или GitHub Marketplace. Дополнительные сведения см. в разделе Управление доступом к действиям из GitHub.com и обратитесь к своему администратору сайта GitHub Enterprise.

Публикация образов в Docker Hub

Каждый раз при создании выпуска в GitHub Enterprise Server можно активировать рабочий процесс для публикации образа. Рабочий процесс в приведенном ниже примере выполняется при активации события release с типом действия created. Дополнительные сведения о событии release см. в статье "События, активирующие рабочие процессы".

В приведенном ниже примере рабочего процесса мы используем действия Docker login-action и build-push-action для сборки образа Docker и в случае успешного выполнения сборки отправляем созданный образ в Docker Hub.

Для отправки в Docker Hub потребуется учетная запись Docker Hub и создания репозитория Docker Hub. Дополнительные сведения см. в разделе «Отправка образа контейнера Docker в Docker Hub» документации по Docker.

Ниже приведены параметры login-action, необходимые для Docker Hub.

  • username и password: это имя пользователя и пароль Docker Hub. Рекомендуется хранить имя пользователя и пароль Docker Hub в качестве секретов, чтобы не раскрыть их в файле рабочего процесса. Дополнительные сведения см. в статье «Создание и использование зашифрованных секретов».

Ниже приведен параметр metadata-action, необходимый для Docker Hub.

  • images: пространство имен и имя образа Docker, который вы собираете или отправляете в Docker Hub.

Ниже приведены параметры build-push-action, необходимые для Docker Hub.

  • tags: тег нового образа в формате DOCKER-HUB-NAMESPACE/DOCKER-HUB-REPOSITORY:VERSION. Можно задать один тег, как показано ниже, или указать несколько тегов в виде списка.
  • push: если задано значение true, образ будет отправлен в реестр в случае успешной сборки.
YAML
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.

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

name: Publish Docker image

on:
  release:
    types: [published]

jobs:
  push_to_registry:
    name: Push Docker image to Docker Hub
    runs-on: [self-hosted]
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2
      
      - name: Log in to Docker Hub
        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      
      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
        with:
          images: my-docker-hub-namespace/my-docker-hub-repository
      
      - name: Build and push Docker image
        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

Приведенный выше рабочий процесс извлекает репозиторий GitHub, использует login-action для входа в реестр, а затем использует действие build-push-action для создания образа Docker на основе Dockerfile репозитория, отправки образа в Docker Hub и применения тега к образу.

Публикация образов в GitHub Packages

Каждый раз при создании выпуска в GitHub Enterprise Server можно активировать рабочий процесс для публикации образа. Рабочий процесс в приведенном ниже примере выполняется при активации события release с типом действия created. Дополнительные сведения о событии release см. в статье "События, активирующие рабочие процессы".

В приведенном ниже примере рабочего процесса мы используем действия Docker login-action и build-push-action для сборки образа Docker и, если сборка выполнена успешно, отправляем собранный образ в GitHub Packages.

Ниже приведены параметры login-action, необходимые для GitHub Packages.

  • registry: необходимо задать значение docker.pkg.github.com.
  • username: можно использовать контекст ${{ github.actor }} для автоматического использования имени пользователя, активировавшего выполнение рабочего процесса. Дополнительные сведения см. в разделе «Контексты».
  • password: для пароля можно использовать автоматически созданный секрет GITHUB_TOKEN. Дополнительные сведения см. в разделе «Проверка подлинности с помощью GITHUB_TOKEN».

Ниже приведены параметры build-push-action, необходимые для GitHub Packages.

  • push: если задано значение true, в случае успешной сборки образ будет отправлен в реестр.

  • tags: необходимо задать в формате docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION.

    Например, для образа с именемocto-image, хранящегося на GitHub в http://github.com/octo-org/octo-repo, для параметра tags необходимо задать значение docker.pkg.github.com/octo-org/octo-repo/octo-image:latest. Можно задать один тег, как показано ниже, или указать несколько тегов в виде списка.

YAML
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.

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

name: Publish Docker image

on:
  release:
    types: [published]
jobs:
  push_to_registry:
    name: Push Docker image to GitHub Packages
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Check out the repo
        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:
          context: .
          push: true
          tags: |
            docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.sha }}
            docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.event.release.tag_name }}

Приведенный выше рабочий процесс извлекает репозиторий GitHub Enterprise Server, использует login-action для входа в реестр, а затем использует действие build-push-action для сборки образа Docker на основе Dockerfile репозитория, отправки образа в реестр Docker и применения SHA фиксации и версии выпуска в качестве тегов образа.

Публикация образов в Docker Hub и GitHub Packages

В одном рабочем процессе образ Docker можно опубликовать в нескольких реестрах с помощью действий login-action и build-push-action для каждого реестра.

В следующем примере рабочего процесса используются шаги из предыдущих разделов («Публикация образов в Docker Hub» и «Публикация образов в GitHub Packages») для создания одного рабочего процесса, который выполняет отправку в оба реестра.

YAML
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.

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

name: Publish Docker image

on:
  release:
    types: [published]

jobs:
  push_to_registries:
    name: Push Docker image to multiple registries
    runs-on: [self-hosted]
    permissions:
      packages: write
      contents: read
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2
      
      - name: Log in to Docker Hub
        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      
      - name: Log in to the Docker registry
        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
        with:
          registry: docker.pkg.github.com
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      
      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
        with:
          images: |
            my-docker-hub-namespace/my-docker-hub-repository
            docker.pkg.github.com/${{ github.repository }}/my-image
      
      - name: Build and push Docker images
        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

Приведенный выше рабочий процесс извлекает репозиторий GitHub Enterprise Server, дважды использует login-action для входа в оба реестра и создает теги и метки с помощью действия metadata-action. Затем действие build-push-action собирает и отправляет образ Docker в Docker Hub и реестр Docker.