{"meta":{"title":"Migrando de Azure Pipelines para GitHub Actions","intro":"GitHub Actions e Azure Pipelines compartilham várias semelhanças na configuração, o que torna a migração para GitHub Actions relativamente simples.","product":"GitHub Actions","breadcrumbs":[{"href":"/pt/actions","title":"GitHub Actions"},{"href":"/pt/actions/tutorials","title":"Tutoriais"},{"href":"/pt/actions/tutorials/migrate-to-github-actions","title":"Migrar para o GitHub Actions"},{"href":"/pt/actions/tutorials/migrate-to-github-actions/manual-migrations","title":"Migrações manuais"},{"href":"/pt/actions/tutorials/migrate-to-github-actions/manual-migrations/migrate-from-azure-pipelines","title":"Migrar de Azure Pipelines"}],"documentType":"article"},"body":"# Migrando de Azure Pipelines para GitHub Actions\n\nGitHub Actions e Azure Pipelines compartilham várias semelhanças na configuração, o que torna a migração para GitHub Actions relativamente simples.\n\n## Introdução\n\nAzure Pipelines e GitHub Actions ambos permitem criar fluxos de trabalho que criam, testam, publicam, liberam e implantam código automaticamente. Azure Pipelines e GitHub Actions compartilham algumas semelhanças na configuração do fluxo de trabalho:\n\n* Os arquivos de configuração do fluxo de trabalho são gravados YAML e armazenados no repositório do código.\n* Os fluxos de trabalho incluem um ou mais trabalhos.\n* Os trabalhos incluem uma ou mais etapas ou comandos individuais.\n* É possível reutilizar e compartilhar novamente etapas ou tarefas com a comunidade.\n\nPara saber mais, confira [Noções básicas sobre GitHub Actions](/pt/actions/get-started/understand-github-actions).\n\n## Principais diferenças\n\nAo migrar de Azure Pipelines, considere as seguintes diferenças:\n\n* Azure Pipelines dá suporte a um editor clássico, que permite definir sua configuração de CI em um editor de interface gráfica em vez de criar a definição de pipeline em um arquivo YAML.\n  GitHub Actions usa arquivos YAML para definir fluxos de trabalho e não dá suporte a um editor gráfico.\n* Azure Pipelines permite omitir alguma estrutura em definições de trabalho. Por exemplo, se você tem apenas um único trabalho, não é necessário definir o trabalho. Você precisa definir apenas as etapas.\n  GitHub Actions requer uma configuração explícita e a estrutura YAML não pode ser omitida.\n* Azure Pipelines dá suporte a *stages* definidos no arquivo YAML, que pode ser usado para criar fluxos de trabalho de implantação.\n  GitHub Actions exige que você separe estágios em arquivos de fluxo de trabalho YAML separados.\n* Os agentes de build locais do Azure Pipelines podem ser selecionados com base em suas capacidades.               Os runners auto-hospedados do GitHub Actions podem ser selecionados com rótulos.\n\n## Migrar tarefas e processos\n\nTrabalhos e etapas em Azure Pipelines são muito semelhantes aos trabalhos e etapas em GitHub Actions. Em ambos os sistemas, os trabalhos têm as características a seguir:\n\n* Os trabalhos contêm uma série de etapas executadas em sequência.\n* Os trabalhos são executados em máquinas virtuais separadas ou em contêineres separados.\n* Por padrão, os trabalhos são executados em paralelo, mas podem ser configurados para serem executados sequencialmente.\n\n## Migrar etapas de script\n\nVocê pode executar um script ou um comando de shell como uma etapa em um fluxo de trabalho. Em Azure Pipelines, as etapas de script podem ser especificadas usando a chave `script` ou com as chaves `bash`, `powershell` ou `pwsh`. Os scripts também podem ser especificados como uma entrada para a [tarefa do Bash](https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/bash?view=azure-devops) ou a [tarefa do PowerShell](https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/powershell?view=azure-devops).\n\nEm GitHub Actions, todos os scripts são especificados usando a `run` chave. Para selecionar um shell específico, você pode especificar a chave `shell` ao fornecer o script. Para saber mais, confira [Sintaxe de fluxo de trabalho para o GitHub Actions](/pt/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsrun).\n\nAbaixo, há um exemplo da sintaxe para cada sistema.\n\n### Sintaxe do Azure Pipelines para etapas 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 sintaxe para etapas do 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## Diferenças na manipulação de erros de script\n\nNo Azure Pipelines, os scripts podem ser configurados para erro se uma saída é enviada para `stderr`.\nGitHub Actions não dá suporte a essa configuração.\n\nO GitHub Actions configura shells como \"falha rápida\" sempre que possível, que interrompe o script imediatamente caso um dos comandos em um script saia com um código de erro. Por outro lado, Azure Pipelines requer configuração explícita para sair imediatamente em um erro. Para saber mais, confira [Sintaxe de fluxo de trabalho para o GitHub Actions](/pt/actions/reference/workflows-and-actions/workflow-syntax#exit-codes-and-error-action-preference).\n\n## Diferenças no shell padrão no Windows\n\nEm Azure Pipelines, o shell padrão para scripts em plataformas Windows é o shell command (*cmd.exe*). EmGitHub Actions, o shell padrão para scripts em plataformas Windows é o PowerShell. O PowerShell tem várias diferenças em comandos integrados, expansão de variáveis e controle de fluxo.\n\nSe você estiver rodando um comando simples, talvez seja possível executar um script do shell de comandos no PowerShell sem nenhuma alteração. Mas, na maioria dos casos, você precisará atualizar seu script com a sintaxe do PowerShell ou instruir GitHub Actions a executar o script com o shell de comando em vez do PowerShell. Faça isso especificando `shell` como `cmd`.\n\nAbaixo, há um exemplo da sintaxe para cada sistema.\n\n### Sintaxe do Azure Pipelines usando CMD por padrão\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 sintaxe para especificar o 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 saber mais, confira [Sintaxe de fluxo de trabalho para o GitHub Actions](/pt/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsshell).\n\n## Migração de condicionais e sintaxe de expressão\n\nAzure Pipelines e GitHub Actions podem executar etapas condicionalmente. Em Azure Pipelines, expressões condicionais são especificadas usando a chave `condition`. Em GitHub Actions, expressões condicionais são especificadas usando a `if` chave.\n\nAzure Pipelines usa funções dentro de expressões para executar etapas condicionalmente. Por outro lado, o GitHub Actions usa uma notação de infixo. Por exemplo, você deve substituir a função `eq` no Azure Pipelines pelo operador `==` em GitHub Actions.\n\nAbaixo, há um exemplo da sintaxe para cada sistema.\n\n### sintaxe Azure Pipelines para expressões condicionais\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 sintaxe para expressões condicionais\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 saber mais, confira [Avaliar expressões em fluxos de trabalho e ações](/pt/actions/reference/workflows-and-actions/expressions).\n\n## Dependências entre trabalhos\n\nTanto o Azure Pipelines quanto o GitHub Actions permitem que você defina dependências para uma tarefa. Em ambos os sistemas, os trabalhos são executados em paralelo por padrão, mas as dependências do trabalho podem ser especificadas explicitamente. Em Azure Pipelines, isso é feito com a chave `dependsOn`. Em GitHub Actions, isso é feito com a tecla `needs`.\n\nAbaixo, há um exemplo da sintaxe para cada sistema. Os fluxos de trabalho iniciam um primeiro trabalho chamado `initial` e, quando esse trabalho for concluído, dois trabalhos chamados `fanout1` e `fanout2` serão executados. Por fim, quando esses trabalhos forem concluídos, o trabalho `fanin` será executado.\n\n### A sintaxe do Azure Pipelines para dependências entre tarefas\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 sintaxe para dependências entre trabalhos\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 saber mais, confira [Sintaxe de fluxo de trabalho para o GitHub Actions](/pt/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idneeds).\n\n## Migrar tarefas para ações\n\nAzure Pipelines usa *tasks*, que são componentes de aplicativo que podem ser reutilizados em vários fluxos de trabalho.\nGitHub Actions usa *ações*, que podem ser usadas para executar tarefas e personalizar seu fluxo de trabalho. Em ambos os sistemas, é possível especificar o nome da tarefa ou ação a executar, junto com quaisquer entradas necessárias como pares chave/valor.\n\nAbaixo, há um exemplo da sintaxe para cada sistema.\n\n### Sintaxe do Azure Pipelines para tarefas\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 sintaxe para ações\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\nVocê pode encontrar ações que você pode usar em [GitHub Marketplace](https://github.com/marketplace?type=actions)seu fluxo de trabalho ou pode criar suas próprias ações. Para saber mais, confira [Reutilização de automações](/pt/actions/how-tos/reuse-automations)."}