Skip to main content

Migración de Azure Pipelines a Acciones de GitHub

GitHub Actionsy Azure Pipelines comparten varias similitudes de configuración, lo que hace que la migración a GitHub Actions sea relativamente sencilla.

Introducción

Azure Pipelines y GitHub Actions ambos permiten crear flujos de trabajo que compilen, prueben, publiquen, publiquen e implementen código automáticamente. Azure Pipelines y GitHub Actions comparten algunas similitudes 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 una o más tareas.
  • Los trabajos incluyen uno o más pasos o comandos individuales.
  • 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

Al migrar desde Azure Pipelines, tenga en cuenta las siguientes diferencias:

  • Azure Pipelines admite un editor clásico heredado, que permite definir la configuración de CI en un editor de GUI en lugar de crear la definición de canalización en un archivo YAML. GitHub Actions usa archivos YAML para definir flujos de trabajo y no admite un editor gráfico.
  • Azure Pipelines permite omitir alguna estructura en las definiciones de trabajo. Por ejemplo, si solo tienes un job, no necesitas definirlo y solo necesitas definir sus pasos. GitHub Actions requiere una configuración explícita y no se puede omitir la estructura YAML.
  • Azure Pipelines admite stages definidos en el archivo YAML, que se pueden usar para crear flujos de trabajo de implementación. GitHub Actions requiere separar fases en archivos de flujo de trabajo YAML independientes.
  • Los agentes de compilación locales de Azure Pipelines se pueden seleccionar según sus capacidades. GitHub Actions Los ejecutores autoalojados se pueden seleccionar con etiquetas.

Migrar jobs y pasos

Los trabajos y los pasos de Azure Pipelines son muy similares a los trabajos y pasos de 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 pasos de un script

Puedes ejecutar un script o comando de shell como un paso en un flujo de trabajo. En Azure Pipelines, se pueden especificar pasos de script mediante la clave /> <c1 , o . Los scripts también se pueden especificar como entrada para la tarea de Bash o la tarea de PowerShell.

En GitHub Actions, todos los scripts se especifican mediante la run clave . Para seleccionar un shell determinado, puede especificar la clave shell al proporcionar el script. Para más información, consulta Sintaxis del flujo de trabajo para Acciones de GitHub.

A continuación encontrarás un ejemplo de la sintaxis para cada sistema.

Sintaxis de Azure Pipelines para pasos de script

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"

GitHub Actions sintaxis de los pasos del script

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 que se produzcan errores si se envía alguna salida a stderr. GitHub Actions no admite esta configuración.

GitHub Actions configura los shells para que "produzcan un error rápido" siempre que sea posible, lo que detiene el script inmediatamente si uno de los comandos de un script sale con un código de error. Por el contrario, Azure Pipelines requiere una configuración explícita para salir inmediatamente en un error. Para más información, consulta Sintaxis del flujo de trabajo para Acciones de GitHub.

Diferencias en el shell predeterminado en Windows

En Azure Pipelines, el shell predeterminado para scripts en plataformas Windows es el shell de comandos (cmd.exe). En GitHub Actions, el intérprete de comandos 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, podrías ejecutar un script de shell de comandos en PowerShell sin tener que realizar cambios. Pero en la mayoría de los casos, deberá actualizar el script con sintaxis de PowerShell o indicarle GitHub Actions que ejecute el script con el shell de comandos en lugar de PowerShell. Puede hacerlo si especifica shell como cmd.

A continuación encontrarás un ejemplo de la sintaxis para cada sistema.

Azure Pipelines usa sintaxis CMD por defecto

jobs:
  - job: run_command
    pool:
      vmImage: 'windows-latest'
    steps:
      - script: echo "This step runs in CMD on Windows by default"

GitHub Actions sintaxis para especificar CMD

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 más información, consulta Sintaxis del flujo de trabajo para Acciones de GitHub.

Migrar los condicionales y la sintaxis de expresiones

Azure Pipelines y GitHub Actions pueden ejecutar los pasos condicionalmente. En Azure Pipelines, las expresiones condicionales se especifican mediante la clave condition. En GitHub Actions, las expresiones condicionales se especifican mediante la if clave .

Azure Pipelines usa funciones dentro de expresiones para ejecutar pasos condicionalmente. Por el contrario, GitHub Actions usa una notación de infijo. Por ejemplo, debe reemplazar la eq función en Azure Pipelines por el == operador en GitHub Actions.

A continuación encontrarás un ejemplo de la sintaxis para cada sistema.

sintaxis de Azure Pipelines para expresiones condicionales

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))

GitHub Actions sintaxis de expresiones condicionales

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 más información, consulta Evaluación de expresiones en flujos de trabajo y acciones.

Dependencias entre tareas

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

A continuación encontrarás un ejemplo de la sintaxis para cada sistema. Los flujos de trabajo inician un primer trabajo denominado initial y, cuando se completa, se ejecutarán dos trabajos denominados fanout1 y fanout2. Por último, cuando se completan esos trabajos, se ejecutará el trabajo fanin.

Azure Pipelines: la sintaxis de dependencias entre tareas

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."

GitHub Actions sintaxis de dependencias entre trabajos

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."
  fanout2:
    runs-on: ubuntu-latest
    needs: initial
    steps:
      - run: echo "This job will run after the initial job, in parallel with fanout1."
  fanin:
    runs-on: ubuntu-latest
    needs: [fanout1, fanout2]
    steps:
      - run: echo "This job will run after fanout1 and fanout2 have finished."

Para más información, consulta Sintaxis del flujo de trabajo para Acciones de GitHub.

Migrar las tareas a acciones

Azure Pipelines usa tasks, que son componentes de aplicación que se pueden volver a usar en varios flujos de trabajo. GitHub Actions usa acciones, que se pueden usar para realizar tareas y personalizar el 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.

A continuación encontrarás un ejemplo de la sintaxis para cada sistema.

sintaxis de Azure Pipelines para tareas

jobs:
  - job: run_python
    pool:
      vmImage: 'ubuntu-latest'
    steps:
      - task: UsePythonVersion@0
        inputs:
          versionSpec: '3.7'
          architecture: 'x64'
      - script: python script.py

GitHub Actions sintaxis de acciones

jobs:
  run_python:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-python@v5
        with:
          python-version: '3.7'
          architecture: 'x64'
      - run: python script.py

Puede encontrar acciones que puede usar en el flujo de trabajo en GitHub Marketplaceo puede crear sus propias acciones. Para más información, consulta Reutilización de automatizaciones.