Este tutorial mostra como configurar projetos do CodeBuild para executar trabalhos do GitHub Actions. Para obter mais informações sobre como usar o GitHub Actions com o CodeBuild, consulte Tutorial: configurar um executor do GitHub Actions hospedado pelo CodeBuild.
Para concluir este tutorial, você deve primeiramente:
-
Conecte-se com um token de acesso pessoal, um segredo do Secrets Manager, uma aplicação OAuth ou uma aplicação GitHub. Se você quiser se conectar a uma aplicação OAuth, deverá usar o console do CodeBuild para fazer isso. Para criar um token de acesso pessoal, use o console do CodeBuild ou a API ImportSourceCredentials. Para obter mais instruções, consulte Acesso do GitHub e do GitHub Enterprise Server no CodeBuild.
-
Conecte o CodeBuild à sua conta do GitHub. Para fazer isso, é possível utilizar uma das seguintes opções:
-
É possível adicionar o GitHub como provedor de origem no console. Você pode se conectar com um token de acesso pessoal, um segredo do Secrets Manager, uma aplicação OAuth ou uma aplicação GitHub. Para obter instruções, consulte Acesso do GitHub e do GitHub Enterprise Server no CodeBuild.
-
É possível importar as credenciais do GitHub por meio da API ImportSourceCredentials. Isso só pode ser feito com um token de acesso pessoal. Para se conectar usando uma aplicação OAuth, use o console. Para obter instruções, consulte Conectar o GitHub a um token de acesso (CLI) .
nota
Isso só precisará ser feito se você não tiver se conectado ao GitHub da sua conta.
-
Etapa 1: criar um projeto do CodeBuild com um webhook
Nesta etapa, você criará um projeto do CodeBuild com um webhook e o revisará no console do GitHub. Você também pode escolher o GitHub Enterprise como provedor de origem. Para saber mais sobre como criar um webhook no GitHub Enterprise, consulte Webhooks manuais do GitHub.
Para criar um projeto do CodeBuild com um webhook
-
Abra o console do AWS CodeBuild em https://console.aws.amazon.com/codesuite/codebuild/home
. -
Crie um projeto de compilação. Para obter informações, consulte Criar um projeto de compilação (console) e Executar uma compilação (console).
-
Em Origem:
-
Em Provedor de origem, escolha GitHub.
-
Em Repositório, escolha Repositório em minha conta do GitHub.
-
Em URL do repositório, insira
https://github.com/
.user-name
/repository-name
nota
Por padrão, o projeto só receberá eventos
WORKFLOW_JOB_QUEUED
para um único repositório. Para receber eventos de todos os repositórios dentro de uma organização ou empresa, consulte Webhooks globais e organizacionais do GitHub. -
-
Em Eventos de webhook da origem principal:
-
Em Webhook - opcional, selecione Recompilar toda vez que uma alteração de código for enviada para este repositório.
-
Em Tipo de evento, selecione WORKFLOW_JOB_QUEUED. Depois que essa opção for habilitada, as compilações serão acionadas somente pelos eventos de Trabalhos de fluxo de trabalho do GitHub Actions.
nota
O CodeBuild só processará eventos de trabalhos de fluxo de trabalho do GitHub Actions se um webhook tiver grupos de filtros contendo o filtro de eventos WORKFLOW_JOB_QUEUED.
-
-
Em Ambiente:
-
Escolha uma imagem de ambiente e computação compatíveis. Observe que você tem a opção de substituir as configurações de imagem e instância usando um rótulo no YAML do fluxo de trabalho do GitHub Actions. Para obter mais informações, consulte Etapa 2: atualizar o YAML do fluxo de trabalho do GitHub Actions
-
-
Em Buildspec:
-
Observe que o buildspec será ignorado, a menos que
buildspec-override:true
seja adicionado como rótulo. Em vez disso, o CodeBuild o substituirá para usar comandos que configurarão o executor auto-hospedado.
-
-
-
Continue com os valores padrão e escolha Criar projeto de compilação.
-
Abra o console do GitHub em
https://github.com/
para verificar se um webhook foi criado e está habilitado para entregar eventos de Trabalhos de fluxo de trabalho.user-name
/repository-name
/settings/hooks
Etapa 2: atualizar o YAML do fluxo de trabalho do GitHub Actions
Nesta etapa, você atualizará o arquivo YAML do fluxo de trabalho do GitHub Actions no GitHub
Atualizar o YAML do fluxo de trabalho do GitHub Actions
Navegue até o GitHub
runs-on
-
Você pode especificar o nome do projeto e o ID da execução. Nesse caso, a compilação usará a configuração do projeto existente para computação, imagem, versão da imagem e tamanho da instância. O nome do projeto é necessário para vincular as configurações relacionadas à AWS do trabalho do GitHub Actions a um projeto específico do CodeBuild. Ao incluir o nome do projeto no YAML, o CodeBuild pode invocar trabalhos com as configurações corretas do projeto. Ao fornecer o ID de execução, o CodeBuild mapeará a compilação para execuções de fluxo de trabalho específicas e interromperá a compilação quando a execução do fluxo de trabalho for cancelada. Para obter mais informações, consulte o contexto do
github
. runs-on: codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }}nota
Verifique se
<project-name>
corresponde ao nome do projeto criado na etapa anterior. Se não corresponder, o CodeBuild não processará o webhook e o fluxo de trabalho do GitHub Actions poderá travar.Veja abaixo um exemplo de YAML do fluxo de trabalho do GitHub Actions:
name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} steps: - run: echo "Hello World!"
-
Você também pode substituir a imagem e o tipo de computação no rótulo. Para obter uma lista das imagens disponíveis, consulte Imagens de computação compatíveis com o executor do GitHub Actions hospedado pelo CodeBuild. O tipo de computação e a imagem no rótulo substituirão as configurações do ambiente no projeto. Para substituir as configurações de ambiente para uma compilação computacional do CodeBuild EC2 ou Lambda, use a seguinte sintaxe:
runs-on: - codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }} - image:<environment-type>
-<image-identifier>
- instance-size:<instance-size>
Veja abaixo um exemplo de YAML do fluxo de trabalho do GitHub Actions:
name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} - image:arm-3.0 - instance-size:small steps: - run: echo "Hello World!"
-
Você pode substituir a frota usada para a compilação no rótulo. Isso substituirá as configurações de frota definidas no projeto para usar a frota especificada. Para obter mais informações, consulte Executar compilações em frotas de capacidade reservada. Para substituir as configurações da frota para uma compilação computacional do Amazon EC2, use a seguinte sintaxe:
runs-on: - codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }} - fleet:<fleet-name>
Para substituir a frota e a imagem usadas para a compilação, use a seguinte sintaxe:
runs-on: - codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }} - fleet:<fleet-name>
- image:<environment-type>
-<image-identifier>
Veja abaixo um exemplo de YAML do fluxo de trabalho do GitHub Actions:
name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} - image:arm-3.0 - instance-size:small steps: - run: echo "Hello World!"
-
Para executar trabalhos do GitHub Actions em uma imagem personalizada, você pode configurar uma imagem personalizada no projeto do CodeBuild e evitar fornecer um rótulo de substituição de imagem. O CodeBuild usará a imagem configurada no projeto se nenhum rótulo de substituição de imagem for fornecido.
-
Como opção, você pode fornecer rótulos além daqueles com que o CodeBuild é compatível. Esses rótulos serão ignorados com o objetivo de substituir os atributos da compilação, mas não falharão na solicitação do webhook. Por exemplo, adicionar
testLabel
como rótulo não impedirá a execução da compilação.
nota
Se uma dependência fornecida por executores hospedados pelo GitHub não estiver disponível no ambiente do CodeBuild, você poderá instalar a dependência usando o GitHub Actions na execução do fluxo de trabalho. Por exemplo, você pode usar a ação setup-python
Execute os comandos buildspec nas fases INSTALL, PRE_BUILD e POST_BUILD
Por padrão, o CodeBuild ignora qualquer comando buildspec ao executar uma compilação auto-hospedada do GitHub Actions. Para executar comandos buildspec durante a compilação, buildspec-override:true
pode ser adicionado como sufixo ao rótulo:
runs-on: - codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }} - buildspec-override:true
Ao usar esse comando, o CodeBuild criará uma pasta chamada actions-runner
na pasta de origem principal do contêiner. Quando o executor do GitHub Actions for iniciado durante a fase BUILD
, o executor será executado no diretório actions-runner
.
Há várias limitações ao usar uma substituição de buildspec em uma compilação auto-hospedada do GitHub Actions:
-
O CodeBuild não executará comandos buildspec durante a fase
BUILD
, pois o executor auto-hospedado é executado na faseBUILD
. -
O CodeBuild não baixará nenhuma fonte primária ou secundária durante a fase
DOWNLOAD_SOURCE
. Se você tiver um arquivo buildspec configurado, somente esse arquivo será baixado da fonte primária do projeto. -
Se um comando de compilação falhar na fase
PRE_BUILD
ouINSTALL
, o CodeBuild não iniciará o executor auto-hospedado e o trabalho do fluxo de trabalho do GitHub Actions precisará ser cancelado manualmente. -
O CodeBuild busca o token do executor durante a fase
DOWNLOAD_SOURCE
, que tem um tempo de expiração de uma hora. Se as fasesPRE_BUILD
ouINSTALL
excederem uma hora, o token do executor poderá expirar antes do início do executor auto-hospedado do GitHub.
Etapa 3: revisar os resultados
Sempre que ocorre a execução de um fluxo de trabalho do GitHub Actions, o CodeBuild recebe os eventos de trabalho do fluxo de trabalho por meio do webhook. Para cada trabalho no fluxo de trabalho, o CodeBuild inicia uma compilação para executar um executor temporário do GitHub Actions. O executor é responsável por executar um único trabalho de fluxo de trabalho. Depois que o trabalho for concluído, o executor e o processo de compilação associado serão encerrados imediatamente.
Para visualizar os logs de trabalho do fluxo de trabalho, navegue até o repositório no GitHub, escolha Ações, selecione o fluxo de trabalho desejado e, em seguida, escolha o Trabalho específico para o qual você gostaria de revisar os logs.
Você pode revisar os rótulos solicitados no log enquanto o trabalho está esperando para ser realizado por um executor auto-hospedado no CodeBuild.
![Carregando o log do trabalho.](images/hello-world-loading.png)
Depois que o trabalho for concluído, você poderá visualizar o log do trabalho.
![O log do trabalho.](images/hello-world-log.png)
Filtrar eventos de webhook do GitHub Actions (AWS CloudFormation)
A seguinte parte formatada em YAML de um modelo do AWS CloudFormation cria um grupo de filtros que aciona uma compilação quando ela é avaliada como verdadeira. O grupo de filtros a seguir especifica uma solicitação de trabalho do fluxo de trabalho do GitHub Actions com um nome de fluxo de trabalho correspondente à expressão regular \[CI-CodeBuild\]
.
CodeBuildProject:
Type: AWS::CodeBuild::Project
Properties:
Name: MyProject
ServiceRole: service-role
Artifacts:
Type: NO_ARTIFACTS
Environment:
Type: LINUX_CONTAINER
ComputeType: BUILD_GENERAL1_SMALL
Image: aws/codebuild/standard:5.0
Source:
Type: GITHUB
Location: CODEBUILD_DEFAULT_WEBHOOK_SOURCE_LOCATION
Triggers:
Webhook: true
ScopeConfiguration:
Name: organization-name
FilterGroups:
- - Type: EVENT
Pattern: WORKFLOW_JOB_QUEUED
- Type: WORKFLOW_NAME
Pattern: \[CI-CodeBuild\]
Filtrar eventos de webhook do GitHub Actions (AWS CDK)
O modelo do AWS CDK a seguir cria um grupo de filtros que aciona uma compilação quando ela é avaliada como verdadeira. O grupo de filtros a seguir especifica uma solicitação de trabalho do fluxo de trabalho do GitHub Actions.
import { aws_codebuild as codebuild } from 'aws-cdk-lib';
import {EventAction, FilterGroup} from "aws-cdk-lib/aws-codebuild";
const source = codebuild.Source.gitHub({
owner: 'owner',
repo: 'repo',
webhook: true,
webhookFilters: [FilterGroup.inEventOf(EventAction.WORKFLOW_JOB_QUEUED)],
})
Filtrar eventos de webhook do GitHub Actions (Terraform)
O modelo do Terraform a seguir cria um grupo de filtros que aciona uma compilação quando ela é avaliada como verdadeira. O grupo de filtros a seguir especifica uma solicitação de trabalho do fluxo de trabalho do GitHub Actions.
resource "aws_codebuild_webhook" "example" {
project_name = aws_codebuild_project.example.name
build_type = "BUILD"
filter_group {
filter {
type = "EVENT"
pattern = "WORKFLOW_JOB_QUEUED"
}
}
}