Criar um fluxo de trabalho com o GitHub Actions
Neste guia, criaremos seu primeiro fluxo de trabalho do GitHub Actions, explicando os componentes e métodos básicos enquanto o fazemos. Também configuraremos o repositório de demonstração, que servirá para você no restante deste módulo Fundamentos do GitHub Actions. Ao longo do caminho, ouviremos insights e dicas da Amplifon sobre como eles usaram o GitHub Actions para CI/CD e automação de fluxo de trabalho para melhorar seus processos de desenvolvimento.
Vamos começar!
Neste guia, você aprenderá:
Como criar um arquivo de fluxo de trabalho do GitHub Actions
Como acionar um fluxo de trabalho de acordo com eventos específicos do GitHub
Como executar uma ação reutilizável em seu fluxo de trabalho
Como executar um fluxo de trabalho usando um executor hospedado no GitHub
Siga nosso repositório de demonstração
Se você desejar acompanhar o roteiro de aprendizagem de Automações, precisará criar uma cópia de nosso repositório de demonstração, que contém um exemplo da aplicação Web que implantaremos nas páginas do GitHub usando o GitHub Actions. O repositório de demonstração também contém cópias de todos os arquivos criados durante este módulo no demo-files
diretório.
Abra o repositório actions-learning-pathway em uma nova guia.
Clique em Use this template acima da lista de arquivos e selecione Create a new repository.
Use o menu suspenso Owner para selecionar a conta da qual deseja possuir o repositório.
Nomeie o repositório
actions-learning-pathway
e adicione uma descrição simples para facilitar a sua identificação posterior.Defina a visibilidade padrão do repositório como pública, pois os repositórios privados usam minutos do Actions, enquanto os repositórios públicos podem usar executores hospedados no GitHub gratuitamente.
Clique em Create repository from template e estamos prontos para criar nosso primeiro fluxo de trabalho do Actions!
Crie seu primeiro arquivo de fluxo de trabalho do Actions
Um fluxo de trabalho do Actions é um processo automatizado configurável composto por um ou mais trabalhos definidos usando YAML. Os fluxos de trabalho seguem uma estrutura específica e são armazenados no diretório .github/workflows
do seu repositório. Há duas maneiras de criar um novo fluxo de trabalho: criando um novo arquivo YAML no diretório .github/workflows ou na guia Actions do seu repositório. A primeira forma é simples e direta, mas a segunda tem algumas vantagens, então vamos fazer isso por enquanto:
Navegue até a guia “Actions” do repositório e clique em New workflow.
Dê uma olhada e você verá que o GitHub sugeriu uma variedade de fluxos de trabalho iniciais com base nas linguagens do código em seu repositório. Como o repositório actions-learning-pathway
tem arquivos JavaScript e Node.js, as sugestões são principalmente para essas linguagens.
A página também lista fluxos de trabalho organizados por categorias, como Implantação, Segurança, Integração Contínua, Automação e Páginas, e fornece uma barra de pesquisa para ajudar a restringir recomendações. Essa página é um bom lugar para procurar antes de criar algo do zero.
Mas como estamos interessados em aprender os fundamentos do arquivo de fluxo de trabalho, começaremos do zero:
Clique em Set up a workflow for yourself para começar a editar um arquivo YAML em branco no diretório .github/workflows
do seu repositório. Defina o nome do arquivo como hello-world.yml
.
Agora você pode começar a criar seu primeiro fluxo de trabalho do GitHub Actions!
O GitHub Actions tem sido um catalisador ao nos ajudar a construir nosso pipeline de CI/CD. Estávamos lutando com implantações imprevisíveis, criação de código duplicado entre grupos de trabalho e processos manuais ineficientes. A adoção da automação de workflow levou a melhorias notáveis: implantações mais rápidas, gerenciamento aprimorado de versões e melhor reutilização de código e compartilhamento de conhecimento.
Agora, podemos codificar, criar e distribuir código diretamente do navegador. O GitHub Actions é uma ferramenta poderosa e flexível que expande nossa capacidade de inovar e escalar.
Agora que temos um arquivo para editar e um local para fazê-lo, vamos criar um fluxo de trabalho para dizer automaticamente “Hello World!” sempre que alguém efetuar push para o nosso repositório. Escreveremos o arquivo e explicaremos as etapas ao longo do processo. Você pode escrever o código linha por linha ou copiar o exemplo do final e seguir as outras etapas.
Nomeie seu fluxo de trabalho
name: hello-world
Fornecer uma descrição descritiva name
ao seu fluxo de trabalho não apenas melhora sua legibilidade, mas também ajuda outras pessoas a compreender mais facilmente a finalidade do seu fluxo de trabalho, sem investigar cada componente. Neste caso, estamos escrevendo o “Hello world” típico, então vamos nomeá-lo hello-world
.
Definir o evento acionador do fluxo de trabalho
Todo arquivo de fluxo de trabalho precisa ter um ou mais eventos que acionam sua execução. Eventos cobrem quase todas as atividades do GitHub, desde a abertura de uma pull request até comentários sobre um problema e a conclusão bem-sucedida de outro fluxo de trabalho. É possível até acionar fluxos de trabalho fora do GitHub por meio de uma chamada de API e do evento repository-dispatch
. Esses eventos fornecem um meio simples para uma integração estreita entre seus pipelines de CI/CD e a plataforma que alimenta seu desenvolvimento, ao mesmo tempo que fornece flexibilidade para interagir com suas outras ferramentas.
Para o nosso exemplo hello-world
, vamos simplificar e definir o evento de fluxo de trabalho como push
.
name: hello-world
on: push
O evento push
executa o fluxo de trabalho quando você envia um commit ou tag ou quando cria um repositório a partir de um modelo. Então, quando terminarmos de escrever hello-world.yml
e fazer commit, o fluxo de trabalho será executado. Mas primeiro, temos que dizer o que fazer.
Definir um trabalho
Agora precisamos definir o que acontece quando o fluxo de trabalho é executado criando um trabalho. Todo fluxo de trabalho possui um ou mais trabalhos, que consistem em uma série de etapas executáveis e inter-relacionadas.
Iniciaremos a seção jobs:
do nosso fluxo de trabalho e nomearemos nosso trabalho hello-world-job
.
name: hello-world
on: push
jobs:
hello-world-job:
Por padrão, os trabalhos funcionam de forma independente e são executados em paralelo, mas também é possível configurar um trabalho para aguardar a conclusão de outros trabalhos antes de começar. Por exemplo, você poderia ter trabalhos de criação separados para diferentes arquiteturas em execução simultaneamente, com um trabalho de empacotamento subsequente que só será iniciado quando todos os trabalhos de construção forem concluídos com êxito.
Especificar um executor
Um executor é uma máquina que executa os trabalhos em um fluxo de trabalho. Há dois tipos básicos de executores disponíveis: executores hospedados no GitHub e executores auto-hospedados.
Um executor auto-hospedado é um sistema que você implanta e gerencia em sua própria infraestrutura para executar trabalhos do GitHub Actions.
Um executor hospedado no GitHub fornece uma máquina virtual recém-provisionada executando Ubuntu Linux, Microsoft Windows ou macOS. Ao selecionar um executor hospedado no GitHub, você pode identificar a versão específica do sistema operacional ou especificar -latest
para usar a imagem estável mais recente disponível. O GitHub também oferece versões maiores de executores que possuem recursos adicionais, como grupos de executores (runner group) para controle de acesso em uma organização e muito mais.
Recomendamos o uso de executores hospedados no GitHub para a maioria das situações (eles eliminam a sobrecarga e facilitam a vida), mas veremos como os executores auto-hospedados também podem ser úteis em um guia posterior.
Por enquanto, usaremos Ubuntu-latest
em um executor hospedado no GitHub:
name: hello-world
on: push
jobs:
hello-world-job:
runs-on: ubuntu-latest
Se um executor auto-hospedado ficar 14 dias sem executar uma tarefa, ele será interrompido (um executor auto-hospedado efêmero será removido automaticamente do GitHub se não tiver se conectado ao GitHub Actions por mais de um dia). Para neutralizar isso, definimos eventos na maioria dos nossos repositórios para iniciar um trabalho a cada 12 dias ou mais. Essa tarefa de manutenção de rotina mantém nossos executores auto-hospedados ativos e funcionando, garantindo que possamos contar com eles quando necessário.
Adicionar uma etapa para executar sua primeira ação
Como mencionamos antes, cada trabalho é composto por uma ou mais etapas. Cada etapa pode executar um script definido por você ou executar uma ação, que é uma extensão reutilizável que pode simplificar o fluxo de trabalho. É possível escrever suas próprias ações personalizadas ou usar ações do GitHub Marketplace, que tem milhares de ações para tudo, desde revisão de código até gerenciamento de dependências, segurança e muito mais.
As ações de terceiros não apenas diminuem a repetição de código, mas também permitem que você utilize o ecossistema mais amplo de desenvolvedores do GitHub. Por que escrever integrações personalizadas quando elas já existem?
Semelhante à forma como o GitHub recomenda fluxos de trabalho iniciais, você também notará que o GitHub recomenda actions potencialmente úteis diretamente do editor em GitHub.com, simplificando o emprego de ações em tempo real.
Para o nosso fluxo de trabalho hello-world
, começaremos com a ação Checkout, que permite ao fluxo de trabalho acessar o conteúdo do seu repositório, para que você possa executar scripts ou outras ações nele, como executar ferramentas de construção e teste. Você desejará usar a checkout
ação sempre que seu fluxo de trabalho precisar acessar o conteúdo dos repositórios.
name: hello-world
on: push
jobs:
hello-world-job:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v3
Primeiro, vamos definir um name
para a nossa etapa. Isso é opcional, mas é uma boa prática, pois será registrado nos logs e poderá ajudar você a monitorar os erros à medida que os fluxos de trabalho se tornam mais complicados.
Em seguida, uses: actions/checkout@v3
especifica que essa etapa utilizará @v3
da ação checkout
. Semelhante a qualquer dependência, você deve indicar a versão da ação que deseja usar com base se deseja aceitar automaticamente atualizações da ação. É possível encontrar a versão mais recente de uma action localizando-a no GitHub Marketplace. Se você não especificar uma versão, a versão mais recente será usada automaticamente e poderá interromper o fluxo de trabalho quando alterações significativas forem feitas na ação.
Diga “Hello World”!
Por fim, adicionaremos uma etapa para executar um script bash que ecoa nossa frase Hello World!, que armazenamos em um arquivo em nosso repositório actions-learning-pathway
. A ação checkout
está fazendo seu trabalho aqui, dando ao nosso script bash acesso ao arquivo hello-world.txt
para ecoar seu conteúdo.
name: hello-world
on: push
jobs:
hello-world-job:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v3
- run: echo "$(cat hello_world.txt)"
Com a etapa final adicionada, salvaremos o fluxo de trabalho e veremos as Actions em ação!
Clique em Commit changes…
Insira uma mensagem do commit e clique em Commit changes na caixa de diálogo.
Isso retorna você ao diretório .github/workflows
do repositório, onde é possível visualizar o arquivo do fluxo de trabalho hello-world.yml
recém-criado. Como você acabou de enviar o arquivo para o seu repositório e seu fluxo de trabalho está configurado para ser executado on: push
, vamos ver se funcionou!
Selecione a guia “Actions”.
Clique em Say hello world! (o nome que demos à etapa final) para ver se tivemos sucesso.
Contanto que tenhamos feito tudo corretamente, deveríamos ver todos os trabalhos listados na tela, com o tempo que levou para executar cada um listado ao lado. Se você encontrar um erro, observe atentamente para ver se o seu código corresponde ao código compartilhado acima e lembre-se de que os espaços em branco são importantes, e o YAML com espaçamento incorreto produzirá erros.
Com a etapa Say hello world! expandida, podemos ver que nosso arquivo de fluxo de trabalho executou um eco $(cat hello_world.txt)
, que ecoou “Hello! And congrats, you’ve successfully built and run your first GitHub Actions workflow file!”” para os logs.
Sucesso!
A seguir: Criar uma aplicação com o GitHub Actions
Agora que aprendemos sobre os elementos básicos do GitHub Actions, vamos usá-los para fazer algo um pouco mais interessante e útil do que escrever uma mensagem “Hello world!” para os logs, vamos escrever um fluxo de trabalho simples de CI/CD para construir, testar e implantar uma aplicação Web no GitHub Pages usando o GitHub Actions. Começaremos com a criação de uma aplicação com o GitHub Actions.