Frecuentemente publicamos actualizaciones de nuestra documentación. Es posible que la traducción de esta página esté en curso. Para conocer la información más actual, visita la documentación en inglés. Si existe un problema con las traducciones en esta página, por favor infórmanos.

Crear una acción de contenedor de Docker

Esta guía te muestra los pasos mínimos necesarios para desarrollar una acción de contenedor Docker.

GitHub Actions se encuentra disponible con GitHub Free, GitHub Pro, GitHub Free para organizaciones, GitHub Team, GitHub Enterprise Cloud, y GitHub One. GitHub Actions no se encuentra disponible para repositorios privados que pertenezcan a cuentas que utilicen planes tradicionales por repositorio. Para obtener más información, consulta la sección "Productos de GitHub".

En este artículo

Introducción

Esta guía te muestra los pasos mínimos necesarios para desarrollar una acción de contenedor de Docker. Para centrar esta guía en los componentes necesarios para empaquetar la acción, la funcionalidad del código de la acción es mínima. La acción imprime "Hello World" en los registros o "Hello [who-to-greet]"si proporcionas un nombre personalizado.

Una vez que completes este proyecto, deberías comprender cómo crear tu propia acción de contenedor Docker y probarla en un flujo de trabajo.

Los ejecutores auto-hospedados deberán utilizar un sistema operativo Linux y tener Docker instalado para ejecutar las acciones de contenedores de Docker. Para obtener más información acerca de los requisitos de los ejecutores auto-hospedados, consulta la sección "Acerca de los ejecutores auto-hospedados".

Prerrequisitos

Puede resultar útil tener un conocimiento básico de las variables de entorno de las GitHub Actions y del sistema de archivos del contenedor de Docker:

Antes de comenzar, necesitarás crear un repositorio GitHub.

  1. Crea un repositorio nuevo en GitHub. Puedes elegir cualquier nombre de repositorio o usar "hello-world-docker-action" como este ejemplo. Para obtener más información, consulta "Crear un repositorio nuevo".

  2. Clona el repositorio en tu computadora. Para obtener más información, consulta "Clonar un repositorio".

  3. Desde tu terminal, cambia los directorios en el repositorio nuevo.

    cd hello-world-docker-action

Crear un Dockerfile

En tu nuevo directorio hello-world-docker-action, crea un nuevo archivo Dockerfile. Para obtener más información, consulta al "Sporte de Dockerfile para GitHub Actions".

Dockerfile

# Imagen del contenedor que ejecuta tu código
FROM alpine:3.10

# Copias tu archivo de código de tu repositorio de acción a la ruta `/`del contenedor
COPY entrypoint.sh /entrypoint.sh

# Archivo del código a ejecutar cuando comienza el contedor del docker (`entrypoint.sh`)
ENTRYPOINT ["/entrypoint.sh"]

Crear un archivo de metadatos de una acción

Crear un nuevo archivo action.yml en el directorio hello-world-docker que creaste anteriormente. Para obtener más información, consulta la sección "Sintaxis de metadatos para GitHub Actions".

action.yml

# action.yml
name: 'Hello World'
description: 'Greet someone and record the time'
inputs:
  who-to-greet:  # id of input
    description: 'Who to greet'
    required: true
    default: 'World'
outputs:
  time: # id of output
    description: 'The time we greeted you'
runs:
  using: 'docker'
  image: 'Dockerfile'
  args:
    - ${{ inputs.who-to-greet }}

Este metado define un parámetro de entrada who-to-greet y uno de salida time. Para pasar las entradas al contenedor Docker, debes declarar la entrada usando inputs y pasar la entrada a la palabra clave args.

GitHub creará una imagen desde tu Dockerfile y ejecutar comandos en nuevo contenedor usando esta imagen.

Escribir el código de la acción

Puedes elegir cualquier imagen de Docker base y, por lo tanto, cualquier idioma para tu acción. El siguiente ejemplo de script shell usa la variable de entrada who-to-greet para imprimir "Hello [who-to-greet]" en el archivo de registro.

