Nota:
Actualmente los ejecutores hospedados por GitHub no se admiten en GitHub Enterprise Server.
Introducción
Azure Pipelines y GitHub Actions permiten crear flujos de trabajo que compilen, prueben, publiquen, lancen e implementen código automáticamente. Azure Pipelines y GitHub Actions presentan ciertas 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 GitHub Actions.
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 utiliza archivos YAML para definir flujos de trabajo y no es compatible con 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 específica y no se puede omitir la estructura de YAML.
- Azure Pipelines admite stages definidos en el archivo YAML, que se pueden usar para crear flujos de trabajo de implementación. GitHub Actions necesita que separes las etapas en archivos de flujo de trabajo de YAML diferentes.
- Los agentes de compilación locales de Azure Pipelines se pueden seleccionar según sus capacidades. Los ejecutores auto-hospedados de GitHub Actions pueden seleccionarse con etiquetas.
Migrar tareas y pasos
Los trabajos y pasos en Azure Pipelines son muy similares a los trabajos y pasos 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 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 />
En GitHub Actions, todos los scripts se especifican con la clave run. 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 GitHub Actions.
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"
Sintaxis de GitHub Actions para los pasos de 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 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. 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 GitHub Actions.
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 shell predeterminado para 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, tendrás que actualizar tu script con la sintaxis de PowerShell o indicar a GitHub Actions que ejecute el script con el shell de comandos en vez de con 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"
Sintaxis de GitHub Actions 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 GitHub Actions.
Migrar los condicionales y la sintaxis de expresiones
Azure Pipelines y GitHub Actions pueden ejecutar pasos de forma condicional. En Azure Pipelines, las expresiones condicionales se especifican mediante la clave condition. En GitHub Actions, las expresiones condicionales se especifican mediante la clave if.
Azure Pipelines usa funciones dentro de expresiones para ejecutar pasos condicionalmente. Por el contrario, GitHub Actions utiliza una notación infija. Por ejemplo, debe reemplazar la función eq 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))
Sintaxis de GitHub Actions para 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 definir dependencias para una tarea. 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 clave 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."
Sintaxis de GitHub Actions para 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 GitHub Actions.
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 utilizar 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
Sintaxis de GitHub Actions para 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 buscar acciones para usarlas en el flujo de trabajo en GitHub Marketplace, o bien puede crear acciones propias. Para más información, consulta Reutilización de automatizaciones.