Skip to main content

Migración de Jenkins a Acciones de GitHub

GitHub Actions y Jenkins tienen mucho en común, lo que hace que la migración a GitHub Actions sea relativamente sencilla.

Nota:

Actualmente los ejecutores hospedados por GitHub Enterprise Server no se admiten en GitHub.

Introducción

Jenkins y GitHub Actions ambos le permiten crear flujos de trabajo que compilen, prueben, publiquen, publiquen e implementen código automáticamente. Jenkins y GitHub Actions comparten algunas similitudes en la configuración del flujo de trabajo:

  • Jenkins crea flujos de trabajo mediante canalizaciones declarativas, que son similares a los GitHub Actions archivos de flujo de trabajo.
  • Jenkins usa fases para ejecutar una colección de pasos, mientras que GitHub Actions usa trabajos para agrupar uno o varios pasos o comandos individuales.
  • Jenkins y GitHub Actions admite compilaciones basadas en contenedores. Para más información, consulta Creación de una acción de contenedor de Docker.
  • Los pasos o tareas pueden reutilizarse y compartirse con la comunidad.

Para más información, consulta Descripción de Acciones de GitHub.

Diferencias clave

  • Jenkins tiene dos tipos de sintaxis para crear mapas: Mapa Declarativo y Mapa de Script. GitHub Actions usa YAML para crear flujos de trabajo y archivos de configuración. Para más información, consulta Sintaxis del flujo de trabajo para Acciones de GitHub.
  • Los despliegues de jenkins son típicamente auto-hospedados y los usuarios mantienen los servidores en sus propios centros de datos. GitHub Actions ofrece un enfoque de nube híbrida hospedando sus propios ejecutores que puede usar para ejecutar trabajos, al tiempo que admite ejecutores autohospedados. Para más información, consulta Ejecutores autohospedados.

Comparación de capacidades

Distribuir tus compilaciones

Jenkis te permite enviar compilaciones a un agente de compilación sencilla, o puedes distribuirlas a través de varios agentes. También puedes clasificar estos agentes de acuerdo con diversos atributos, tales como los tipos de sistema operativo.

Del mismo modo, GitHub Actions puede enviar trabajos a ejecutores hospedados en GitHub o autoalojados, y puedes usar etiquetas para clasificar los ejecutores en función de distintos atributos. Para más información, consulta Descripción de Acciones de GitHub y Ejecutores autohospedados.

Utilizar secciones para organizar tuberías

Jenkins divide sus Pipelines Declarativos en varias secciones. Del mismo modo, GitHub Actions organiza sus flujos de trabajo en secciones independientes. La tabla siguiente compara las secciones de Jenkins con el flujo de trabajo GitHub Actions.

Directivas de JenkinsGitHub Actions
agentjobs.<job_id>.runs-on
jobs.<job_id>.container
postNinguno
stagesjobs
stepsjobs.<job_id>.steps

Directivas de Uso

Jenkins usa directivas para administrar Canalizaciones declarativas. Estas directivas definen las características de tu flujo de trabajo y la manera en que se ejecuta. En la tabla siguiente se muestra cómo estas directivas se asignan a conceptos dentro de GitHub Actions.

Directivas de JenkinsGitHub Actions
environmentjobs.<job_id>.env
jobs.<job_id>.steps[*].env
optionsjobs.<job_id>.strategy
jobs.<job_id>.strategy.fail-fast
jobs.<job_id>.timeout-minutes
parametersinputs
outputs
triggerson
on.<event_name>.types
on.<push>.<branches|tags>
on.<pull_request>.<branches>
on.<push|pull_request>.paths
triggers { upstreamprojects() }jobs.<job_id>.needs
Sintaxis cron de Jenkinson.schedule
stagejobs.<job_id>
jobs.<job_id>.name
tools
Especificaciones para GitHubejecutores hospedados
inputinputs
whenjobs.<job_id>.if

Utilizar etapas secuenciales

Procesamiento paralelo de tareas

Jenkins puede ejecutar stages y steps en paralelo, mientras que GitHub Actions actualmente solo ejecuta trabajos en paralelo.

Jenkins en ParaleloGitHub Actions
paralleljobs.<job_id>.strategy.max-parallel

Matriz

Tanto GitHub Actions como Jenkins permiten utilizar una matriz para definir distintas combinaciones del sistema.

JenkinsGitHub Actions
axisstrategy/matrix
context
stagessteps-context
excludesNinguno

Utilizar pasos para ejecutar tareas

Jenkins agrupa steps en stages. Cada uno de estos pasos puede ser un script, función, o comando, entre otros. Del mismo modo, GitHub Actions usa jobs para ejecutar grupos específicos de steps.

JenkinsGitHub Actions
stepsjobs.<job_id>.steps

Ejemplos de tareas comunes

Programación de una canalización para ejecutar con cron

Canalización de Jenkins con cron

pipeline {
  agent any
  triggers {
    cron('H/15 * * * 1-5')
  }
}

GitHub Actions flujo de trabajo con cron

on:
  schedule:
    - cron: '*/15 * * * 1-5'

Para más información sobre los eventos scheduley la sintaxis de cron aceptada, consulta Eventos que desencadenan flujos de trabajo.

Configurar variables de entorno en una canalización

Canalización de Jenkins con una variable de entorno

pipeline {
  agent any
  environment {
    MAVEN_PATH = '/usr/local/maven'
  }
}

GitHub Actions flujo de trabajo con una variable de entorno

jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'

Compilar desde proyectos ascendentes

Canalización de Jenkins que se compila a partir de un proyecto ascendente

pipeline {
  triggers {
    upstream(
      upstreamProjects: 'job1,job2',
      threshold: hudson.model.Result.SUCCESS
    )
  }
}

GitHub Actions flujo de trabajo que se genera a partir de un proyecto de origen

jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]

Construir con múltiples sistemas operativos

Canalización de Jenkins que se compila con varios sistemas operativos

pipeline {
  agent none
  stages {
    stage('Run Tests') {
      matrix {
        axes {
          axis {
            name: 'PLATFORM'
            values: 'macos', 'linux'
          }
        }
        agent { label "${PLATFORM}" }
        stages {
          stage('test') {
            tools { nodejs "node-20" }
            steps {
              dir("scripts/myapp") {
                sh(script: "npm install -g bats")
                sh(script: "bats tests")
              }
            }
          }
        }
      }
    }
  }
}

GitHub Actions flujo de trabajo que se compila con varios sistemas operativos

name: demo-workflow
on:
  push:
jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, ubuntu-latest]
    steps:
      - uses: actions/checkout@v6
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm install -g bats
      - run: bats tests
        working-directory: ./scripts/myapp