Esta versión de GitHub Enterprise se discontinuó el 2021-09-23. No se realizarán lanzamientos de patch, ni siquiera para problemas de seguridad críticos. Para obtener un mejor desempeño, más seguridad y nuevas características, actualiza a la última versión de GitHub Enterprise. Para obtener ayuda con la actualización, contacta al soporte de GitHub Enterprise.

Migrar de Azure Pipelines a GitHub Actions

GitHub Actions y Azure Pipelines comparten varias configuraciones similares, lo cual hace que migrar a GitHub Actions sea relativamente sencillo.

Nota: GitHub Actions estuvo disponible para GitHub Enterprise Server 2.22 como un beta limitado. El beta terminó. GitHub Actions está ahora disponible habitualmente en GitHub Enterprise Server 3.0 o superior. Para obtener más información, consulta la sección de notas de lanzamiento para GitHub Enterprise Server 3.0.


Nota: Los ejecutores hospedados en GitHub no son compatibles con GitHub Enterprise Server actualmente. Puedes encontrar más información sobre el soporte que se tiene planeado en el futuro en el Itinerario público de GitHub.

Introducción

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

  • Los archivos de configuración de flujo de trabajo están escritas en YAML y se almacenan en el repositorio del código.
  • Los flujos de trabajo incluyen uno o más jobs.
  • Los jobs incluyen uno o más pasos o comandos individuales.
  • 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

Cuando migres desde Azure Pipelines, considera las siguientes diferencias:

  • Azure Pipelines soporta un editor clásico tradicional, lo cual te permite definir tu configuración de IC en un editor de GUI en vez de crear la definición de mapa en un archivo YAML. GitHub Actions utiliza archivos YAML para definir flujos de trabajo y no es compatible con un editor gráfico.
  • Azure Pipelines te permite omitir parte de la estructura en las definiciones de jobs. Por ejemplo, si solo tienes un job, no necesitas definirlo y solo necesitas definir sus pasos. GitHub Actions requiere una configuración específica y no se puede omitir la estructura de YAML.
  • Azure Pipelines es compatible con las etapas que se definen en el archivo YAML, las cuales se pueden utilizar para crear flujos de trabajo de despliegue. GitHub Actions necesita que separes las etapas en archivos de flujo de trabajo de YAML diferentes.
  • Azure Pipelines instalado localmente compila agentes que pueden seleccionarse con capacidades. Los ejecutores auto-hospedados de GitHub Actions pueden seleccionarse con etiquetas.

Migrar jobs y pasos

Los jobs y los pasos en Azure Pipelines son muy similares a aquellos en GitHub Actions. En ambos sistemas, los jobs tienen las siguientes características:

  • Los jobs contienen una serie de pasos que se ejecutan en secuencia.
  • Los jobs se ejecutan en máquinas virtuales separadas o en contenedores separados.
  • Los jobs se ejecutan en paralelo predeterminadamente, pero pueden configurarse para ejecutarse en secuencia.

Migrar los pasos de un script

Puedes ejecutar un script o comando de shell como un paso en un flujo de trabajo. En Azure Pipelines, los pasos de un script pueden especificarse utilizando la clave script, o con las claves bash, powershell, o pwsh. Los scripts también pueden especificarse como una entrada a la tarea Bash o la tarea PowerShell.

En GitHub Actions, todos los scripts se especifican utilizando la clave run. Para seleccionar un shell en particular, puedes especificar la clave shell cuando proporciones el script. Para obtener más información, consulta la sección "Sintaxis de flujo de trabajo para GitHub Actions".

Puedes encontrar un ejemplo de la sintaxis para cada sistema:

Azure Pipelines GitHub Actions
jobs:
  - job: scripts
    pool:
      vmImage: 'windows-latest'
    steps:
      - script: echo "This step runs in the default shell"
      - bash: echo "This step runs in bash"
      - pwsh: Write-Host "This step runs in PowerShell Core"
      - task: PowerShell@2
        inputs:
          script: Write-Host "This step runs in PowerShell"
jobs:
  scripts:
    runs-on: windows-latest
    steps:
      - run: echo "This step runs in the default shell"
      - run: echo "This step runs in bash"
        shell: bash
      - run: Write-Host "This step runs in PowerShell Core"
        shell: pwsh
      - run: Write-Host "This step runs in PowerShell"
        shell: powershell

Diferencias en el manejo de errores de los scripts

En Azure Pipelines, los scripts se pueden configurar para generar un error si cualquier salida se envía a stderr. GitHub Actions no es compatible con esta configuración.

GitHub Actions configura shells para que "fallen rápidamente" cuando sea posible, lo cual detiene el script inmediatamente si alguno de los comandos en éste sale con un código de error. En contraste, Azure Pipelines requiere de una configuración explícita para salir inmediatamente en caso de error. Para obtener más información, consulta la sección "Sintaxis de flujo de trabajo para GitHub Actions".

Diferencias con el shell predeterminado de Windows

En Azure Pipelines, el shell predeterminado para los scripts en plataformas Windows es el Símbolo de Sistema (cmd.exe). En GitHub Actions, el shell predeterminado para los scripts en plataformas Windows es PowerShell. PowerShell tiene varias diferencias en comandos integrados, expansión de variables y control de flujo.

