Skip to main content

Esta versión de GitHub Enterprise se discontinuará el 2022-10-12. No se realizarán lanzamientos de patch, ni siquiera para problemas de seguridad críticos. Para obtener rendimiento mejorado, seguridad mejorada y nuevas características, actualice a la versión más reciente de GitHub Enterprise. Para obtener ayuda con la actualización, póngase en contacto con el soporte técnico de GitHub Enterprise.

Migrar de Jenkins a GitHub Actions

GitHub Actions y Jenkins comparten varias similaridades, lo cual hace que migrar a GitHub Actions sea relativamente sencillo.

Nota: Actualmente los ejecutores hospedados en GitHub no se admiten en GitHub Enterprise Server. Puede ver más información sobre la compatibilidad futura planeada en GitHub public roadmap.

Introducción

Tanto Jenkins como GitHub Actions te permiten crear flujos de trabajo que compilan, prueban, publican, lanzan y despliegan código automáticamente. Jenkins y GitHub Actions comparten algunas similaridades en la configuración del flujo de trabajo:

  • Jenkins crea flujos de trabajo mediante Canalizaciones declarativas, que son similares a los archivos de flujo de trabajo de GitHub Actions.
  • Jenkins usa fases para ejecutar un conjunto de pasos, mientras que GitHub Actions utiliza trabajos para agrupar uno o mas pasos, o comandos individuales.
  • Jenkins y GitHub Actions son compatibles con compilaciones basadas en el contenedor. Para más información, vea "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, vea "Conceptos básicos de GitHub Actions".

Diferencias clave

  • Jenkins tiene dos tipos de sintaxis para crear mapas: Mapa Declarativo y Mapa de Script. GitHub Actions utiliza YAML para crear flujos de trabajo y archivos de configuración. Para más información, vea "Sintaxis de 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 acercamiento híbrido en la nube, hospedando sus propios ejecutores que puedes utilizar para ejecutar jobs, mientras que también son compatibles con ejecutores auto-hospedados. Para más información, vea Acerca de los 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.

De forma similar, las GitHub Actions pueden enviar jobs a los ejecutores auto-hospedados u hospedados en GitHub, y puedes utilizar etiquetas para clasificar los ejecutores de acuerdo con diversos atributos. Para más información, vea "Descripción de GitHub Actions" y "Acerca de los ejecutores autohospedados".

Utilizar secciones para organizar mapas

Jenkins divide sus Mapas Declarativos en varias secciones. De forma similar, las GitHub Actions organizan sus flujos de trabajo en secciones separadas. En esta tabla se comparan las secciones de Jenkins con el flujo de trabajo de GitHub Actions.

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

Directivas Using

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. La tabla siguiente demuestra cómo dichas directivas mapean los conceptos en 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
toolsEspecificaciones para ejecutores hospedados en GitHub
inputinputs
whenjobs.<job_id>.if

Utilizar etapas secuenciales

Proceso paralelo de jobs

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 te permiten utilizar una matriz para definir diversas combinaciones de sistema.

JenkinsGitHub Actions
axisstrategy/matrix
context
stagessteps-context
excludes

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. De forma similar, GitHub Actions usa jobs para ejecutar grupos específicos de steps.

Pasos de JenkinsGitHub Actions
scriptjobs.<job_id>.steps

Ejemplos de tareas comunes

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

Mapa de Jenkins Flujo de trabajo de GitHub Actions
pipeline {
  agent any
  triggers {
    cron('H/15 * * * 1-5')
  }
}
on:
  schedule:
    - cron: '*/15 * * * 1-5'

Configurar variables de ambiente en un mapa

Mapa de Jenkins Flujo de trabajo de GitHub Actions
pipeline {
  agent any
  environment {
    MAVEN_PATH = '/usr/local/maven'
  }
}
jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'

Compilar desde proyectos ascendentes

Mapa de Jenkins Flujo de trabajo de GitHub Actions
pipeline {
  triggers {
    upstream(
      upstreamProjects: 'job1,job2',
      threshold: hudson.model.Result.SUCCESS
    )
  }
}
jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]

Compilar con sistemas operativos múltiples

Mapa de Jenkins Flujo de trabajo de GitHub Actions
pipeline {
  agent none
  stages {
    stage('Run Tests') {
      matrix {
        axes {
          axis {
            name: 'PLATFORM'
            values: 'macos', 'linux'
          }
        }
        agent { label "${PLATFORM}" }
        stages {
          stage('test') {
            tools { nodejs "node-12" }
            steps {
              dir("scripts/myapp") {
                sh(script: "npm install -g bats")
                sh(script: "bats tests")
              }
            }
          }
        }
      }
    }
  }
}
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@v2
      - uses: actions/setup-node@v2
        with:
          node-version: 12
      - run: npm install -g bats
      - run: bats tests
        working-directory: scripts/myapp