{"meta":{"title":"Migración de Azure Pipelines a Acciones de GitHub","intro":"GitHub Actionsy Azure Pipelines comparten varias similitudes de configuración, lo que hace que la migración a GitHub Actions sea relativamente sencilla.","product":"GitHub Actions","breadcrumbs":[{"href":"/es/actions","title":"GitHub Actions"},{"href":"/es/actions/tutorials","title":"Tutoriales"},{"href":"/es/actions/tutorials/migrate-to-github-actions","title":"Migrar a GitHub Actions"},{"href":"/es/actions/tutorials/migrate-to-github-actions/manual-migrations","title":"Migraciones manuales"},{"href":"/es/actions/tutorials/migrate-to-github-actions/manual-migrations/migrate-from-azure-pipelines","title":"Migración desde Azure Pipelines"}],"documentType":"article"},"body":"# Migración de Azure Pipelines a Acciones de GitHub\n\nGitHub Actionsy Azure Pipelines comparten varias similitudes de configuración, lo que hace que la migración a GitHub Actions sea relativamente sencilla.\n\n## Introducción\n\nAzure 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:\n\n* Los archivos de configuración de flujo de trabajo están escritas en YAML y se almacenan en el repositorio del código.\n* Los flujos de trabajo incluyen una o más tareas.\n* Los trabajos incluyen uno o más pasos o comandos individuales.\n* Los pasos o tareas pueden reutilizarse y compartirse con la comunidad.\n\nPara más información, consulta [Descripción de Acciones de GitHub](/es/actions/get-started/understand-github-actions).\n\n## Diferencias clave\n\nAl migrar desde Azure Pipelines, tenga en cuenta las siguientes diferencias:\n\n* 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.\n  GitHub Actions usa archivos YAML para definir flujos de trabajo y no admite un editor gráfico.\n* 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.\n  GitHub Actions requiere una configuración explícita y no se puede omitir la estructura YAML.\n* Azure Pipelines admite *stages* definidos en el archivo YAML, que se pueden usar para crear flujos de trabajo de implementación.\n  GitHub Actions requiere separar fases en archivos de flujo de trabajo YAML independientes.\n* Los agentes de compilación locales de Azure Pipelines se pueden seleccionar según sus capacidades.               Los ejecutores autohospedados de GitHub Actions se pueden seleccionar con etiquetas.\n\n## Migrar jobs y pasos\n\nLos 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:\n\n* Los jobs contienen una serie de pasos que se ejecutan en secuencia.\n* Los jobs se ejecutan en máquinas virtuales separadas o en contenedores separados.\n* Los jobs se ejecutan en paralelo predeterminadamente, pero pueden configurarse para ejecutarse en secuencia.\n\n## Migrar pasos de un script\n\nPuedes 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 /> <c0 o con las claves /> \\<c1 ,<c2 /> o <c3 />. Los scripts también se pueden especificar como entrada para la [tarea de Bash](https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/bash?view=azure-devops) o la [tarea de PowerShell](https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/powershell?view=azure-devops).\n\nEn 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](/es/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsrun).\n\nA continuación encontrarás un ejemplo de la sintaxis para cada sistema.\n\n### Sintaxis de Azure Pipelines para pasos de script\n\n```yaml\njobs:\n  - job: scripts\n    pool:\n      vmImage: 'windows-latest'\n    steps:\n      - script: echo \"This step runs in the default shell\"\n      - bash: echo \"This step runs in bash\"\n      - pwsh: Write-Host \"This step runs in PowerShell Core\"\n      - task: PowerShell@2\n        inputs:\n          script: Write-Host \"This step runs in PowerShell\"\n```\n\n### GitHub Actions sintaxis de los pasos del script\n\n```yaml\njobs:\n  scripts:\n    runs-on: windows-latest\n    steps:\n      - run: echo \"This step runs in the default shell\"\n      - run: echo \"This step runs in bash\"\n        shell: bash\n      - run: Write-Host \"This step runs in PowerShell Core\"\n        shell: pwsh\n      - run: Write-Host \"This step runs in PowerShell\"\n        shell: powershell\n```\n\n## Diferencias en el manejo de errores de los scripts\n\nEn Azure Pipelines, los scripts se pueden configurar para que se produzcan errores si se envía alguna salida a `stderr`.\nGitHub Actions no admite esta configuración.\n\nGitHub Actions configura shells para \"fracasar y responder rápido a los errores\" cuando sea posible, lo cual detiene el script inmediatamente si uno de los comandos en un script existe 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](/es/actions/reference/workflows-and-actions/workflow-syntax#exit-codes-and-error-action-preference).\n\n## Diferencias en el shell predeterminado en Windows\n\nEn Azure Pipelines, el shell predeterminado para scripts en plataformas Windows es el shell de comandos (*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.\n\nSi 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`.\n\nA continuación encontrarás un ejemplo de la sintaxis para cada sistema.\n\n### Azure Pipelines usa sintaxis CMD por defecto\n\n```yaml\njobs:\n  - job: run_command\n    pool:\n      vmImage: 'windows-latest'\n    steps:\n      - script: echo \"This step runs in CMD on Windows by default\"\n```\n\n### GitHub Actions sintaxis para especificar CMD\n\n```yaml\njobs:\n  run_command:\n    runs-on: windows-latest\n    steps:\n      - run: echo \"This step runs in PowerShell on Windows by default\"\n      - run: echo \"This step runs in CMD on Windows explicitly\"\n        shell: cmd\n```\n\nPara más información, consulta [Sintaxis del flujo de trabajo para Acciones de GitHub](/es/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsshell).\n\n## Migrar los condicionales y la sintaxis de expresiones\n\nAzure 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 .\n\nAzure 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.\n\nA continuación encontrarás un ejemplo de la sintaxis para cada sistema.\n\n### sintaxis de Azure Pipelines para expresiones condicionales\n\n```yaml\njobs:\n  - job: conditional\n    pool:\n      vmImage: 'ubuntu-latest'\n    steps:\n      - script: echo \"This step runs with str equals 'ABC' and num equals 123\"\n        condition: and(eq(variables.str, 'ABC'), eq(variables.num, 123))\n```\n\n### GitHub Actions sintaxis de expresiones condicionales\n\n```yaml\njobs:\n  conditional:\n    runs-on: ubuntu-latest\n    steps:\n      - run: echo \"This step runs with str equals 'ABC' and num equals 123\"\n        if: ${{ env.str == 'ABC' && env.num == 123 }}\n```\n\nPara más información, consulta [Evaluación de expresiones en flujos de trabajo y acciones](/es/actions/reference/workflows-and-actions/expressions).\n\n## Dependencias entre tareas\n\nTanto 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`.\n\nA 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`.\n\n### Azure Pipelines: la sintaxis de dependencias entre tareas\n\n```yaml\njobs:\n  - job: initial\n    pool:\n      vmImage: 'ubuntu-latest'\n    steps:\n      - script: echo \"This job will be run first.\"\n  - job: fanout1\n    pool:\n      vmImage: 'ubuntu-latest'\n    dependsOn: initial\n    steps:\n      - script: echo \"This job will run after the initial job, in parallel with fanout2.\"\n  - job: fanout2\n    pool:\n      vmImage: 'ubuntu-latest'\n    dependsOn: initial\n    steps:\n      - script: echo \"This job will run after the initial job, in parallel with fanout1.\"\n  - job: fanin\n    pool:\n      vmImage: 'ubuntu-latest'\n    dependsOn: [fanout1, fanout2]\n    steps:\n      - script: echo \"This job will run after fanout1 and fanout2 have finished.\"\n```\n\n### GitHub Actions sintaxis de dependencias entre trabajos\n\n```yaml\njobs:\n  initial:\n    runs-on: ubuntu-latest\n    steps:\n      - run: echo \"This job will be run first.\"\n  fanout1:\n    runs-on: ubuntu-latest\n    needs: initial\n    steps:\n      - run: echo \"This job will run after the initial job, in parallel with fanout2.\"\n  fanout2:\n    runs-on: ubuntu-latest\n    needs: initial\n    steps:\n      - run: echo \"This job will run after the initial job, in parallel with fanout1.\"\n  fanin:\n    runs-on: ubuntu-latest\n    needs: [fanout1, fanout2]\n    steps:\n      - run: echo \"This job will run after fanout1 and fanout2 have finished.\"\n```\n\nPara más información, consulta [Sintaxis del flujo de trabajo para Acciones de GitHub](/es/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idneeds).\n\n## Migrar las tareas a acciones\n\nAzure Pipelines usa *tasks*, que son componentes de aplicación que se pueden volver a usar en varios flujos de trabajo.\nGitHub 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.\n\nA continuación encontrarás un ejemplo de la sintaxis para cada sistema.\n\n### sintaxis de Azure Pipelines para tareas\n\n```yaml\njobs:\n  - job: run_python\n    pool:\n      vmImage: 'ubuntu-latest'\n    steps:\n      - task: UsePythonVersion@0\n        inputs:\n          versionSpec: '3.7'\n          architecture: 'x64'\n      - script: python script.py\n```\n\n### GitHub Actions sintaxis de acciones\n\n```yaml\njobs:\n  run_python:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/setup-python@v5\n        with:\n          python-version: '3.7'\n          architecture: 'x64'\n      - run: python script.py\n```\n\nPuede encontrar acciones que puede usar en el flujo de trabajo en [GitHub Marketplace](https://github.com/marketplace?type=actions)o puede crear sus propias acciones. Para más información, consulta [Reutilización de automatizaciones](/es/actions/how-tos/reuse-automations)."}