Nota: Los ejecutores hospedados en GitHub no son compatibles con GitHub Enterprise Server actualmente. Puedes encontrar más información sobre el soporte que se tiene planeado en el futuro en el Itinerario público de GitHub.
Introducción
Esta guía te muestra cómo crear un flujo de trabajo que realiza una compilación de Docker y posteriormente publica las imágenes de Docker en Docker Hub o Registro del paquete de GitHub. Con un solo flujo de trabajo, puedes publicar imágenes a un solo registro o a varios de ellos.
Nota: Si quieres subir otro registro de terceros de Docker, el ejemplo en la sección "Publicar imágenes en Registro del paquete de GitHub" puede servir como plantilla.
Prerrequisitos
Te recomendamos que tengas una comprensión básica de las opciones de configuración de flujo de trabajo y cómo crear un archivo de flujo de trabajo. Para obtener más información, consulta la sección "Aprende sobre GitHub Actions".
También puede que encuentres útil el tener un entendimiento básico de lo siguiente:
Acerca de la configuración de imágenes
Esta guía asume que tienes una definición completa de una imagen de Docker almacenada en un repositorio de GitHub. Por ejemplo, tu repositorio debe contener un Dockerfile, y cualquier otro archivo que se necesite para realizar una compilación de Docker para crear una imagen.
En esta guía, utilizaremos la acción build-push-action
de Docker para compilar la imagen de Docker y cargarla a uno o más registros de Docker. Para obtener más información, consulta la sección build-push-action
.
Note: GitHub Actions on tu instancia de GitHub Enterprise Server may have limited access to actions on GitHub.com or GitHub Marketplace. For more information, see "Managing access to actions from GitHub.com" and contact your GitHub Enterprise site administrator.
Publicar imágenes en Docker Hub
Cada vez que creas un nuevo lanzamiento en GitHub, puedes activar un flujo de trabajo para publicar tu imagen. El flujo de trabajo en el ejemplo siguiente se ejecuta cuando el se activa el evento release
con el tipo de actividad created
. Para obtener más información acerca del evento release
, consulta "Eventos que activan flujos de trabajo".
En el flujo de trabajo de ejemplo a continuación, utilizamos las acciones login-action
y build-push-action
para crear la imagen de Docker y, si la compilación es exitosa, subimos la imagen compilada a Docker Hub.
Para hacer una carga en Docker hub, necesitarás tener una cuenta de Docker Hub y haber creado un repositorio ahí mismo. Para obtener más información, consulta la sección "Publicar una imagen de contenedor de Docker en Docker Hub" en la documentación de Docker.
Las opciones de login-action
que se requieren para Docker hub son:
username
ypassword
: Este es tu nombre de usuario y contraseña de Docker Hub. Te recomendamos almacenar tu nombre de usuario y contraseña de Docker Hub como un secreto para que no se expongan en tu archivo de flujo de trabajo. Para más información, consulta "Crear y usar secretos cifrados."
La opción metadata-action
que se requiere para Docker hub es:
images
: El designador de nombre para la imagen de Docker que estás compilando/subiendo a Docker Hub.
Las opciones de build-push-action
que se requieren para Docker Hub son:
tags
: La etiqueta de tu nueva imagen en el formatoDOCKER-HUB-NAMESPACE/DOCKER-HUB-REPOSITORY:VERSION
. Puedes configurar una etiqueta sencilla como se muestra a continuación o especificar etiquetas múltiples en una lista.push
: Si se configura comotrue
, se subirá la imagen al registro si se compila con éxito.
# This workflow uses actions that are not certified by GitHub.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# documentación.
name: Publish Docker image
on:
release:
types: [published]
jobs:
push_to_registry:
name: Push Docker image to Docker Hub
runs-on: ubuntu-latest
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 }}
El flujo de trabajo anterior verifica el repositorio de GitHub, utiliza la login-action
para iniciar sesión en el registro y luego utiliza la acción build-push-action
para: crear una imagen de Docker con base en el Dockerfile
de tu repositorio; subir la imagen a Docker Hub y aplicar una etiqueta a la imagen.
Publicar imágenes en Registro del paquete de GitHub
Cada vez que creas un nuevo lanzamiento en GitHub, puedes activar un flujo de trabajo para publicar tu imagen. El flujo de trabajo en el ejemplo siguiente se ejecuta cuando el se activa el evento release
con el tipo de actividad created
. Para obtener más información acerca del evento release
, consulta "Eventos que activan flujos de trabajo".
En el siguiente ejemplo de flujo de trabajo, utilizamos las acciones login-action
y build-push-action
de Docker para crear la imagen de Docker y, si la compilación tiene éxito, sube la imagen cargada al Registro del paquete de GitHub.
Las opciones de login-action
que se requieren para el Registro del paquete de GitHub son:
registry
: Debe configurarse endocker.pkg.github.com
.username
: Puedes utilizar el contexto${{ github.actor }}
para utilizar automáticamente el nombre de usuario del usuario que desencadenó la ejecución del flujo de trabajo. Para obtener más información, consulta "Contextos".password
: Puedes utilizar el secreto generado automáticamenteGITHUB_TOKEN
para la contraseña. Para más información, consulta "Autenticando con el GITHUB_TOKEN."
Las opciones de build-push-action
que se requieren para Registro del paquete de GitHub son:
push
: Si se configura entrue
, la imagen se cargará al registro si se compila con éxito.tags
: Debe configurarse en el formatodocker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION
. Por ejemplo, para una imagen que se llameocto-image
y esté almacenada en GitHub en la rutahttp://github.com/octo-org/octo-repo
, la opcióntags
debe configurarse comodocker.pkg.github.com/octo-org/octo-repo/octo-image:latest
. Puedes configurar una tarjeta sencilla como se muestra a continuación o especificar etiquetas múltiples en una lista.
# This workflow uses actions that are not certified by GitHub.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# documentación.
name: Publish Docker image
on:
release:
types: [published]
jobs:
push_to_registry:
name: Push Docker image to GitHub Packages
runs-on: ubuntu-latest
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 }}
El flujo de trabajo anterior verifica el repositorio GitHub, utiliza la login-action
para ingresar en el registro y luego utiliza la acción build-push-action
para: crear una imagen de Docker con base en el Dockerfile
de tu repositorio; subir la imagen al registro de Docker y aplicar el SHA de confirmación y versión de lanzamiento como etiquetas de la imagen.
Publicar imágenes en Docker Hub y en Registro del paquete de GitHub
En un flujo de trabajo sencillo, puedes publicar tu imagen de Docker en registros múltiples si utilizas las acciones login-action
y build-push-action
para cada registro.
El siguiente flujo de trabajo de ejemplo utiliza los pasos de las secciones anteriores ("Publicar imágenes en Docker Hub" y "Publicar imágenes en el Registro del paquete de GitHub") para crear un solo flujo de trabajo que cargue ambos registros.
# This workflow uses actions that are not certified by GitHub.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# documentación.
name: Publish Docker image
on:
release:
types: [published]
jobs:
push_to_registries:
name: Push Docker image to multiple registries
runs-on: ubuntu-latest
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 }}
El flujo de trabajo anterior verifica el repositorio GitHub, utiliza login-action
dos veces para iniciar sesión en ambos registros y genera etiquetas y marcadores con la acción metadata-action
. Entonces, la acción build-push-action
crea y sube la imagen de Docker a Docker Hub y al registro de Docker.