Si estás utilizando un comando simple, es posible que puedas ejecutar un script de Símbolo de Sistema en PowerShell sin tener que realizar cambios. Pero en la mayoría de los casos, tendrás que actualizar tu script con la sintaxis de PowerShell o dar la instrucción a GitHub Actions para ejecutar el script con el Símbolo de Sistema en vez de con PowerShell. Puedes hacer esto especificando shell como cmd.

Puedes encontrar un ejemplo de la sintaxis para cada sistema:

Azure Pipelines GitHub Actions
jobs:
  - job: run_command
    pool:
      vmImage: 'windows-latest'
    steps:
      - script: echo "This step runs in CMD on Windows by default"
jobs:
  run_command:
    runs-on: windows-latest
    steps:
      - run: echo "This step runs in PowerShell on Windows by default"
      - run: echo "This step runs in CMD on Windows explicitly"
        shell: cmd

Para obtener más información, consulta la sección "Sintaxis de flujo de trabajo para GitHub Actions".

Migrar la sintaxis de expresión y los condicionales

Tanto Azure Pipelines como GitHub Actions pueden ejecutar pasos condicionalmente. En Azure Pipelines, las expresiones condicionales se especifican utilizando la clave condition. En GitHub Actions, las expresiones condicionales se especifican utilizando la clave if.

Azure Pipelines utiliza funciones dentro de las expresiones para ejecutar los pasos condicionalmente. En contraste, GitHub Actions utiliza una notación infija. Por ejemplo, puedes reemplazar la función eq en Azure Pipelines con el operador == en GitHub Actions.

Puedes encontrar un ejemplo de la sintaxis para cada sistema:

Azure Pipelines GitHub Actions
jobs:
  - job: conditional
    pool:
      vmImage: 'ubuntu-latest'
    steps:
      - script: echo "This step runs with str equals 'ABC' and num equals 123"
        condition: and(eq(variables.str, 'ABC'), eq(variables.num, 123))
jobs:
  conditional:
    runs-on: ubuntu-latest
    steps:
      - run: echo "This step runs with str equals 'ABC' and num equals 123"
        if: ${{ env.str == 'ABC' && env.num == 123 }}

Para obtener más información, consulta la sección "Expresiones".

Dependencias entre jobs

Tanto Azure Pipelines como GitHub Actions te permiten configurar dependencias par un job. En ambos sistemas, los jobs se ejecutan en paralelo predeterminadamente, pero las dependencias de estos pueden especificarse explícitamente. En Azure Pipelines, esto se hace con la clave dependsOn. En GitHub Actions, esto se hace con la clave needs.

Puedes encontrar un ejemplo de la sintaxis para cada sistema. El flujo de trabajo comienza un primer job llamado initial, y cuando este job se completa, se ejecutarán dos jobs llamados fanout1 y fanout2. Finalmente, cuando se completen estos dos jobs, se ejecutará el job fanin.

Azure Pipelines GitHub Actions
jobs:
  - job: initial
    pool:
      vmImage: 'ubuntu-latest'
    steps:
      - script: echo "This job will be run first."
  - job: fanout1
    pool:
      vmImage: 'ubuntu-latest'
    dependsOn: initial
    steps:
      - script: echo "This job will run after the initial job, in parallel with fanout2."
  - job: fanout2
    pool:
      vmImage: 'ubuntu-latest'
    dependsOn: initial
    steps:
      - script: echo "This job will run after the initial job, in parallel with fanout1."
  - job: fanin:
    pool:
      vmImage: 'ubuntu-latest'
    dependsOn: [fanout1, fanout2]
    steps:
      - script: echo "This job will run after fanout1 and fanout2 have finished."
jobs:
  initial:
    runs-on: ubuntu-latest
    steps:
      - run: echo "This job will be run first."
  fanout1:
    runs-on: ubuntu-latest
    needs: initial
    steps:
      - run: echo "This job will run after the initial job, in parallel with fanout2."
  fanout1:
    runs-on: ubuntu-latest
    needs: initial
    steps:
      - run: echo "This job will run after the initial job, in parallel with fanout2."
  fanin:
    runs-on: ubuntu-latest
    needs: [fanout1, fanout2]
    steps:
      - run: echo "This job will run after fanout1 and fanout2 have finished."

Para obtener más información, consulta la sección "Sintaxis de flujo de trabajo para GitHub Actions".

Migrar las tareas a acciones

Azure Pipelines utiliza tareas, que son componentes de las aplicaciones que pueden reutilizarse en varios flujos de trabajo. GitHub Actions utilizaacciones, que se pueden utilizar para realizar tareas y personalizar tu flujo de trabajo. En ambos sistemas, puedes especificar el nombre de la tarea o acción a ejecutar junto con cualquier entrada requerida como pares de clave/valor.

Puedes encontrar un ejemplo de la sintaxis para cada sistema:

Azure Pipelines GitHub Actions
jobs:
  - job: run_python
    pool:
      vmImage: 'ubuntu-latest'
    steps:
      - task: UsePythonVersion@0
        inputs:
          versionSpec: '3.7'
          architecture: 'x64'
      - script: python script.py
jobs:
  run_python:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-python@v2
        with:
          python-version: '3.7'
          architecture: 'x64'
      - run: python script.py

Puedes encontrar acciones que puedas utilizar en tu flujo de trabajo en GitHub Marketplace, o puedes crear tus propias acciones. Para obtener más información, consulta la sección "Crear acciones".