Frecuentemente publicamos actualizaciones de nuestra documentación. Es posible que la traducción de esta página esté en curso. Para conocer la información más actual, visita la documentación en inglés. Si existe un problema con las traducciones en esta página, por favor infórmanos.

Migrar de Jenkins a GitHub Actions

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

En este artículo

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 utilizando Mapas Declarativos, los cuales son similares a los archivos de flujo de trabajo de GitHub Actions.
  • Jenkins utiliza etapas para ejecutar un conjunto de pasos, mientras que GitHub Actions utiliza jobs para agrupar uno o mas pasos o comandos individuales.
  • Jenkins y GitHub Actions son compatibles con compilaciones basadas en el contenedor. Para obtener más información, consulta "Crear una acción de contenedor Docker".
  • Los pasos o tareas pueden reutilizarse y compartirse con la comunidad.

Para obtener más información, consulta la sección "Conceptos esenciales para 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 obtener más información, consultala sección "Sintaxis de flujo de trabajo para GitHub Actions".
  • 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 obtener más información, consulta la sección Acerca de los ejecutores auto-hospedados.

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 manera similar, GitHub Actions puede enviar jobs a los ejecutores hospedatos en GitHub o autohospedados, y puedes utilizar etiquetas para clasificarlos de acuerdo a diversos atributos. La siguiente tabla compara cómo se implementa el concepto de compilación distribuido tanto para Jenkins como para GitHub Actions.

JenkinsGitHub Actions
agentsrunners
self-hosted runners

Utilizar secciones para organizar mapas

Jenkins divide sus Mapas Declarativos en varias secciones. De manera similar, GitHub Actions organiza sus flujos de trabajo en secciones diferentes. 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
stagesTrabajos
pasosjobs.<job_id>.steps

Utilizar directivas

Jenkins utiliza directivas para administrar los Mapas Declarativos. 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
entornojobs.<job_id>.env
jobs.<job_id>.steps.env
opcionesjobs.<job_id>.strategy
jobs.<job_id>.strategy.fail-fast
jobs.<job_id>.timeout-minutes
parámetrosinputs
outputs
triggerson
on.<event_name>.types
on.<push|pull_request>.<branches|tags>
on.<push|pull_request>.paths
triggers { upstreamprojects() }jobs.<job_id>.needs
Sintaxis de Jenkins cronon.schedule
etapajobs.<job_id>
jobs.<job_id>.name
toolsSoftware instalado en los ejecutores alojados en GitHub
entradainputs (entrada)
whenjobs.<job_id>.if

Utilizar etapas secuenciales

Proceso paralelo de jobs

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

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

Matriz de compilaciones

Tanto GitHub Actions como Jenkins te permiten utilizar una matriz de compilaciones para definir diversas combinaciones de sistema.

JenkinsGitHub Actions
axisstrategy/matrix
context
stagessteps-context
excludes

Utilizar pasos para ejecutar tareas

Jenkins agrupa los steps en stages. Cada uno de estos pasos puede ser un script, función, o comando, entre otros. De manera similar, GitHub Actions utiliza jobs para ejecutar grupos específicos de steps.

Pasos de JenkinsGitHub Actions
scriptjobs.<job_id>.steps

Ejemplos de tareas comunes

Programar un mapa para ejecutarse 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') {
    parallel {
      stage('Test On MacOS') {
        agent { label "macos" }
        tools { nodejs "node-12" }
        steps {
          dir("scripts/myapp") {
            sh(script: "npm install -g bats")
            sh(script: "bats tests")
          }
        }
      }
      stage('Test On Linux') {
        agent { label "linux" }
        tools { nodejs "node-12" }
        steps {
          dir("script/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@v1
      - uses: actions/setup-node@v1
        with:
          node-version: 12
      - run: npm install -g bats
      - run: bats tests
        working-directory: scripts/myapp

Pregunta a una persona

¿No puedes encontrar lo que estás buscando?

Contáctanos