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.

Acciones de GitHub is available with GitHub gratis, GitHub Pro, Equipo de GitHub, Nube de GitHub Enterprise, and GitHub One. Acciones de GitHub is not available for private repositories owned by accounts using legacy per-repository plans. For more information, see "GitHub's products."

En este artículo

Introducción

In this guide, you'll learn about the basic components needed to create and use a packaged Docker container action. To focus this guide on the components needed to package the action, the functionality of the action's code is minimal. The action prints "Hello World" in the logs or "Hello [who-to-greet]" if you provide a custom name.

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.

Self-hosted runners must use a Linux operating system and have Docker installed to run Docker container actions. For more information about the requirements of self-hosted runners, see "About self-hosted runners."

Prerrequisitos

You may find it helpful to have a basic understanding of Acciones de GitHub environment variables and the Docker container filesystem:

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 tu repositorio en tu computadora. Para obtener más información, consulta "Clonar un repositorio".

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

    cd hello-world-docker-action

Crear un Dockerfile

En tu nuevo directorio hello-world-docker-action, crea un nuevo archivo Dockerfile.

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 acción

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

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. In order for GitHub to recognize output variables, you must use a workflow command in a specific syntax: echo "::set-output name=<output name>::<value>". For more information, see "Workflow commands for Acciones de GitHub."

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

  2. Make sure to make your entrypoint.sh file executable:

    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. For more information, see "Setting exit codes for actions."

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 gran manera para 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 quién saludar. Predeterminado `"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'

Commit, tag, and push your action to GitHub

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

It's best practice to also add a version tag for releases of your action. For more information on versioning your action, see "About actions."

git add action.yml entrypoint.sh Dockerfile README.md
git commit -m "My first action is ready"
git tag -a -m "My first action release" 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 con 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 }}"

From your repository, click the Actions tab, and select the latest workflow run. 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.

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

Pregunta a una persona

¿No puedes encontrar lo que estás buscando?

Contáctanos