Introducción
En esta guía, aprenderás acerca de los componentes básicos necesarios para crear y usar una acción compuesta empaquetada. 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" y después "Goodbye", o si proporcionas un nombre personalizado, imprime "Hello [who-to-greet]" y luego "Goodbye". La acción también asigna un número aleatorio a la variable de salida random-number
y ejecuta un script denominado goodbye.sh
.
Una vez que completes este proyecto, deberías comprender cómo crear tu propia acción compuesta y probarla en un flujo de trabajo.
Warning
Al crear flujos de trabajo y acciones, siempre debe tener en cuenta si el código podría ejecutar una entrada de posibles atacantes que no es de confianza. Se tratará a algunos contextos como una entrada no confiable, ya que un atacante podrían insertar su propio contenido malintencionado. Para obtener más información, vea «Fortalecimiento de seguridad para GitHub Actions».
Acciones compuestas y flujos de trabajo reutilizables
Las acciones de composición permiten recopilar una serie de pasos de trabajo de flujo de trabajo en una sola acción que, a continuación, puedes ejecutar como un único paso de trabajo en varios flujos de trabajo. Los flujos de trabajo reutilizables proporcionan otra manera de evitar la duplicación, ya que permiten ejecutar un flujo de trabajo completo desde otros flujos de trabajo. Para obtener más información, vea «Evitar la duplicación».
Requisitos previos
Antes de comenzar, necesitarás crear un repositorio en GitHub.
-
Crea un repositorio público nuevo en GitHub. Puede elegir cualquier nombre de repositorio o usar el ejemplo
hello-world-composite-action
siguiente. Puedes agregar estos archivos después de que tu proyecto se haya subido a GitHub. Para obtener más información, vea «Crear un repositorio nuevo». -
Clona tu repositorio en tu computadora. Para obtener más información, vea «Clonar un repositorio».
-
Desde tu terminal, cambia los directorios en tu repositorio nuevo.
Shell cd hello-world-composite-action
cd hello-world-composite-action
-
En el repositorio
hello-world-composite-action
, cree un archivo denominadogoodbye.sh
con código de ejemplo:Shell echo "echo Goodbye" > goodbye.sh
echo "echo Goodbye" > goodbye.sh
-
Desde el terminal, convierta
goodbye.sh
en ejecutable.Shell chmod +x goodbye.sh
chmod +x goodbye.sh
chmod +x goodbye.sh
chmod +x goodbye.sh
git add --chmod=+x -- goodbye.sh
git add --chmod=+x -- goodbye.sh
-
Desde el terminal, registre el archivo
goodbye.sh
.Shell git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh
git commit -m "Add goodbye script"
git push
git commit -m "Add goodbye script" git push
git commit -m "Add goodbye script"
git push
Crear un archivo de metadatos de una acción
-
En el repositorio
hello-world-composite-action
, cree un archivo denominadoaction.yml
y agregue el código de ejemplo siguiente. Para más información sobre la sintaxis, consulta "Sintaxis de metadatos para Acciones de GitHub".YAML name: 'Hello World' description: 'Greet someone' inputs: who-to-greet: # id of input description: 'Who to greet' required: true default: 'World' outputs: random-number: description: "Random number" value: ${{ steps.random-number-generator.outputs.random-number }} runs: using: "composite" steps: - name: Set Greeting run: echo "Hello $INPUT_WHO_TO_GREET." shell: bash env: INPUT_WHO_TO_GREET: ${{ inputs.who-to-greet }} - name: Random Number Generator id: random-number-generator run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT shell: bash - name: Set GitHub Path run: echo "$GITHUB_ACTION_PATH" >> $GITHUB_PATH shell: bash env: GITHUB_ACTION_PATH: ${{ github.action_path }} - name: Run goodbye.sh run: goodbye.sh shell: bash
name: 'Hello World' description: 'Greet someone' inputs: who-to-greet: # id of input description: 'Who to greet' required: true default: 'World' outputs: random-number: description: "Random number" value: ${{ steps.random-number-generator.outputs.random-number }} runs: using: "composite" steps: - name: Set Greeting run: echo "Hello $INPUT_WHO_TO_GREET." shell: bash env: INPUT_WHO_TO_GREET: ${{ inputs.who-to-greet }} - name: Random Number Generator id: random-number-generator run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT shell: bash - name: Set GitHub Path run: echo "$GITHUB_ACTION_PATH" >> $GITHUB_PATH shell: bash env: GITHUB_ACTION_PATH: ${{ github.action_path }} - name: Run goodbye.sh run: goodbye.sh shell: bash
Este archivo define la entrada
who-to-greet
, asigna el número generado aleatoriamente a la variable de salidarandom-number
, agrega la ruta de acceso de la acción a la ruta del sistema del ejecutor (para buscar el scriptgoodbye.sh
durante la ejecución) y ejecuta el scriptgoodbye.sh
.Para más información sobre la administración de las salidas, consulta "Sintaxis de metadatos para Acciones de GitHub".
Para más información sobre cómo usar
github.action_path
, consulta "Acceso a información contextual sobre ejecuciones de flujo de trabajo". -
Desde el terminal, registre el archivo
action.yml
.Shell git add action.yml git commit -m "Add action" git push
git add action.yml git commit -m "Add action" git push
-
Desde tu terminal, agrega una etiqueta. En este ejemplo se usa una etiqueta denominada
v1
. Para obtener más información, vea «Acercad e las acciones personalizadas».Shell git tag -a -m "Description of this release" v1 git push --follow-tags
git tag -a -m "Description of this release" v1 git push --follow-tags
Probar tu acción en un flujo de trabajo
En el siguiente código de flujo de trabajo se usa la acción "Hola mundo" completada que has creado en "Crear una acción compuesta".
Copie el código de flujo de trabajo en un archivo .github/workflows/main.yml
de otro repositorio, pero reemplace actions
y SHA
por el propietario del repositorio y el SHA de la confirmación que quiere usar, respectivamente. También puede reemplazar la entrada who-to-greet
por su nombre.
on: [push] jobs: hello_world_job: runs-on: ubuntu-latest name: A job to say hello steps: - uses: actions/checkout@v4 - id: foo uses: OWNER/hello-world-composite-action@SHA with: who-to-greet: 'Mona the Octocat' - run: echo random-number "$RANDOM_NUMBER" shell: bash env: RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}
on: [push]
jobs:
hello_world_job:
runs-on: ubuntu-latest
name: A job to say hello
steps:
- uses: actions/checkout@v4
- id: foo
uses: OWNER/hello-world-composite-action@SHA
with:
who-to-greet: 'Mona the Octocat'
- run: echo random-number "$RANDOM_NUMBER"
shell: bash
env:
RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}
En el repositorio, haga clic en la pestaña Actions y seleccione la última ejecución de flujo de trabajo. La salida deberá incluir "Hello Mona the Octocat", el resultado del script de "Goodbye" y un número aleatorio.
Acciones compuestas de ejemplo en GitHub
Puedes encontrar muchos ejemplos de acciones compuestas en GitHub.