Skip to main content

Ejecutar trabajos en un contenedor

Usa un contenedor para ejecutar los pasos de un trabajo.

Información general

Use jobs.<job_id>.container a fin de crear un contenedor para ejecutar cualquier paso de un trabajo que todavía no especifique un contenedor. Si tienes pasos que usan tanto acciones de script como de contenedor, las acciones de contenedor se ejecutarán como contenedores hermanos en la misma red con los mismos montajes de volumen.

Si no configura un objeto container, todos los pasos se ejecutarán directamente en el host especificado por runs-on, a menos que un paso haga referencia a una acción configurada para ejecutarse en un contenedor.

Nota: El shell predeterminado para los pasos run dentro de un contenedor es sh en lugar de bash. Esto se puede invalidar con jobs.<job_id>.defaults.run o jobs.<job_id>.steps[*].shell.

Ejemplo: Ejecución de un trabajo dentro de un contenedor

YAML
name: CI
on:
  push:
    branches: [ main ]
jobs:
  container-test-job:
    runs-on: ubuntu-latest
    container:
      image: node:14.16
      env:
        NODE_ENV: development
      ports:
        - 80
      volumes:
        - my_docker_volume:/volume_mount
      options: --cpus 1
    steps:
      - name: Check for dockerenv file
        run: (ls /.dockerenv && echo Found dockerenv) || (echo No dockerenv)

Cuando solo especifique una imagen de contenedor, puede omitir la palabra clave image.

jobs:
  container-test-job:
    runs-on: ubuntu-latest
    container: node:14.16

Definición de la imagen de contenedor

Use jobs.<job_id>.container.image a fin de definir la imagen de Docker que usar como contenedor para ejecutar la acción. El valor puede ser el nombre de imagen de Docker Hub o un nombre de registro.

Definición de credenciales para un registro de contenedores

Si el registro de contenedor de la imagen necesita la autenticación para extraer la imagen, puede usar jobs.<job_id>.container.credentials para establecer un valor map de username y password. Las credenciales son los mismos valores que se proporcionarían al comando docker login.

Ejemplo: definir las credenciales para un registro de contenedores

container:
  image: ghcr.io/owner/image
  credentials:
     username: ${{ github.actor }}
     password: ${{ secrets.github_token }}

Uso de variables de entorno con un contenedor

Usa jobs.<job_id>.container.env para establecer un map de variables de entorno en el contenedor.

Exposición de puertos de red en un contenedor

Use jobs.<job_id>.container.ports para establecer un elemento array de puertos que se exponga en el contenedor.

Montaje de volúmenes en un contenedor

Use jobs.<job_id>.container.volumes para establecer un valor array de volúmenes para que lo use contenedor. Puedes usar volúmenes para compartir datos entre servicios u otros pasos en un trabajo. Puedes especificar volúmenes Docker con nombre, volúmenes Docker anónimos o montajes de enlace en el host.

Para especificar un volumen, especifica la ruta de origen y destino:

<source>:<destinationPath>.

<source> es un nombre de volumen o una ruta absoluta en el equipo host y <destinationPath> es una ruta absoluta en el contenedor.

Ejemplo: Montaje de volúmenes en un contenedor

volumes:
  - my_docker_volume:/volume_mount
  - /data/my_data
  - /source/directory:/destination/directory

Establecimiento de opciones de recursos de contenedor

Use jobs.<job_id>.container.options para configurar opciones adicionales de recursos del contenedor de Docker. Para obtener una lista de opciones, vea "Opciones de docker create".

Advertencia: No se admite la opción --network.