Saltar al contenido
GitTree
guías de git9 minutos de lectura

Cómo ejecutar GitHub Actions y GitLab CI localmente antes de enviar

Deje de presionar confirmaciones de "arreglar ci" para ver si se aprueba un flujo de trabajo. Ejecute los mismos trabajos en su propia computadora en Docker con act o gitlab-ci-local, en minutos, luego presione una vez. Incluye una muestra lista para ejecutar y un recorrido visual.

Escrito por Kodmora

La casa de software detrás de GitTree

Publicado Actualizado
  • CI/CD
  • GitHub
En esta página

Puede ejecutar GitHub Actions en su propia computadora con `act` y GitLab CI con gitlab-ci-local: ambos leen el archivo de canalización e inician cada trabajo en un contenedor Docker. Instale Docker, instale el ejecutor y luego ejecute act -j test o gitlab-ci-local test desde la carpeta del repositorio. Un trabajo fallido ahora falla en segundos en su máquina en lugar de después de un impulso y una espera por un ejecutor alojado.

Esta guía cubre qué instalar en macOS, Windows y Linux, los comandos para ambos ejecutores, un flujo de trabajo de muestra que puede copiar, los límites de las ejecuciones locales y los errores que las personas encuentran primero. El tutorial utiliza GitTree, el cliente Git que creamos: su página Canalizaciones locales comprueba lo que ha instalado, escribe un archivo de muestra y prepara el comando exacto para usted. Los canales locales son parte del plan gratuito de GitTree y no necesitan una cuenta de hosting.

¿Por qué ejecutar canalizaciones de CI localmente?

Cada cambio en un archivo de flujo de trabajo es código que no puede probar hasta que se ejecute. Sin un corredor local, el ciclo es: editar el YAML, confirmar, enviar, esperar un corredor, leer el registro, repetir. Cada ronda cuesta minutos y deja un rastro de confirmaciones como "inténtalo de nuevo". Una ejecución local acorta el ciclo a segundos y mantiene limpio el historial.

Enviar y esperar en comparación con una carrera local
Envía y esperaEjecutar localmente
tiempo de retroalimentaciónMinutos por intento, más tiempo de colaSegundos una vez que se extrae la imagen.
Se necesitan commitsUno por intentoNinguno hasta que pase
Utiliza minutos de CI alojadossiNo
Mismo entorno que la CI de producciónsiCercanos, no idénticos (contenedores, sin secretos alojados)
Funciona sin conexiónNoSí, después de la primera extracción de imagen.

Lo que necesitas: Docker más un corredor

Ambos ejecutores inician cada trabajo en un contenedor, por lo que se debe instalar y ejecutar un motor Docker: Docker Desktop, OrbStack o Colima en macOS, Docker Desktop en Windows, Docker Engine o Docker Desktop en Linux. Luego instale el corredor para su archivo.

