Observação: no momento, não há suporte para os executores hospedados no GitHub no GitHub Enterprise Server. Você pode ver mais informações sobre o suporte futuro planejado no GitHub public roadmap.
Introdução
Este guia ajuda a você a fazer a migração do Travis CI para GitHub Actions. Ele compara os seus conceitos e sintaxe, descreve as semelhanças e demonstra as suas diferentes abordagens em relação às tarefas comuns.
Antes de começar
Antes de iniciar sua migração para GitHub Actions, seria importante familiarizar-se com a forma como funciona:
- Para ver um exemplo rápido que demonstra um trabalho do GitHub Actions, confira "Início rápido para GitHub Actions".
- Para aprender os conceitos essenciais do GitHub Actions, confira "Entendendo o GitHub Actions".
Comparar a execução do trabalho
Para dar controle a você sobre quando as tarefas de CI são executadas, um fluxo de trabalho do GitHub Actions usa trabalhos que são executados em paralelo por padrão. Cada trabalho contém etapas que são executadas em uma sequência definida por você. Se você precisa executar a configuração e a limpeza de ações para um trabalho, você pode definir etapas em cada trabalho para executá-las.
Principais semelhanças
GitHub Actions e o Travis CI compartilham certas semelhanças e entendê-las antecipadamente pode ajudar a agilizar o processo de migração.
Usar a sintaxe de YAML
O Travis CI e o GitHub Actions usam o YAML para criar trabalhos e fluxos de trabalho, e esses arquivos são armazenados no repositório do código. Para obter mais informações sobre como o GitHub Actions usa o YAML, confira "Entendendo o GitHub Actions".
Variáveis personalizadas
O Travis CI permite que você defina variáveis e as compartilhe entre fases. Da mesma forma, GitHub Actions permite definir variáveis para fluxos de trabalho. Para obter mais informações, confira "Store information in variables".
Variáveis padrão
O Travis CI e GitHub Actions incluem variáveis de ambiente padrão que você pode usar nos seus arquivos de YAML. Para o GitHub Actions, você poderá vê-los listados em "Store information in variables".
Processamento paralelo do trabalho
O Travis CI pode usar stages
para executar trabalhos em paralelo. Da mesma forma, o GitHub Actions executa jobs
em paralelo. Para obter mais informações, confira "Sobre fluxos de trabalho".
Notificações de status
O Travis CI e GitHub Actions são compatíveis com selos de status, o que permite que você indique se uma criação está sendo aprovada ou falhando. Para obter mais informações, confira "Adicionar um selo de status de fluxo de trabalho".
Usando uma matriz
O Travis CI e GitHub Actions são compatíveis com uma matriz, o que permite que você realize testes usando combinações de sistemas operacionais e pacotes de software. Para obter mais informações, confira "Running variations of jobs in a workflow".
Abaixo, há um exemplo de comparação da sintaxe para cada sistema.
Sintaxe de CI do Travis para uma matriz
matrix:
include:
- rvm: '2.5'
- rvm: '2.6.3'
Sintaxe de GitHub Actions para uma matriz
jobs:
build:
strategy:
matrix:
ruby: ['2.5', '2.6.3']
Apontar para branches específicos
O Travis CI e GitHub Actions permitem que você aponte a sua CI para um branch específico. Para obter mais informações, confira "Sintaxe de fluxo de trabalho para o GitHub Actions".
Abaixo, há um exemplo da sintaxe para cada sistema.
Sintaxe de CI do Travis para direcionar branches específicos
branches:
only:
- main
- 'mona/octocat'
Sintaxe do GitHub Actions para direcionar branches específicos
on:
push:
branches:
- main
- 'mona/octocat'
Verificar submódulos
O Travis CI e GitHub Actions permitem que você controle se os submódulos estão incluídos no clone do repositório.
Abaixo, há um exemplo da sintaxe para cada sistema.
Sintaxe de CI do Travis para fazer check-out de submódulos
git:
submodules: false
Sintaxe do GitHub Actions para fazer check-out de submódulos
- uses: actions/checkout@v4
with:
submodules: false
Usando variáveis de ambiente em uma matriz
Tanto o Travis CI quanto GitHub Actions podem adicionar variáveis personalizadas a uma matriz de teste, permitindo que você faça referência a tais variáveis em uma etapa posterior.
No GitHub Actions, você pode usar a chave include
para adicionar variáveis de ambiente personalizadas a uma matriz. Neste exemplo, as entradas de matriz para node-version
cada uma são configuradas para usar valores diferentes para as variáveis e site
de datacenter
ambiente. Em Echo site details
seguida, a etapa usa env: ${{ matrix.env }}
para se referir às variáveis personalizadas:
name: Node.js CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
include:
- node-version: '14.x'
site: "prod"
datacenter: "site-a"
- node-version: '16.x'
site: "dev"
datacenter: "site-b"
steps:
- name: Echo site details
env:
SITE: ${{ matrix.site }}
DATACENTER: ${{ matrix.datacenter }}
run: echo $SITE $DATACENTER
Principais recursos em GitHub Actions
Ao fazer a migração do Travis CI, considere os recursos principais a seguir em GitHub Actions:
Armazenar segredos
GitHub Actions permite armazenar segredos e referenciá-los em seus trabalhos. Organizações de GitHub Actions podem limitar quais repositórios podem acessar segredos da organização. As regras de proteção de implantação podem exigir a aprovação manual de um fluxo de trabalho para acessar segredos de um ambiente. Para obter mais informações, confira "Usar segredos em ações do GitHub".
Compartilhar arquivos entre trabalhos e fluxos de trabalho
GitHub Actions inclui suporte integrado para o armazenamento de artefatos, permitindo que você compartilhe arquivos entre os trabalhos de um fluxo de trabalho. Você também pode salvar os arquivos resultantes e compartilhá-los com outros fluxos de trabalho. Para obter mais informações, confira "Entendendo o GitHub Actions".
Hospedar seus próprios executores
Se os seus trabalhos exigirem hardware ou software específico, GitHub Actions permitirá que você hospede seus próprios executores e envie seus trabalhos para eles processarem. GitHub Actions também permite usar políticas para controlar como esses executores são acessados, concedendo acesso ao nível da organização ou do repositório. Para obter mais informações, confira "Hospedar seus próprios executores".
Usar diferentes linguagens em GitHub Actions
Ao trabalhar com diferentes linguagens em GitHub Actions, você pode criar uma etapa no seu trabalho para configurar as dependências da sua linguagem. Para obter mais informações sobre como trabalhar com uma linguagem em particular, consulte o guia específico:
- Como compilar e testar Node.js
- Como compilar e testar o Python
- Como compilar e testar o PowerShell
- Como compilar e testar o Java com o Maven
- Como compilar e testar o Java com o Gradle
- Como compilar e testar o Java com o Ant
Execução de scripts
O GitHub Actions pode usar as etapas run
para executar scripts ou comandos de shell. Para usar um shell específico, você pode especificar o tipo shell
ao fornecer o caminho para o script. Para obter mais informações, confira "Sintaxe de fluxo de trabalho para o GitHub Actions".
Por exemplo:
steps:
- name: Run build script
run: ./.github/scripts/build.sh
shell: bash
Manuseio de erros em GitHub Actions
Ao migrar para GitHub Actions, existem diferentes abordagens para a manipulação de erros das quais você precisa estar ciente.
Manipulação de erros de script
GitHub Actions interrompe um trabalho imediatamente se uma das etapas retornar um código de erro. Para obter mais informações, confira "Sintaxe de fluxo de trabalho para o GitHub Actions".
Manipulação de erro de trabalho
O GitHub Actions usa condicionais if
para executar trabalhos ou etapas em certas situações. Por exemplo, você poderá executar uma etapa quando outra etapa resultar em uma failure()
. Para obter mais informações, confira "Sintaxe de fluxo de trabalho para o GitHub Actions". Use também continue-on-error
para impedir que uma execução de fluxo de trabalho seja interrompida em caso de falha de um trabalho.
Migrar a sintaxe para condicionais e expressões
Para executar trabalhos sob expressões condicionais, o Travis CI e o GitHub Actions compartilham uma sintaxe similar do condicional if
. O GitHub Actions permite que você use a condicional if
para evitar que uma etapa ou um trabalho seja executado, a menos que uma condição seja atendida. Para obter mais informações, confira "Evaluate expressions in workflows and actions".
Este exemplo demonstra como um condicional if
pode controlar o fato de uma etapa ser executada:
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
Migrar fases para etapas
Enquanto o Travis CI usa fases para executar etapas, o GitHub Actions contém etapas que executam ações. Encontre ações predefinidas no GitHub Marketplace ou criar suas ações. Para obter mais informações, confira "Compartilhar automações".
Abaixo, há um exemplo da sintaxe para cada sistema.
Sintaxe de CI do Travis para fases e etapas
language: python
python:
- "3.7"
script:
- python script.py
Sintaxe do GitHub Actions para fases e etapas
jobs:
run_python:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@v5
with:
python-version: '3.7'
architecture: 'x64'
- run: python script.py
Memorizar dependências
O Travis CI e GitHub Actions permitem que você armazene as as dependências em cache manualmente para reutilização posterior.
Esses exemplos demonstram a sintaxe de cache para cada sistema.
Sintaxe do Travis para cache
language: node_js
cache: npm
Sintaxe do GitHub Actions para cache
- name: Cache node modules
uses: actions/cache@v3
with:
path: ~/.npm
key: v1-npm-deps-${{ hashFiles('**/package-lock.json') }}
restore-keys: v1-npm-deps-
Exemplos de tarefas comuns
Esta seção compara como GitHub Actions e o Travis CI realizam tarefas comuns.
Configurar variáveis de ambiente
Você pode criar variáveis de ambiente personalizadas em uma tarefa de GitHub Actions.
Sintaxe de CI do Travis para uma variável de ambiente
env:
- MAVEN_PATH="/usr/local/maven"
Fluxo de trabalho do GitHub Actions com uma variável de ambiente
jobs:
maven-build:
env:
MAVEN_PATH: '/usr/local/maven'
Criar com Node.js
CI do Travis para compilar com Node.js
install:
- npm install
script:
- npm run build
- npm test
Fluxo de trabalho do GitHub Actions para compilar com Node.js
name: Node.js CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '16.x'
- run: npm install
- run: npm run build
- run: npm test
Próximas etapas
Para continuar aprendendo sobre os principais recursos do GitHub Actions, confira "Escrevendo fluxos de trabalho".