Guía rápida de GitHub Actions - Estructura estándar y lista de las acciones más útiles
Un poco sobre las acciones comunes de GitHub y su estructura.
GitHub Actions es una plataforma de automatización y CI/CD dentro de GitHub, utilizada para compilar, probar y desplegar su código basado en eventos como pushes, solicitudes de extracción o en un horario.
Además de GitHub estándar, puede usar GitHub Actions en un servidor Gitea autohospedado.
Este resumen cubre la estructura de GitHub Actions, una breve descripción y las acciones más comunes utilizadas en flujos de trabajo de código abierto y comerciales. Las acciones abarcan herramientas oficiales, de la comunidad y de terceros, apoyando la automatización desde construcciones y pruebas hasta despliegue, gestión de lanzamientos, QA y notificaciones.
Estructura de Configuración Básica
Los flujos de trabajo de GitHub Actions se definen en archivos YAML ubicados en el directorio .github/workflows
dentro del repositorio.
name: Nombre del flujo de trabajo
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Configurar Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Ejecutar pruebas
run: npm test
- El bloque on especifica los eventos de disparo.
- Cada job se ejecuta en su propio runner.
- steps pueden ejecutar comandos de shell o llamar a acciones reutilizables.
Componentes Principales del Flujo de Trabajo
Componente | Descripción |
---|---|
Flujo de trabajo | Proceso automatizado (YAML) desencadenado por un evento |
Evento | Actividad que desencadena el flujo de trabajo (push, pull_request, etc.) |
Trabajo | Serie de pasos ejecutados en un runner, puede ejecutarse secuencialmente o en paralelo |
Paso | Cada comando o acción en un trabajo |
Runner | VM o contenedor donde se ejecutan los trabajos |
Acción | Extensión/reutilizable encapsulando una tarea |
Eventos de Desencadenamiento
- push
- pull_request
- schedule (usando sintaxis cron)
- workflow_dispatch (desencadenador manual, permite parámetros de entrada)
- release, issue, etc.
Ejemplo:
on:
push:
branches: [ main ]
workflow_dispatch:
inputs:
environment:
description: 'Entorno de despliegue'
required: true
default: 'producción'
type: string
Acciones Útiles Preinstaladas
Acción | Propósito | Parámetros Comunes |
---|---|---|
actions/checkout | Ver código del repositorio | ref, token, submodules, persist-credentials |
actions/setup-node | Configurar entorno de Node.js | node-version, cache, architecture, check-latest |
actions/setup-python | Configurar Python | python-version, architecture |
actions/cache | Cachear dependencias | path, key, restore-keys |
docker/build-push-action | Construir y empujar imágenes Docker | context, file, platforms, tags, push, build-args |
actions/upload-artifact | Subir artefactos de construcción | name, path, if-no-files-found |
actions/download-artifact | Descargar artefactos | name, path |
github/email-actions | Enviar notificaciones por correo electrónico | to, subject, content, attachments |
peter-evans/create-pull-request | Crear PRs a través de flujo de trabajo | branch, title, body, labels, base |
actions/github-script | Ejecutar JavaScript arbitrario en su flujo de trabajo | script, github-token |
Parámetros de Acción
Parámetros Generales para Cualquier Llamada de Acción:
- name: Alguna Acción o Paso
uses: owner/repo@ref
with:
param1: valor
param2: valor
env:
ENV_VAR: valor
if: ${{ condición }}
run: comando_a_ejecutar
shell: bash|pwsh|python|sh
continue-on-error: true|false
- with: argumentos pasados a la acción (ver documentación de la acción para todas las opciones)
- env: variables de entorno para el paso
- if: ejecución condicional
- run: comandos de shell (si no se usa una acción)
- shell: shell usado para ejecutar el paso
- continue-on-error: continuar incluso si el paso falla
Definir Entradas de Acción Personalizadas
En su metadatos de acción (action.yml):
inputs:
example-input:
description: 'Un ejemplo de entrada'
required: false
default: 'valor-por-defecto'
Cuando se usa en un flujo de trabajo:
- uses: my/action@v1
with:
example-input: 'valor-personalizado'
Accedido como variable de entorno INPUT_EXAMPLE_INPUT
cuando se ejecuta la acción.
Ejemplo: Flujo de Trabajo con Parámetros Manuales
name: Desplegar
on:
workflow_dispatch:
inputs:
environment:
description: 'Entorno de despliegue'
required: true
default: 'producción'
type: string
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Ver código
uses: actions/checkout@v4
- name: Desplegar en entorno
run: echo "Desplegando en ${{ github.event.inputs.environment }}"
Mercado de Acciones
- Hay miles de acciones reutilizables disponibles en el Mercado de GitHub.
- Categorías incluyen: despliegues en la nube, herramientas de notificación, marcos de prueba, análisis de código y más.
- Explorar: actions/checkout, actions/setup-node, docker/build-push-action, actions/cache, actions/upload-artifact, y muchos otros.
Consejos Rápidos
- Coloque los archivos de flujo de trabajo en
.github/workflows
. - Use workflow_dispatch con inputs para ejecuciones manuales y parametrizadas.
- Use la acción cache para acelerar la instalación de dependencias.
- Use la matriz de trabajo para probar múltiples versiones de OS/entorno de ejecución.
- Use secretos para datos sensibles, referenciados como
${{ secrets.NOMBRE_DEL_SECRETO }}
.
Este resumen cubre los fundamentos de usar, configurar y extender GitHub Actions para automatización, CI/CD y más. Para más detalles y actualizaciones, siempre consulte la documentación oficial de GitHub y los repositorios de acción.
Acciones de GitHub Comunes
Aquí hay una lista práctica de acciones de GitHub frecuentemente usadas que ayudan a automatizar CI/CD, pruebas, construcción, despliegue y tareas de flujo de trabajo:
Acciones Oficiales Principales
Acción | Propósito | Parámetros Clave |
---|---|---|
actions/checkout | Ver código del repositorio | ref, submodules |
actions/setup-node | Configurar entorno de Node.js | node-version, cache |
actions/setup-python | Configurar entorno de Python | python-version |
actions/setup-java | Configurar JDK de Java | distribution, java-version |
actions/cache | Cachear dependencias y salidas de construcción | path, key, restore-keys |
actions/upload-artifact | Subir artefactos de construcción | name, path |
actions/download-artifact | Descargar artefactos desde el flujo de trabajo | name, path |
actions/github-script | Ejecutar JavaScript usando el contexto y API de GitHub | script |
actions/create-release | Crear un lanzamiento de GitHub | tag_name, release_name |
actions/upload-release-asset | Subir activos a un lanzamiento | upload_url, asset_path |
actions/labeler | Aplica automáticamente etiquetas a issues/PRs | repo-token, configuration-path |
Acciones Comunitarias y de Terceros Populares
Acción | Propósito |
---|---|
docker/build-push-action | Construir y empujar imágenes Docker |
actions/setup-go | Configurar entorno de Go |
super-linter/super-linter | Linteo automático universal de código |
trufflesecurity/trufflehog | Escanear para secretos y credenciales |
peaceiris/actions-gh-pages | Desplegar sitios estáticos a GitHub Pages |
JamesIves/github-pages-deploy-action | Desplegar proyectos a GitHub Pages |
peter-evans/create-pull-request | Crear solicitudes de extracción automáticamente |
softprops/action-gh-release | Crear y subir lanzamientos de GitHub |
ad-m/github-push-action | Empujar cambios de vuelta al repositorio de GitHub |
actions/setup-dotnet | Configurar SDK de .NET |
azure/login | Autenticarse en Azure |
google-github-actions/auth | Autenticarse en Google Cloud |
Acciones de Pruebas, QA y Reportes
Acción | Propósito |
---|---|
actions/setup-ruby | Configurar entorno de Ruby |
codecov/codecov-action | Subir informes de cobertura de código a Codecov |
coverallsapp/github-action | Subir resultados de cobertura a Coveralls |
dorny/test-reporter | Adjuntar resultados de pruebas a GitHub Checks |
stefanzweifel/git-auto-commit-action | Auto-commitear y empujar cambios de archivos |
Acciones de Despliegue y Notificación
Acción | Propósito |
---|---|
appleboy/scp-action | Subir archivos usando SCP |
SamKirkland/FTP-Deploy-Action | Desplegar archivos a través de FTP/FTPS |
cypress-io/github-action | Ejecutar pruebas de extremo de Cypress |
slackapi/slack-github-action | Enviar mensajes a Slack |
dawidd6/action-send-mail | Enviar correos durante las ejecuciones del flujo de trabajo |
Acciones de Utilidad y Gestión de Flujo de Trabajo
Acción | Propósito |
---|---|
peter-evans/repository-dispatch | Desencadenar flujos de trabajo en repositorios externos |
fregante/setup-git-user | Establecer credenciales de usuario de Git para commits |
andymckay/labeler | Etiquetar issues y PRs según rutas |
actions/configure-pages | Configurar publicación a GitHub Pages |
EndBug/add-and-commit | Agregar y commitear archivos dentro de un flujo de trabajo |
dangoslen/changelog-enforcer | Verificar si un changelog fue actualizado para PRs |
Cómo Encontrar Más
Hay muchas GurHub Actions que permiten la automatización de flujos de trabajo como pruebas automatizadas, despliegue a producción, notificaciones e integraciones con otros servicios. El Mercado de GitHub lista miles de acciones en categorías como pruebas, seguridad, despliegue, notificaciones, calidad del código e integraciones. Listas curadas como “Awesome Actions” también son excelentes para inspiración y descubrimiento.
Enlaces Útiles
- https://docs.github.com/actions
- https://github.com/marketplace
- https://docs.github.com/en/actions/get-started/quickstart
- https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
- Hoja de Trucos de Git
- Gitea - instalación y pruebas
- Respuesta y copia de seguridad del servidor Gitea
- Usando Gitea Actions para desplegar un sitio web de Hugo a AWS S3
- Gitflow: Pasos, Alternativas, Ventajas y Desventajas
- DevOps con GitOps - Argo CD, Flux, Jenkins X, Weave GitOps y otros