Cómo instalar cada corredor
corredorarchivo de canalizaciónmacOSWindowsLinux
act.github/workflows/*.ymlbrew install actwinget install nektos.actEl script de instalación en nektosact.com
gitlab-ci-local.gitlab-ci.ymlnpm install -g gitlab-ci-localEl .exe de sus versiones GitHub, en PATHnpm install -g gitlab-ci-local

gitlab-ci-local necesita Node.js 18 o posterior cuando lo instala con npm. Verifique la configuración con docker info, act --version y gitlab-ci-local --version: si docker info falla, arranque el motor antes que nada.

Ejecute GitHub Actions localmente con act

Ejecute act desde la carpeta raíz del repositorio. Primero enumere los trabajos y luego ejecute el que está trabajando. De forma predeterminada, act simula un evento push, por lo que los trabajos que solo se ejecutan en otros eventos necesitan el nombre del evento.

# list workflows and jobs
act -l

# run one job from one workflow file
act -W .github/workflows/ci.yml -j test

# simulate a pull request instead of a push
act pull_request -j test

# pass a secret the job needs
act -j deploy -s NPM_TOKEN="$NPM_TOKEN"

# Apple silicon: run x86_64 images
act -j test --container-architecture linux/amd64

La primera ejecución pregunta qué imagen de corredor usar. Medio se adapta a la mayoría de los proyectos; las imágenes pequeñas omiten las herramientas que incluyen los corredores alojados y la imagen completa es muy grande. Si un paso falla con "comando no encontrado", elija una imagen más grande con -P ubuntu-latest=<image> o instale la herramienta en un paso.

Ejecute GitLab CI localmente con gitlab-ci-local

gitlab-ci-local lee .gitlab-ci.yml de la carpeta actual. Sin argumentos, recorre todo el proceso; asígnele un nombre de trabajo para ejecutar un trabajo. --list muestra los trabajos sin ejecutarlos, una forma rápida de comprobar que YAML analiza.

# list jobs and stages
gitlab-ci-local --list

# run one job
gitlab-ci-local test

# pass a CI/CD variable
gitlab-ci-local test --variable API_URL=http://localhost:8080

Ejecute una canalización localmente desde GitTree, paso a paso

  1. Abrir CI/CD

    Abra su repositorio y presione CI/CD en la barra de herramientas. Sin una cuenta conectada o Pro, la vista se abre en Canalizaciones locales; con uno, Ejecutar localmente… está en su encabezado. También puede utilizar Herramientas → Preparar canalización local.

  2. Consulta lo que necesitas

    Lo que necesitas muestra Docker, act y gitlab-ci-local como Encontrado con sus rutas o No encontrado con el comando de instalación para tu sistema, además de la confianza del repositorio y el shell de tu terminal. Instala lo que falta y presiona Check again.

  3. Agregue una muestra o use su archivo

    Los archivos de canalización en este repositorio enumeran sus flujos de trabajo con Listo para ejecutar o el motivo por el que no se pueden ejecutar. Sin ninguno, Agregar GitHub Actions muestra o Agregar GitLab CI muestra escribe un archivo inicial comentado y lo abre; GitTree nunca escribe sobre un archivo existente.

  4. Preparar y ejecutar

    Presione Ejecutar localmente…, elija el archivo, un trabajo y su shell, luego Preparar comando. Escriba una nueva terminal escribe el comando exacto en una nueva terminal sin presionar Enter: léelo, luego presiona Enter tú mismo.

Canalizaciones locales en GitTree: Docker y acción encontrada, pasos de instalación para lo que falta y el flujo de trabajo de muestra listo para ejecutar.
Canalizaciones locales en GitTree: Docker y acción encontrada, pasos de instalación para lo que falta y el flujo de trabajo de muestra listo para ejecutar.

Un flujo de trabajo de muestra para comenzar

Esta es la forma del ejemplo GitHub Actions de GitTree: dos trabajos, compilados y luego probados, que funcionan igual con act y en GitHub. Reemplace los comandos con los suyos propios.

name: GitTree local check

on:
  push:
  pull_request:
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build
        run: npm ci && npm run build

  test:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - uses: actions/checkout@v4
      - name: Test
        run: npm test

En qué se diferencia una ejecución local de una CI alojada

  • Los secretos y las variables configurados en GitHub o GitLab no están disponibles; pasar los que necesita un trabajo.
  • Contenedores, no máquinas virtuales: los servicios que necesitan systemd, o una máquina virtual completa, no se ejecutan de la misma manera.
  • Las imágenes difieren de los corredores alojados; una herramienta faltante es un paquete faltante, no un flujo de trabajo roto.
  • Los eventos son simulados: act por defecto es push; Los flujos de trabajo, inclusiones y plantillas reutilizables los resuelve el ejecutor, no el editor.
  • Una ejecución local que pasa no es un resultado alojado: acorta el ciclo; su anfitrión todavía tiene la última palabra.

Errores y correcciones comunes

Primeros errores que comete la gente
errorcausaArreglar
No se puede conectar al demonio DockerEl motor no esta funcionandoInicie Docker Desktop, OrbStack, Colima o el servicio Docker
comando no encontrado dentro de un pasoLa imagen del corredor carece de la herramienta.Utilice una imagen más grande con -P o instálela en un paso
Un trabajo nunca se ejecuta con actact simula push; el trabajo escucha otro eventoPase el evento, por ejemplo act pull_request
error de formato ejecutivo en Apple SiliconUna imagen x86_64 en un arm64 MacAñadir --container-architecture linux/amd64
Un secreto está vacíoLos secretos alojados no son localesPásalo con -s o --secret-file (act), --variable (gitlab-ci-local)

Antes de presionar: predice conflictos, busca secretos, obtén una vista previa del impulso

Una ejecución de oleoducto local responde a una pregunta: ¿se aprobarán los trabajos? Otras tres comprobaciones detectan lo que CI informa tarde o no informa, y ​​cada una de ellas también se ejecuta en su computadora antes de enviar algo.

  1. Predecir la fusión. git merge-tree --write-tree --name-only HEAD origin/main fusiona en la memoria y enumera los archivos que entrarían en conflicto, sin tocar su árbol de trabajo. GitTree realiza el mismo tipo de verificación y advierte antes de una fusión que pueda entrar en conflicto; consulte cómo resolver conflictos de fusión de Git.
  2. Compruebe si hay secretos. Antes de una confirmación o un envío, GitTree escanea el cambio localmente en busca de posibles tokens, contraseñas y claves privadas y se detiene con un cuadro de diálogo si encuentra uno. Un secreto que llega al mando hay que girarlo, por lo que el momento más barato para coger uno es antes del push. Una advertencia no es una garantía, así que revisa lo que envías.
  3. Vista previa del envío. La vista previa del envío enumera las confirmaciones y los archivos que el envío enviaría y, para cada archivo de flujo de trabajo que puede leer, si una canalización se ejecutará, puede ejecutarse o no se ejecutará en este envío, con el motivo.

Luego ejecute el trabajo localmente y presione una vez. La guía de advertencias secretas y la guía de vista previa del envío cubren ambos cuadros de diálogo en detalle.

¿Qué pasa con Bitbucket Pipelines y Azure Pipelines?

No hay ningún corredor local mantenido para bitbucket-pipelines.yml o azure-pipelines.yml que coincida con act o gitlab-ci-local. Un enfoque práctico es mantener los comandos de compilación y prueba en scripts, llamarlos desde su canal alojado y agregar un pequeño archivo GitHub Actions o GitLab CI solo para ejecuciones locales. GitTree marca esos archivos como Sin corredor local y ofrece muestras exactamente para esto.

Próximos pasos: la Guía de ejecución de canalizaciones localmente documenta cada botón, Ejecuciones de CI/CD cubre ejecuciones hospedadas, reejecuciones y aprobaciones, y el Lanzador de herramientas enumera las otras herramientas integradas de GitTree.

Preguntas frecuentes

¿Puedo ejecutar GitHub Actions localmente?

Sí. act lee tus archivos de flujo de trabajo y ejecuta cada trabajo en un contenedor Docker en tu computadora. Instale Docker y act, luego ejecute act -j <job> desde la carpeta del repositorio.

¿act necesita Docker?

Sí. act inicia cada trabajo en un contenedor Docker, por lo que se debe instalar y ejecutar un motor Docker como Docker Desktop, OrbStack, Colima o Docker Engine.

¿Cómo pruebo GitLab CI localmente?

Instale gitlab-ci-local, inicie Docker, luego ejecute gitlab-ci-local --list para verificar los trabajos y gitlab-ci-local <job> para ejecutar uno. Asigne a cada trabajo un image: para que se ejecute en un contenedor.

¿Cómo paso secretos a act?

Utilice -s NAME=value para un secreto o --secret-file para un archivo de ellos. Mantenga ese archivo fuera del repositorio con .gitignore.

¿Una carrera local es lo mismo que el corredor de GitHub?

Cercano, no idéntico. Las ejecuciones locales utilizan contenedores y sus propias imágenes y secretos, por lo que algunos pasos se comportan de manera diferente. Úselos para acortar el ciclo de retroalimentación y deje que su anfitrión tome la decisión final.

¿Necesito GitTree Pro para ejecutar canalizaciones localmente?

No. Las canalizaciones locales son parte del plan gratuito de GitTree y no necesitan una cuenta de alojamiento. Las ejecuciones, reejecuciones y aprobaciones de CI/CD alojados son parte de Pro.

Fuentes

Las afirmaciones sobre otros productos se compararon con sus páginas oficiales el 11 de noviembre de 2026. Los precios y las características cambian; Las páginas de los proveedores son la fuente de la verdad.