A continuación, el script obtiene la hora actual y la establece como una variable de salida que pueden usar las acciones que se ejecutan posteriormente en unt rabajo. Para que GitHub reconozca las variables de salida, debes usar un comando de flujo de trabajo en una sintaxis específica: echo ":: set-Output Name =<output name>::<value>". Para obtener más información, consulta "Comandos de flujo de trabajo para GitHub Actions".

  1. Crea un archivo entrypoint.sh nuevo en el directorio hello-world-docker-action.

  2. Convierte tu archivo entrypoint.sh en ejecutable:

    chmod +x entrypoint.sh
  3. Agrega el siguiente código a tu archivo entrypoint.sh.

    entrypoint.sh

    #!/bin/sh -l
    
    echo "Hello $1"
    time=$(date)
    echo "::set-output name=time::$time"

    Si entrypoint.sh se ejecuta sin errores, el estado de la acción se establece en exitoso. También puedes establecer explícitamente códigos de salida en el código de tu acción para proporcionar el estado de una acción. Para obtener más información, consulta la sección "Configurar los códigos de salida para las acciones".

Crear un README

Puedes crear un archivo README para que las personas sepan cómo usar tu acción. Un archivo README resulta más útil cuando planificas el intercambio de tu acción públicamente, pero también es una buena manera de recordarle a tu equipo cómo usar la acción.

En tu directorio <hello-world-docker-action, crea un archivo README.md que especifique la siguiente información:

  • Una descripción detallada de lo que hace la acción.
  • Argumentos necesarios de entrada y salida.
  • Argumentos opcionales de entrada y salida.
  • Secretos que utiliza la acción.
  • Variables de entorno que utiliza la acción.
  • Un ejemplo de cómo usar tu acción en un flujo de trabajo.

README.md

# Acción de docker Hello world

Esta acción imprime "Hello World" o "Hello" + el nombre de una persona a quien saludar en el registro.

## Entradas

### `who-to-greet`

**Obligatorio** El nombre de la persona a quien saludar. Default `"World"`.

## Outputs

### `time`

El tiempo en que lo saludamos.

## Ejemplo de uso

uses: actions/hello-world-docker-action@v1
with:
  who-to-greet: 'Mona the Octocat'

Confirmar, etiquetar y subir tu acción a GitHub

Desde tu terminal, confirma tus archivos action.yml, entrypoint.sh, Dockerfile, y README.md.

También se recomienda agregarles una etiqueta de versión a los lanzamientos de tu acción. Para obtener más información sobre el control de versiones de tu acción, consulta la sección "Acerca de las acciones".

git add action.yml entrypoint.sh Dockerfile README.md
git commit -m "Mi primera acción está lista"
git tag -a -m "Mi primera versión de acción" v1
git push --follow-tags

Probar tu acción en un flujo de trabajo

Ahora estás listo para probar tu acción en un flujo de trabajo. Cuando una acción esté en un repositorio privado, la acción solo puede usarse en flujos de trabajo en el mismo repositorio. Las acciones públicas pueden ser usadas por flujos de trabajo en cualquier repositorio.

Ejemplo usando una acción pública

El siguiente código de flujo de trabajo usa la acción completa hello world en el repositorio público actions/hello-world-docker-action. Copia el siguiente código de ejemplo de flujo de trabajo en un archivo .github/workflows/main.yml, pero reemplaza actions/hello-world-docker-action por tu nombre de repositorio y acción. También puedes reemplazar la entrada who-to-greet con tu nombre.

.github/workflows/main.yml

on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
    - name: Hello world action step
      id: hello
      uses: actions/hello-world-docker-action@v1
      with:
        who-to-greet: 'Mona the Octocat'
    # Use the output from the `hello` step
    - name: Get the output time
      run: echo "The time was ${{ steps.hello.outputs.time }}"

Ejemplo usando una acción privada

Copia el siguiente ejemplo de código de flujo de trabajo en un archivo .github/workflows/main.yml en tu repositorio de acción. También puedes reemplazar la entrada who-to-greet con tu nombre.

.github/workflows/main.yml

on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      # To use this repository's private action,
      # you must check out the repository
      - name: Checkout
        uses: actions/checkout@v2
      - name: Hello world action step
        uses: ./ # Uses an action in the root directory
        id: hello
        with:
          who-to-greet: 'Mona the Octocat'
      # Use the output from the `hello` step
      - name: Get the output time
        run: echo "The time was ${{ steps.hello.outputs.time }}"

Desde tu repositorio, da clic en la pestaña de Acciones y selecciona la última ejecución de flujo de trabajo. Deberías ver "Hello Mona the Octocat" o el nombre que usaste para la entrada who-to-greet y la marcación de hora impresa en el registro.

Captura de pantalla del uso de tu acción en un flujo de trabajo

¿Te ayudó este documento?

Privacy policy

Help us make these docs great!

All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.

Make a contribution

O, learn how to contribute.