

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Exemplos baseados em casos de uso do CodeBuild
<a name="use-case-based-samples"></a>

Você pode utilizar esses exemplos baseados em casos de uso para testar o AWS CodeBuild:

[Exemplos entre serviços](cross-service-samples.md)  
Uma lista de exemplos entre serviços para testar com o AWS CodeBuild.

[Exemplo de emblemas de compilação](sample-build-badges.md)  
Mostra como configurar o CodeBuild com emblemas de compilação.

[Exemplo de relatório de teste](sample-test-report-cli.md)  
Usa a AWS CLI para criar, executar e visualizar os resultados de um relatório de teste.

[Amostras do Docker para CodeBuild](sample-docker-section.md)  
Mostra como usar imagens do Docker personalizadas, publicar imagens do Docker em um repositório no Amazon ECR e usar imagens do Docker em um registro privado.

[Saída de compilação hospedada em um bucket do S3 ](sample-disable-artifact-encryption.md)  
Mostra como criar um site estático em um bucket do S3 usando os artefatos de compilação não criptografados.

[ Exemplo de várias entradas e saídas ](sample-multi-in-out.md)  
Mostra como usar várias origens de entrada e vários artefatos de saída em um projeto de compilação.

[ Amostras de execução de testes em paralelo ](sample-parallel-test.md)  
Mostra como usar o comando `codebuild-tests-run` da CLI para dividir e executar testes em ambientes de execução paralelos.

[ Versões do tempo de execução no exemplo de arquivo buildspec ](sample-runtime-versions.md)  
Mostra como especificar tempos de execução e suas versões no arquivo buildspec.

[Exemplo de versão de fonte](sample-source-version.md)  
Mostra como usar uma versão específica da origem em um projeto de compilação do CodeBuild.

[Amostras de repositórios de origem de terceiros para CodeBuild](sample-third-party-source.md)  
Mostra como criar solicitações pull do BitBucket, do GitHub Enterprise Server e do GitHub com webhooks usando o CodeBuild.

[Defina os nomes dos artefatos no momento da compilação usando versionamento semântico](sample-buildspec-artifact-naming.md)  
Mostra como usar versionamento semântico para criar um nome de artefato no momento da compilação.

# Amostras de serviços cruzados para CodeBuild
<a name="cross-service-samples"></a>

Você pode usar esses exemplos de serviços cruzados para fazer experiências com AWS CodeBuild:

[Exemplo do Amazon ECR](sample-ecr.md)  
Usa uma imagem do Docker em um repositório do Amazon ECR para usar o Apache Maven a fim de produzir um único arquivo JAR. As instruções de exemplo mostrarão como criar e enviar uma imagem do Docker para o Amazon ECR, criar um projeto Go, construir o projeto, executar o projeto e configurar permissões CodeBuild para permitir a conexão com o Amazon ECR.

[Exemplo do Amazon EFS](sample-efs.md)  
Mostra como configurar um arquivo buildspec para que um CodeBuild projeto seja montado e construído em um sistema de arquivos Amazon EFS. As instruções de exemplo mostrarão como criar uma Amazon VPC, um sistema de arquivos na Amazon VPC, criar e compilar um projeto que usa a Amazon VPC e, em seguida, analisar o arquivo e as variáveis do projeto gerados. 

[AWS CodePipeline amostras](sample-codepipeline.md)  
Mostra como usar AWS CodePipeline para criar uma compilação com compilações em lote, bem como várias fontes de entrada e vários artefatos de saída. Incluídos nesta seção estão exemplos de arquivos JSON que mostram estruturas de pipeline que criam compilações em lote com artefatos separados e artefatos combinados. É fornecido um exemplo adicional de JSON que mostra a estrutura do pipeline com várias origens de entrada e vários artefatos de saída.

[AWS Config amostra](how-to-integrate-config.md)  
Mostra como configurar AWS Config. Lista quais CodeBuild recursos são monitorados e descreve como pesquisar CodeBuild projetos em AWS Config. Os exemplos de instruções mostrarão os pré-requisitos para a integração AWS Config, as etapas de configuração AWS Config e as etapas para pesquisar CodeBuild projetos e dados. AWS Config

[Exemplo de notificações de compilação](sample-build-notifications.md)  
Usa o Apache Maven para produzir um único arquivo JAR. Envia uma notificação de compilação aos assinantes de um tópico do Amazon SNS. Os exemplos de instruções mostram como configurar permissões para que eles CodeBuild possam se comunicar com o Amazon SNS e CloudWatch como criar e identificar CodeBuild tópicos no Amazon SNS, como inscrever destinatários no tópico e como configurar regras no. CloudWatch

# Exemplo de Amazon ECR para CodeBuild
<a name="sample-ecr"></a>

Este exemplo usa uma imagem do Docker em um repositório de imagens do Amazon Elastic Container Registry (Amazon ECR) para compilar um exemplo do projeto Go.

**Importante**  
A execução dessa amostra pode resultar em cobranças em sua AWS conta. Isso inclui possíveis cobranças por AWS CodeBuild AWS recursos e ações relacionados ao Amazon S3 AWS KMS, CloudWatch Logs e Amazon ECR. Para obter mais informações, consulte [CodeBuild preços, preços](https://aws.amazon.com/codebuild/pricing) do [Amazon S3, preços, preços](https://aws.amazon.com/s3/pricing) da Amazon e [AWS Key Management Service preços](https://aws.amazon.com/kms/pricing) do [Amazon CloudWatch ](https://aws.amazon.com/cloudwatch/pricing) [Elastic Container Registry](https://aws.amazon.com/ecr/pricing).

**Topics**
+ [Execute o exemplo do Amazon ECR](#sample-ecr-running)

## Execute o exemplo do Amazon ECR
<a name="sample-ecr-running"></a>

Use as instruções a seguir para executar a amostra do Amazon ECR para CodeBuild.

**Como executar este exemplo**

1. Para criar e enviar por push uma imagem do Docker para o repositório de imagens no Amazon ECR, siga as etapas na seção [Execute o exemplo “Publicar imagem do Docker no Amazon ECR”](sample-docker.md#sample-docker-running) do [Exemplo “Publicar imagem do Docker no Amazon ECR”](sample-docker.md).

1. Criar um projeto Go 

   1. Crie os arquivos conforme descrito nas [Arquivos do projeto Go](#sample-ecr-go-project-files) seções [Estrutura do projeto Go](#ecr-sample-go-project-file-structure) e deste tópico e, em seguida, carregue-os em um bucket de entrada do S3 ou em um AWS CodeCommit repositório do Bitbucket. GitHub 
**Importante**  
Não faça upload de `(root directory name)`, apenas dos arquivos dentro de `(root directory name)`.   
Se você estiver usando um bucket de entrada do S3, crie um arquivo ZIP que contenha os arquivos e envie-o para o bucket de entrada. Não adicione `(root directory name)` ao arquivo ZIP, apenas aos arquivos dentro de `(root directory name)`.

   1. Crie um projeto de compilação, execute a compilação e exiba as respectivas informações.

      Se você usar o AWS CLI para criar o projeto de construção, a entrada formatada em JSON para o `create-project` comando poderá ser semelhante a essa. (Substitua os espaços reservados com seus próprios valores.)

      ```
      {
        "name": "sample-go-project",
        "source": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-input-bucket/GoSample.zip"
        },
        "artifacts": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-output-bucket",
          "packaging": "ZIP",
          "name": "GoOutputArtifact.zip"
        },
        "environment": {
          "type": "LINUX_CONTAINER",
          "image": "aws/codebuild/standard:5.0",
          "computeType": "BUILD_GENERAL1_SMALL"
        },
        "serviceRole": "arn:aws:iam::account-ID:role/role-name",
        "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
      }
      ```

   1. Para obter o artefato de saída de compilação, abra seu bucket de saída do S3.

   1. Faça o download do arquivo `GoOutputArtifact.zip` para seu computador ou instância local. Extraia o conteúdo do arquivo . Nesse conteúdo, procure o arquivo `hello`. 

1.  Se uma das afirmações a seguir for verdadeira, você deverá adicionar permissões ao seu repositório de imagens no Amazon ECR para que ele AWS CodeBuild possa inserir sua imagem do Docker no ambiente de criação. 
   +  Seu projeto usa CodeBuild credenciais para extrair imagens do Amazon ECR. Isso é indicado por um valor de `CODEBUILD` no atributo `imagePullCredentialsType` de seu `ProjectEnvironment`. 
   +  O projeto usa uma imagem do Amazon ECR entre contas. Nesse caso, o projeto deverá usar o perfil de serviço para extrair imagens do Amazon ECR. Para habilitar esse comportamento, defina o atributo `imagePullCredentialsType` de seu `ProjectEnvironment` como `SERVICE_ROLE`. 

   1. Abra o console do Amazon ECR em [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/).

   1. Na lista de nomes de repositório, escolha o nome do repositório que você criou ou selecionou.

   1. No painel de navegação, selecione **Permissions (Permissões)**, **Edit (Editar)** e **Add statement (Adicionar instrução)**.

   1. Em **Statement name (Nome da instrução)**, digite um identificador (por exemplo, **CodeBuildAccess**).

   1. Em **Effect (Efeito)**, deixe a opção **Allow (Permitir)** selecionada. Isso indica que você deseja permitir o acesso a outra conta da AWS .

   1. Em **Principal**, siga um dos seguintes procedimentos:
      + Se seu projeto usa CodeBuild credenciais para extrair uma imagem do Amazon ECR, em **Service principal**, insira. **codebuild.amazonaws.com** 
      + Se o seu projeto usa uma imagem do Amazon ECR entre contas, como **AWS conta IDs**, insira IDs as AWS contas às quais você deseja conceder acesso.

   1. Ignore a lista **All IAM entities**.

   1. **Em **Ação**, selecione as ações somente de extração: ecr:GetDownloadUrlForLayer, **ecr:** e **ecr:BatchGetImage.** BatchCheckLayerAvailability**

   1. Em **Condições**, adicione o seguinte:

      ```
      {
         "StringEquals":{
            "aws:SourceAccount":"<AWS-account-ID>",
            "aws:SourceArn":"arn:aws:codebuild:<region>:<AWS-account-ID>:project/<project-name>"
         }
      }
      ```

   1. Escolha **Salvar**.

      Essa política é exibida em **Permissions (Permissões)**. O principal é a informação inserida em **Principal** na etapa 3 deste procedimento:
      + Se seu projeto usa CodeBuild credenciais para extrair uma imagem do Amazon ECR, `"codebuild.amazonaws.com"` aparece em Princípios de **serviço**.
      + **Se o seu projeto usa uma imagem do Amazon ECR entre contas, o ID da AWS conta à qual você deseja conceder acesso aparecerá em Conta AWS . IDs**

        O exemplo de política a seguir usa CodeBuild credenciais e uma imagem do Amazon ECR entre contas.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "CodeBuildAccessPrincipal",
                  "Effect": "Allow",
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ],
                  "Resource": "*",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceArn": "arn:aws:codebuild:us-east-1:111122223333:project/MyProject",
                          "aws:SourceAccount": "111122223333"
                      }
                  }
              },
              {
                  "Sid": "CodeBuildAccessCrossAccount",
                  "Effect": "Allow",
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ],
                  "Resource": "*"
              }
          ]
      }
      ```

------
      + Se seus projetos usam CodeBuild credenciais e você gostaria que eles tivessem acesso aberto ao repositório Amazon ECR, você pode omitir `Condition` as chaves e adicionar o seguinte exemplo de política. CodeBuild 

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "CodeBuildAccessPrincipal",
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:codecommit:us-east-2:111122223333:MySharedDemoRepo"
                  ],
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ]
              },
              {
                  "Sid": "CodeBuildAccessCrossAccount",
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:codecommit:us-east-2:111122223333:MySharedDemoRepo"
                  ],
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ]
              }
          ]
      }
      ```

------

1. Crie um projeto de compilação, execute a compilação e exiba suas informações.

   Se você usar o AWS CLI para criar o projeto de construção, a entrada formatada em JSON para o `create-project` comando poderá ser semelhante a essa. (Substitua os espaços reservados com seus próprios valores.)

   ```
   {
     "name": "amazon-ecr-sample-project",
     "source": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-input-bucket/GoSample.zip"
     },
     "artifacts": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-output-bucket",
       "packaging": "ZIP",
       "name": "GoOutputArtifact.zip"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "account-ID.dkr.ecr.region-ID.amazonaws.com/your-Amazon-ECR-repo-name:tag",
       "computeType": "BUILD_GENERAL1_SMALL"
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```

1. Para obter o artefato de saída de compilação, abra seu bucket de saída do S3.

1. Faça o download do arquivo `GoOutputArtifact.zip` para seu computador ou instância local. Extraia o conteúdo do arquivo `GoOutputArtifact.zip`. Nesse conteúdo, procure o arquivo `hello`.

### Estrutura do projeto Go
<a name="ecr-sample-go-project-file-structure"></a>

Essa amostra pressupõe esta estrutura de diretório.

```
(root directory name)
├── buildspec.yml
└── hello.go
```

### Arquivos do projeto Go
<a name="sample-ecr-go-project-files"></a>

Esta amostra usa estes arquivos.

`buildspec.yml` (em `(root directory name)`)

```
version: 0.2

phases:
  install: 
   runtime-versions: 
     golang: 1.13 
  build:
    commands:
      - echo Build started on `date`
      - echo Compiling the Go code
      - go build hello.go 
  post_build:
    commands:
      - echo Build completed on `date`
artifacts:
  files:
    - hello
```

`hello.go` (em `(root directory name)`)

```
package main
import "fmt"

func main() {
  fmt.Println("hello world")
  fmt.Println("1+1 =", 1+1)
  fmt.Println("7.0/3.0 =", 7.0/3.0)
  fmt.Println(true && false)
  fmt.Println(true || false)
  fmt.Println(!true)
}
```

# Exemplo do Amazon Elastic File System para AWS CodeBuild
<a name="sample-efs"></a>

 Talvez você queira criar suas AWS CodeBuild versões no Amazon Elastic File System, um serviço de arquivos compartilhado e escalável para instâncias do Amazon EC2. A capacidade de armazenamento com o Amazon EFS é elástica, portanto, aumenta ou diminui à medida que arquivos são adicionados e removidos. Ela tem uma interface simples de serviços da Web que pode ser usada para criar e configurar sistemas de arquivos. Ela também gerencia toda a infraestrutura de armazenamento de arquivos para você, para que você não precise se preocupar com a implantação, atualização nem com a manutenção das configurações do sistema de arquivos. Para obter mais informações, consulte [What is Amazon Elastic File System?](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) no *Guia do usuário do Amazon Elastic File System*. 

 Este exemplo mostra como configurar um CodeBuild projeto para que ele monte e, em seguida, crie um aplicativo Java em um sistema de arquivos Amazon EFS. Antes de começar, você deve ter um aplicativo Java pronto para ser construído e carregado em um bucket de entrada do S3 ou em um repositório AWS CodeCommit GitHub,, GitHub Enterprise Server ou Bitbucket. 

Os dados em trânsito para o sistema de arquivos estão criptografados. Para criptografar os dados em trânsito usando uma imagem diferente, consulte [Criptografar dados em trânsito](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html). 

**Topics**
+ [Use AWS CodeBuild com o Amazon Elastic File System](#sample-efs-high-level-steps)
+ [Solucionar problemas de integração do Amazon EFS](sample-efs-troubleshooting.md)

## Use AWS CodeBuild com o Amazon Elastic File System
<a name="sample-efs-high-level-steps"></a>

A amostra abrange as quatro etapas de alto nível necessárias para usar o Amazon EFS com AWS CodeBuild. Eles são: 

1. Crie uma nuvem privada virtual (VPC) em sua AWS conta. 

1. Crie um sistema de arquivos que usa essa VPC. 

1. Crie e construa um CodeBuild projeto que use a VPC. O CodeBuild projeto usa o seguinte para identificar o sistema de arquivos:
   +  Um identificador de sistema de arquivos exclusivo. Você escolhe o identificador ao especificar o sistema de arquivos no projeto de compilação.
   + O ID do sistema de arquivos. O ID é exibido quando você visualiza o sistema de arquivos no console do Amazon EFS.
   +  Um ponto de montagem. Este é um diretório no contêiner do Docker que monta o sistema de arquivos. 
   + Opções de montagem. Elas incluem os detalhes sobre como montar o sistema de arquivos.

1. Revise o projeto de compilação para garantir que os arquivos e variáveis corretos do projeto foram gerados.

**nota**  
 Um sistema de arquivos criado no Amazon EFS é compatível somente com as plataformas Linux. 

 

**Topics**
+ [Etapa 1: criar uma VPC usando CloudFormation](#sample-efs-create-vpc)
+ [Etapa 2: criar um sistema de arquivos do Amazon Elastic File System com a VPC](#sample-efs-create-efs)
+ [Etapa 3: criar um CodeBuild projeto para usar com o Amazon EFS](#sample-efs-create-acb)
+ [Etapa 4: revisar o projeto de compilação](#sample-efs-summary)

### Etapa 1: criar uma VPC usando CloudFormation
<a name="sample-efs-create-vpc"></a>

 Crie sua VPC com um CloudFormation modelo. 

1.  Siga as instruções de uso [CloudFormationModelo da VPC do](cloudformation-vpc-template.md) CloudFormation para criar uma VPC. 
**nota**  
 A VPC criada por esse CloudFormation modelo tem duas sub-redes privadas e duas sub-redes públicas. Use somente as sub-redes privadas quando usar o AWS CodeBuild para montar o sistema de arquivos criado no Amazon EFS. Se você usar uma das sub-redes públicas, a compilação falhará. 

1. Faça login no Console de gerenciamento da AWS e abra o console da Amazon VPC em. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)

1.  Escolha a VPC com a qual você criou. CloudFormation

1. Na guia **Description (Descrição)** anote o nome da sua VPC e do ID. Os dois serão necessários quando você criar o projeto do AWS CodeBuild posteriormente neste exemplo. 

### Etapa 2: criar um sistema de arquivos do Amazon Elastic File System com a VPC
<a name="sample-efs-create-efs"></a>

 Crie um sistema de arquivos Amazon EFS simples para esse exemplo usando a VPC criada anteriormente. 

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon EFS em [ https://console.aws.amazon.com/efs/](https://console.aws.amazon.com/efs/).

1.  Escolha **Create file system (Criar sistema de arquivos)**. 

1.  Em **VPC**, escolha o nome da VPC que você anotou anteriormente neste exemplo. 

1.  Deixe as zonas de disponibilidade associadas às suas sub-redes selecionadas. 

1.  Escolha **Próxima etapa**. 

1.  Em **Adicionar tags**, para a chave **Nome**, em **Valor**, insira o nome do sistema de arquivos Amazon EFS. 

1.  Mantenha **Bursting** e **General Purpose (Uso geral)** selecionados como modos padrão de desempenho e de taxa de transferência e selecione **Next Step (Próxima etapa)**. 

1. Para **Configure client access (Configurar acesso de cliente)**, escolha **Next Step (Próxima etapa)**.

1.  Escolha **Criar sistema de arquivos**. 

1.  (Opcional) Recomendamos adicionar uma política ao sistema de arquivos Amazon EFS que imponha a criptografia de dados em trânsito. No console do Amazon EFS, escolha **Política do sistema de arquivos**, escolha **Editar**, selecione a caixa **Aplicar criptografia em trânsito para todos os clientes** e escolha **Salvar**.

### Etapa 3: criar um CodeBuild projeto para usar com o Amazon EFS
<a name="sample-efs-create-acb"></a>

 Crie um AWS CodeBuild projeto que use a VPC que você criou anteriormente neste exemplo. Quando a compilação for executada, ela montará o sistema de arquivos do Amazon EFS criado anteriormente. Depois, armazenará o arquivo .jar criado pelo aplicativo Java no diretório do ponto de montagem do sistema de arquivos.

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1.  No painel de navegação, escolha **Projetos de compilação** e, depois, **Criar projeto de compilação**. 

1.  Em **Nome do projeto**, digite um nome para o seu projeto. 

1.  Em **Provedor de origem**, escolha o repositório que contém o aplicativo Java que você deseja criar. 

1.  Insira informações, como uma URL do repositório, que CodeBuild usa para localizar seu aplicativo. As opções são diferentes para cada provedor de origem. Para obter mais informações, consulte [Choose source provider](create-project.md#create-project-source-provider). 

1.  Em **Environment image (Imagem do ambiente)**, escolha **Managed image (Imagem gerenciada)**. 

1.  Em **Operating system (Sistema operacional)**, escolha **Amazon Linux 2**. 

1. Em **Runtime(s) (Tempo(s) de execução)**, selecione **Standard (Padrão)**. 

1.  Em **Imagem**, escolha **aws/codebuild/amazonlinux-x86\$164-standard:4.0**. 

1.  Em **Environment type (Tipo de ambiente)**, escolha **Linux**. 

1.  Em **Função do serviço**, selecione **Nova função de serviço**. Em **Nome da função**, insira um nome para a função CodeBuild criada para você. 

1. Expanda **Configuração Adicional**.

1.  Selecione **Enable this flag if you want to build Docker images or want your builds to get elevated privileges (Ativar este sinalizador se quiser criar imagens do Docker ou desejar que suas compilações obtenham privilégios elevados)**.
**nota**  
Por padrão, o daemon do Docker está habilitado para compilações não VPC. Se você quiser usar contêineres do Docker para compilações da VPC, consulte [Privilégio de tempo de execução e funcionalidades do Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) no site do Docker Docs e ative o modo privilegiado. Além disso, o Windows não é compatível com o modo privilegiado.

1.  Em **VPC**, escolha o ID do VPC. 

1.  Em **Sub-redes**, escolha uma ou mais sub-redes privadas associadas à VPC. É necessário usar sub-redes privadas em uma compilação que monta um sistema de arquivos Amazon EFS. Se você usar uma sub-rede pública, a compilação falhará. 

1.  Em **Security groups (Grupos de segurança)**, escolha o grupo de segurança padrão.

1.  Em **File systems (Sistemas de arquivo)**, insira as seguintes informações:
   + Em **Identifer (Identificador)**, insira um identificador exclusivo do sistema de arquivos. Deve ter menos de 129 caracteres e conter apenas caracteres alfanuméricos e sublinhados. O CodeBuild usa esse identificador para criar uma variável de ambiente que identifica o sistema de arquivos elástico. O formato da variável de ambiente é `CODEBUILD_<file_system_identifier>` em letras maiúsculas. Por exemplo, se você inserir `my_efs`, a variável de ambiente será `CODEBUILD_MY_EFS`. 
   + Para **ID**, escolha o ID do sistema de arquivos. 
   + (Opcional) Insira um diretório no sistema de arquivos. CodeBuild monta esse diretório. Se você deixar o **Directory path (Caminho do diretório)** em branco, o CodeBuild monta todo o sistema de arquivos. O caminho é relativo à raiz do sistema de arquivos. 
   + Em **Ponto de montagem**, digite o caminho absoluto do diretório no contêiner de compilação onde o sistema de arquivos é montado. Se esse diretório não existir, CodeBuild cria-o durante a compilação. 
   + (Opcional) Insira as opções de montagem. Se você deixar **as opções de montagem** em branco, CodeBuild usa suas opções de montagem padrão:

     ```
     nfsvers=4.1
     rsize=1048576
     wsize=1048576
     hard
     timeo=600
     retrans=2
     ```

     Para obter mais informações, consulte [Recommended NFS Mount Options](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-nfs-mount-settings.html) no *Guia do usuário do Amazon Elastic File System*. 

1.  Em **Build specification (Criar especificação)**, escolha **Insert build commands (Inserir comandos de compilação)** e escolha **Switch to editor (Alternar para editor)**. 

1.  Insira os comandos buildspec a seguir no editor. Substitua `<file_system_identifier>` pelo identificador inserido na etapa 17. Use letras maiúsculas (por exemplo, `CODEBUILD_MY_EFS`).

   ```
   version: 0.2
   phases:
     install:
       runtime-versions:
         java: corretto11    
     build:
       commands:
         - mvn compile -Dgpg.skip=true -Dmaven.repo.local=$CODEBUILD_<file_system_identifier>
   ```

1.  Use os valores padrão para todas as outras configurações e, em seguida, escolha **Criar projeto de compilação**. Quando a compilação estiver concluída, a página do console para o projeto será exibida. 

1.  Selecione **Iniciar compilação**. 

### Etapa 4: revisar o projeto de compilação
<a name="sample-efs-summary"></a>



 Depois que seu AWS CodeBuild projeto for construído: 
+  Você terá um arquivo .jar criado pela aplicação Java criada para o sistema de arquivos Amazon EFS no diretório do ponto de montagem. 
+  Uma variável de ambiente que identifica o sistema de arquivos é criada usando o identificador de sistema de arquivos inserido quando o projeto foi criado. 

 Para obter mais informações, consulte [Mounting file systems](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs.html) no *Guia do usuário do Amazon Elastic File System*. 

# Solucionar problemas de integração do Amazon EFS
<a name="sample-efs-troubleshooting"></a>

A seguir estão os erros que você pode encontrar ao configurar o Amazon EFS com CodeBuild.

**Topics**
+ [CLIENT\$1ERROR: falha na montagem de “127.0.0.1: /”. Permissão negada](#sample-efs-troubleshooting.permission-denied)
+ [CLIENT\$1ERROR: falha na montagem de “127.0.0.1: /”. Conexão redefinida pelo par](#sample-efs-troubleshooting.connection-reset)
+ [VPC\$1CLIENT\$1ERROR: erro inesperado do EC2: UnauthorizedOperation](#sample-efs-troubleshooting.unauthorized-operation)

## CLIENT\$1ERROR: falha na montagem de “127.0.0.1: /”. Permissão negada
<a name="sample-efs-troubleshooting.permission-denied"></a>

A autorização do IAM não é suportada para montar o Amazon EFS com CodeBuild. Se você estiver usando uma política personalizada do sistema de arquivos do Amazon EFS, precisará conceder acesso de leitura e gravação a todas as entidades principais do IAM. Por exemplo:

```
"Principal": {
  "AWS": "*"
}
```

## CLIENT\$1ERROR: falha na montagem de “127.0.0.1: /”. Conexão redefinida pelo par
<a name="sample-efs-troubleshooting.connection-reset"></a>

Há duas causas possíveis para esse erro:
+ A sub-rede CodeBuild VPC está em uma zona de disponibilidade diferente do destino de montagem do Amazon EFS. É possível resolver isso incluindo uma sub-rede da VPC na mesma zona de disponibilidade do destino de montagem do Amazon EFS.
+ O grupo de segurança não tem permissões para se comunicar com o Amazon EFS. É possível resolver isso adicionando uma regra de entrada para viabilizar todo o tráfego da VPC (adicione o bloco CIDR primário da VPC) ou do próprio grupo de segurança.

## VPC\$1CLIENT\$1ERROR: erro inesperado do EC2: UnauthorizedOperation
<a name="sample-efs-troubleshooting.unauthorized-operation"></a>

Esse erro ocorre quando todas as sub-redes em sua configuração de VPC para o CodeBuild projeto são sub-redes públicas. É necessário ter, pelo menos, uma sub-rede privada na VPC para garantir a conectividade de rede. 

# AWS CodePipeline amostras para CodeBuild
<a name="sample-codepipeline"></a>

Esta seção descreve exemplos de integrações entre CodePipeline e. CodeBuild


| Amostra | Description | 
| --- | --- | 
|  [Amostras de CodePipeline/CodeBuild integrações e compilações em lote](#sample-pipeline-batch)  |  Esses exemplos demonstram como usar AWS CodePipeline para criar um projeto de compilação que usa compilações em lote.  | 
|  [Amostra de uma CodePipeline/CodeBuild integração com várias fontes de entrada e artefatos de saída](#sample-pipeline-multi-input-output)  |  Este exemplo demonstra como usar AWS CodePipeline para criar um projeto de construção que usa várias fontes de entrada para criar vários artefatos de saída.  | 

## Amostras de CodePipeline/CodeBuild integrações e compilações em lote
<a name="sample-pipeline-batch"></a>

AWS CodeBuild suporta compilações em lote. Os exemplos a seguir demonstram como usar AWS CodePipeline para criar um projeto de compilação que usa compilações em lote.

Você pode usar um arquivo formatado em JSON que define a estrutura do seu pipeline e, em seguida, usá-lo com o AWS CLI para criar o pipeline. Para obter mais informações, consulte [AWS CodePipeline Pipeline structure reference](https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html) no *Guia do usuário do AWS CodePipeline *.

### Compilação em lote com artefatos individuais
<a name="sample-pipeline-batch.separate-artifacts"></a>

Use o arquivo JSON a seguir como exemplo de uma estrutura de pipeline que cria uma compilação em lote com artefatos separados. Para habilitar a criação em lote CodePipeline, defina o `BatchEnabled` parâmetro do `configuration` objeto como`true`.

```
{
  "pipeline": {
    "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
    "stages": [
      {
        "name": "Source",
        "actions": [
          {
            "inputArtifacts": [],
            "name": "Source1",
            "actionTypeId": {
              "category": "Source",
              "owner": "AWS",
              "version": "1",
              "provider": "S3"
            },
            "outputArtifacts": [
              {
                "name": "source1"
              }
            ],
            "configuration": {
              "S3Bucket": "<my-input-bucket-name>",
              "S3ObjectKey": "my-source-code-file-name.zip"
            },
            "runOrder": 1
          },
          {
            "inputArtifacts": [],
            "name": "Source2",
            "actionTypeId": {
              "category": "Source",
              "owner": "AWS",
              "version": "1",
              "provider": "S3"
            },
            "outputArtifacts": [
              {
                "name": "source2"
              }
            ],
            "configuration": {
              "S3Bucket": "<my-other-input-bucket-name>",
              "S3ObjectKey": "my-other-source-code-file-name.zip"
            },
            "runOrder": 1
          }
        ]
      },
      {
        "name": "Build",
        "actions": [
          {
            "inputArtifacts": [
              {
                "name": "source1"
              },
              {
                "name": "source2"
              }
            ],
            "name": "Build",
            "actionTypeId": {
              "category": "Build",
              "owner": "AWS",
              "version": "1",
              "provider": "CodeBuild"
            },
            "outputArtifacts": [
              {
                "name": "build1"
              },
              {
                "name": "build1_artifact1"
              },
              {
                "name": "build1_artifact2"
              },
              {
                "name": "build2_artifact1"
              },
              {
                "name": "build2_artifact2"
              }
            ],
            "configuration": {
              "ProjectName": "my-build-project-name",
              "PrimarySource": "source1",
              "BatchEnabled": "true"
            },
            "runOrder": 1
          }
        ]
      }
    ],
    "artifactStore": {
      "type": "S3",
      "location": "<AWS-CodePipeline-internal-bucket-name>"
    },
    "name": "my-pipeline-name",
    "version": 1
  }
}
```

Veja a seguir um exemplo de um arquivo CodeBuild buildspec que funcionará com essa configuração de pipeline.

```
version: 0.2
batch:
  build-list:
    - identifier: build1
      env:
        compute-type: BUILD_GENERAL1_SMALL
    - identifier: build2
      env:
        compute-type: BUILD_GENERAL1_MEDIUM

phases:
  build:
    commands:
      - echo 'file' > output_file

artifacts:
  files:
    - output_file
  secondary-artifacts:
    artifact1:
      files:
        - output_file
    artifact2:
      files:
        - output_file
```

Os nomes dos artefatos de saída especificados no arquivo JSON do pipeline devem coincidir com o identificador das compilações e dos artefatos definidos no arquivo buildspec. A sintaxe é *buildIdentifier* para os artefatos primários e *buildIdentifier* \$1 *artifactIdentifier* para os artefatos secundários.

Por exemplo, para o nome do artefato de saída`build1`, CodeBuild fará o upload do artefato primário de `build1` para o local de. `build1` Para o nome de saída`build1_artifact1`, CodeBuild fará o upload do artefato secundário `artifact1` de `build1` para o local de`build1_artifact1`, e assim por diante. Se somente um local de saída for especificado, o nome deverá ser *buildIdentifier* somente.

Depois que você criar o arquivo JSON, poderá criar o pipeline. Use o AWS CLI para executar o comando **create-pipeline** e passar o arquivo para o parâmetro. `--cli-input-json` Para obter mais informações, consulte [Create a pipeline (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli) no *Guia do usuário do AWS CodePipeline *. 

### Compilação em lote com artefatos combinados
<a name="sample-pipeline-batch.combined-artifacts"></a>

Use o arquivo JSON a seguir como exemplo de uma estrutura de pipeline que cria uma compilação em lote com artefatos combinados. Para habilitar a criação em lote CodePipeline, defina o `BatchEnabled` parâmetro do `configuration` objeto como`true`. Para combinar os artefatos de compilação no mesmo local, defina o parâmetro `CombineArtifacts` do objeto `configuration` como `true`.

```
{
 "pipeline": {
  "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
  "stages": [
    {
      "name": "Source",
      "actions": [
        {
          "inputArtifacts": [],
          "name": "Source1",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source1"
            }
          ],
          "configuration": {
            "S3Bucket": "<my-input-bucket-name>",
            "S3ObjectKey": "my-source-code-file-name.zip"
          },
          "runOrder": 1
        },
        {
          "inputArtifacts": [],
          "name": "Source2",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source2"
            }
          ],
          "configuration": {
            "S3Bucket": "<my-other-input-bucket-name>",
            "S3ObjectKey": "my-other-source-code-file-name.zip"
          },
          "runOrder": 1
        }
      ]
    },
    {
      "name": "Build",
      "actions": [
        {
          "inputArtifacts": [
            {
              "name": "source1"
            },
            {
              "name": "source2"
            }
          ],
          "name": "Build",
          "actionTypeId": {
            "category": "Build",
            "owner": "AWS",
            "version": "1",
            "provider": "CodeBuild"
          },
          "outputArtifacts": [
            {
              "name": "output1 "
            }
          ],
          "configuration": {
            "ProjectName": "my-build-project-name",
            "PrimarySource": "source1",
             "BatchEnabled": "true",
             "CombineArtifacts": "true"
          },
          "runOrder": 1
        }
      ]
    }
  ],
  "artifactStore": {
    "type": "S3",
    "location": "<AWS-CodePipeline-internal-bucket-name>"
  },
  "name": "my-pipeline-name",
  "version": 1
 }
}
```

Veja a seguir um exemplo de um arquivo CodeBuild buildspec que funcionará com essa configuração de pipeline.

```
version: 0.2
batch:
  build-list:
    - identifier: build1
      env:
        compute-type: BUILD_GENERAL1_SMALL
    - identifier: build2
      env:
        compute-type: BUILD_GENERAL1_MEDIUM

phases:
  build:
    commands:
      - echo 'file' > output_file

artifacts:
  files:
    - output_file
```

Se os artefatos combinados estiverem habilitados para a construção em lote, haverá somente uma saída permitida. CodeBuild combinará os artefatos primários de todas as compilações em um único arquivo ZIP.

Depois que você criar o arquivo JSON, poderá criar o pipeline. Use o AWS CLI para executar o comando **create-pipeline** e passar o arquivo para o parâmetro. `--cli-input-json` Para obter mais informações, consulte [Criar um pipeline (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli) no *Guia do usuário do AWS CodePipeline *. 

## Amostra de uma CodePipeline/CodeBuild integração com várias fontes de entrada e artefatos de saída
<a name="sample-pipeline-multi-input-output"></a>

Um AWS CodeBuild projeto pode usar mais de uma fonte de entrada. Ele também pode criar mais de um artefato de saída. Este exemplo demonstra como usar AWS CodePipeline para criar um projeto de construção que usa várias fontes de entrada para criar vários artefatos de saída. Para obter mais informações, consulte [Várias fontes de entrada e exemplos de artefatos de saída](sample-multi-in-out.md).

Você pode usar um arquivo formatado em JSON que define a estrutura do seu pipeline e, em seguida, usá-lo com o AWS CLI para criar o pipeline. Use o seguinte arquivo JSON como um exemplo de estrutura de pipeline que cria uma compilação com mais de uma origem de entrada e mais de um artefato de saída. Mais adiante neste exemplo, você verá como este arquivo especifica as várias entradas e saídas. Para obter mais informações, consulte a [referência da estrutura do CodePipeline pipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html) no *Guia AWS CodePipeline do usuário*.

```
{
 "pipeline": {
  "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
  "stages": [
    {
      "name": "Source",
      "actions": [
        {
          "inputArtifacts": [],
          "name": "Source1",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source1"
            }
          ],
          "configuration": {
            "S3Bucket": "my-input-bucket-name",
            "S3ObjectKey": "my-source-code-file-name.zip"
          },
          "runOrder": 1
        },
        {
          "inputArtifacts": [],
          "name": "Source2",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source2"
            }
          ],
          "configuration": {
            "S3Bucket": "my-other-input-bucket-name",
            "S3ObjectKey": "my-other-source-code-file-name.zip"
          },
          "runOrder": 1
        }
      ]
    },
    {
      "name": "Build",
      "actions": [
        {
          "inputArtifacts": [
            {
              "name": "source1"
            },
            {
              "name": "source2"
            }
          ],
          "name": "Build",
          "actionTypeId": {
            "category": "Build",
            "owner": "AWS",
            "version": "1",
            "provider": "AWS CodeBuild"
          },
          "outputArtifacts": [
            {
              "name": "artifact1"
            },
            {
              "name": "artifact2"
            }
          ],
          "configuration": {
            "ProjectName": "my-build-project-name",
            "PrimarySource": "source1"
          },
          "runOrder": 1
        }
      ]
    }
  ],
  "artifactStore": {
    "type": "S3",
    "location": "AWS-CodePipeline-internal-bucket-name"
  },
  "name": "my-pipeline-name",
  "version": 1
 }
}
```

 Neste arquivo JSON: 
+ Uma das suas origens de entrada deve ser designada como `PrimarySource`. Essa fonte é o diretório em que CodeBuild procura e executa seu arquivo buildspec. A palavra-chave `PrimarySource` é usada para especificar a fonte primária na `configuration` seção do CodeBuild estágio no arquivo JSON. 
+ Cada origem de entrada é instalada em seu próprio diretório. Esse diretório é armazenado na variável de ambiente interna `$CODEBUILD_SRC_DIR` para a origem principal e `$CODEBUILD_SRC_DIR_yourInputArtifactName` para todas as outras origens. Para o pipeline neste exemplo, os dois diretórios da origem de entrada são `$CODEBUILD_SRC_DIR` e `$CODEBUILD_SRC_DIR_source2`. Para obter mais informações, consulte [Variáveis de ambiente em ambientes de compilação](build-env-ref-env-vars.md). 
+ Os nomes dos artefatos de saída especificados no arquivo JSON do pipeline devem coincidir com os nomes dos artefatos secundários definidos no arquivo buildspec. Esse pipeline usa o arquivo buildspec a seguir: Para obter mais informações, consulte [Sintaxe de buildspec](build-spec-ref.md#build-spec-ref-syntax). 

  ```
  version: 0.2
  
  phases:
    build:
      commands:
        - touch source1_file
        - cd $CODEBUILD_SRC_DIR_source2
        - touch source2_file
  
  artifacts:
    files:
      - '**/*'
    secondary-artifacts:
      artifact1:
        base-directory: $CODEBUILD_SRC_DIR
        files:
          - source1_file
      artifact2:
        base-directory: $CODEBUILD_SRC_DIR_source2
        files:
          - source2_file
  ```

 Depois que você criar o arquivo JSON, poderá criar o pipeline. Use o AWS CLI para executar o comando **create-pipeline** e passar o arquivo para o parâmetro. `--cli-input-json` Para obter mais informações, consulte [Criar um pipeline (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli) no *Guia do usuário do AWS CodePipeline *. 

# AWS Config amostra com CodeBuild
<a name="how-to-integrate-config"></a>

AWS Config fornece um inventário de seus AWS recursos e um histórico das alterações de configuração desses recursos. AWS Config agora oferece suporte AWS CodeBuild como um AWS recurso, o que significa que o serviço pode rastrear seus CodeBuild projetos. Para obter mais informações sobre AWS Config, consulte [O que é AWS Config?](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) no *Guia do AWS Config desenvolvedor*.

Você pode ver as seguintes informações sobre CodeBuild recursos na página **Inventário de Recursos** no AWS Config console:
+ Uma linha do tempo de suas alterações de CodeBuild configuração.
+ Detalhes de configuração para cada CodeBuild projeto.
+ Relacionamentos com outros AWS recursos.
+ Uma lista de mudanças em seus CodeBuild projetos.

**Topics**
+ [Use CodeBuild com AWS Config](#how-to-integrate-config-run)
+ [Etapa 3: Exibir AWS CodeBuild dados no AWS Config console](#viewing-config-details)

## Use CodeBuild com AWS Config
<a name="how-to-integrate-config-run"></a>

Os procedimentos deste tópico mostram como configurar AWS Config e pesquisar CodeBuild projetos.

**Topics**
+ [Pré-requisitos](#how-to-create-a-build-project)
+ [Etapa 1: configurar AWS Config](#setup-config)
+ [Etapa 2: pesquisar AWS CodeBuild projetos](#lookup-projects)

### Pré-requisitos
<a name="how-to-create-a-build-project"></a>

Crie seu AWS CodeBuild projeto. Para instruções, consulte [Criar um projeto de compilação](create-project.md).

### Etapa 1: configurar AWS Config
<a name="setup-config"></a>
+ [Configuração do AWS Config (console)](https://docs.aws.amazon.com/config/latest/developerguide/gs-console.html)
+ [Configuração do AWS Config (AWS CLI)](https://docs.aws.amazon.com/config/latest/developerguide/gs-cli.html)

**nota**  
Depois de concluir a configuração, pode levar até 10 minutos para que você possa ver os AWS CodeBuild projetos no AWS Config console.

### Etapa 2: pesquisar AWS CodeBuild projetos
<a name="lookup-projects"></a>

1. Faça login no AWS Management Console e abra o AWS Config console em [https://console.aws.amazon.com/config.](https://console.aws.amazon.com/config) 

1. Na página **Inventário de recursos**, selecione **AWS CodeBuild Projeto** em **Tipo de recurso**. Role para baixo e marque a caixa de seleção **CodeBuilddo projeto**.

1. Escolha **Look up**.

1. Depois que a lista de CodeBuild projetos for adicionada, escolha o link do nome do CodeBuild projeto na coluna **Config timeline**.

## Etapa 3: Exibir AWS CodeBuild dados no AWS Config console
<a name="viewing-config-details"></a>

Ao pesquisar recursos na página **Inventário de recursos**, você pode escolher o AWS Config cronograma para ver detalhes sobre seu CodeBuild projeto. A página de detalhes de um recurso fornece informações sobre a configuração, os relacionamentos e o número de alterações feitas nesse recurso. 

Os blocos na parte superior da página são coletivamente chamados de cronograma. A linha do tempo mostra a data e a hora em que o registro foi feito.

Para obter mais informações, consulte [Visualização dos detalhes da configuração no AWS Config console](https://docs.aws.amazon.com/config/latest/developerguide/view-manage-resource-console.html) no *Guia do AWS Config desenvolvedor*.

# Crie uma amostra de notificações para CodeBuild
<a name="sample-build-notifications"></a>

O Amazon CloudWatch Events tem suporte integrado para AWS CodeBuild. CloudWatch Eventos é um fluxo de eventos do sistema que descreve as mudanças em seus AWS recursos. Com CloudWatch os Eventos, você escreve regras declarativas para associar eventos de interesse às ações automatizadas a serem tomadas. Este exemplo usa o Amazon CloudWatch Events e o Amazon Simple Notification Service (Amazon SNS) para enviar notificações de compilação aos assinantes sempre que as compilações forem bem-sucedidas, falharem, passarem de uma fase de construção para outra ou qualquer combinação desses eventos.

**Importante**  
A execução dessa amostra pode resultar em cobranças em sua AWS conta. Isso inclui possíveis cobranças por CodeBuild e por AWS recursos e ações relacionados à Amazon CloudWatch e ao Amazon SNS. Para obter mais informações, consulte [CodeBuild preços, CloudWatch preços](https://aws.amazon.com/codebuild/pricing) [da Amazon](https://aws.amazon.com/cloudwatch/pricing) e preços do [Amazon SNS](https://aws.amazon.com/sns/pricing).

**Topics**
+ [Execute o exemplo de notificações de compilação](#sample-build-notifications-running)
+ [Referência do formato de entrada das notificações de compilação](sample-build-notifications-ref.md)

## Execute o exemplo de notificações de compilação
<a name="sample-build-notifications-running"></a>

Use o procedimento a seguir para executar o exemplo de notificações de compilação.

**Como executar este exemplo**

1. Se você já tem uma configuração de tópicos e assinou o Amazon SNS que deseja usar para este exemplo, vá para a etapa 4. Caso contrário, se você estiver usando um usuário do IAM em vez de uma conta AWS raiz ou um usuário administrador para trabalhar com o Amazon SNS, adicione a seguinte declaração (entre *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* e*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) ao usuário (ou grupo do IAM ao qual o usuário está associado). Não é recomendável usar uma conta AWS root. Essa declaração permite a visualização, a criação, a assinatura e o teste do envio de notificações a tópicos no Amazon SNS. As elipses (`...`) são usadas para agilizar e para ajudá-lo a encontrar onde adicionar a declaração. Não remova nenhuma declaração e não digite essas elipses na política existente.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sns:CreateTopic",
                   "sns:GetTopicAttributes",
                   "sns:List*",
                   "sns:Publish",
                   "sns:SetTopicAttributes",
                   "sns:Subscribe"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------
**nota**  
A entidade do IAM que modifica essa política deve ter permissão no IAM para alterar políticas.  
Para obter mais informações, consulte [Editing customer managed policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#edit-managed-policy-console) ou a seção “To edit or delete an inline policy for a group, user, or role” em [Working with inline policies (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) no *Guia do usuário do IAM*.

1. Crie ou identifique um tópico no Amazon SNS. AWS CodeBuild usa CloudWatch Eventos para enviar notificações de criação para esse tópico por meio do Amazon SNS. 

   Para criar um tópico:

   1. [Abra o console do Amazon SNS em https://console.aws.amazon.com /sns.](https://console.aws.amazon.com/sns)

   1. Escolha **Criar tópico**. 

   1. Em **Create new topic (Criar novo tópico)**, em **Topic name (Nome do tópico)**, insira um nome para o tópico (por exemplo, **CodeBuildDemoTopic**). (Se escolher um nome diferente, substitua-o ao longo desse exemplo.) 

   1. Escolha **Criar tópico**.

   1. Na CodeBuildDemoTopic página **Detalhes do tópico:**, copie o valor do **ARN do tópico**. Você precisa desse valor na próxima etapa. 

        
![\[O valor do ARN do tópico.\]](http://docs.aws.amazon.com/pt_br/codebuild/latest/userguide/images/topic-arn.png)

      

   Para obter mais informações, consulte [Create a topic](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) no *Guia do desenvolvedor do SNS*.

1. Faça a assinatura de um ou mais destinatários para o tópico para que recebam notificações por e-mail. 

   Para fazer a assinatura de um destinatário para um tópico:

   1. Com o console do Amazon SNS aberto na etapa anterior, no painel de navegação, selecione **Assinaturas** e **Criar assinatura**.

   1. Em **Create subscription (Criar assinatura)**, em **Topic ARN (Tópico ARN)**, cole o ARN do tópico que você copiou da etapa anterior.

   1. Em **Protocolo**, escolha **E-mail**.

   1. Em **Endpoint**, insira o endereço de e-mail completo do destinatário. 

        
![\[A configuração da assinatura.\]](http://docs.aws.amazon.com/pt_br/codebuild/latest/userguide/images/create-subscription.png)

      

   1. Escolha **Criar assinatura**.

   1. O Amazon SNS envia um e-mail de confirmação de assinatura ao destinatário. Para começar a receber notificações por e-mail, o destinatário deve escolher o link **Confirm subscription** no e-mail de confirmação da assinatura. Assim que o destinatário clicar no link, se assinado com êxito, o Amazon SNS exibirá uma mensagem de confirmação no navegador web do destinatário.

   Para obter mais informações, consulte [Subscribe to a topic](https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html) no *Guia do desenvolvedor do Amazon SNS*.

1. Se você estiver usando um usuário em vez de uma conta AWS raiz ou um usuário administrador para trabalhar com CloudWatch Eventos, adicione a seguinte declaração (entre *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* e*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) ao usuário (ou grupo do IAM ao qual o usuário está associado). Não é recomendável usar uma conta AWS root. Essa declaração é usada para permitir que o usuário trabalhe com CloudWatch Eventos. As elipses (`...`) são usadas para agilizar e para ajudá-lo a encontrar onde adicionar a declaração. Não remova nenhuma declaração e não digite essas elipses na política existente.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "events:*",
                   "iam:PassRole"
               ],
               "Resource": "arn:aws:iam::*:role/Service*"
           }
       ]
   }
   ```

------
**nota**  
A entidade do IAM que modifica essa política deve ter permissão no IAM para alterar políticas.  
Para obter mais informações, consulte [Editing customer managed policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#edit-managed-policy-console) ou a seção “To edit or delete an inline policy for a group, user, or role” em [Working with inline policies (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) no *Guia do usuário do IAM*.

1. Crie uma regra em CloudWatch Eventos. Para fazer isso, abra o CloudWatch console em [https://console.aws.amazon.com/cloudwatch](https://console.aws.amazon.com/cloudwatch).

1. No painel de navegação, em **Events**, escolha **Rules** e **Create rule**. 

1. Na **Step 1: Create rule page (página Etapa 1: criar regra)**, **Event Pattern (Padrão de evento)** e **Build event pattern to match events by service (Criar padrão de eventos para corresponder a eventos por serviço)** já devem estar selecionados. 

1. Em **Nome do serviço**, escolha **CodeBuild**. Em **Event Type (Tipo de evento)**, **All Events (Todos os eventos)** já deve estar selecionado.

1. O código a seguir deve ser exibido na **Event Pattern Preview (Visualização do padrão de evento)**:

   ```
   {
     "source": [ 
       "aws.codebuild"
     ]
   }
   ```

1. Escolha **Edit (Editar)** e substitua o código na **Event Pattern Preview (Visualização do padrão de evento)** por um dos dois padrões de regra a seguir.

   Esse primeiro padrão de regra aciona um evento quando uma compilação é iniciada ou concluída, para os projetos de compilação especificados no AWS CodeBuild.

   ```
   {
     "source": [ 
       "aws.codebuild"
     ], 
     "detail-type": [
       "CodeBuild Build State Change"
     ],
     "detail": {
       "build-status": [
         "IN_PROGRESS",
         "SUCCEEDED", 
         "FAILED",
         "STOPPED" 
       ],
       "project-name": [
         "my-demo-project-1",
         "my-demo-project-2"
       ]
     }  
   }
   ```

   Na regra anterior, faça as alterações no código a seguir conforme necessário.
   + Para acionar um evento quando uma compilação é iniciada ou concluída, deixe todos os valores conforme mostrado na matriz `build-status` ou remova a matriz `build-status` junto. 
   + Para acionar um evento somente quando uma compilação for concluída, remova `IN_PROGRESS` da matriz `build-status`. 
   + Para acionar um evento somente quando uma compilação é iniciada, remova todos os valores, exceto `IN_PROGRESS` da matriz `build-status`.
   + Para acionar eventos para todos os projetos de compilação, remova a matriz `project-name` junto.
   + Para acionar eventos apenas para projetos de compilação individuais, especifique o nome de cada projeto de compilação na matriz `project-name`. 

   Esse segundo padrão de regra aciona um evento sempre que uma compilação passa de uma fase de compilação para outra, para os projetos de compilação especificados no AWS CodeBuild.

   ```
   {
     "source": [ 
       "aws.codebuild"
     ], 
     "detail-type": [
       "CodeBuild Build Phase Change" 
     ],
     "detail": {
       "completed-phase": [
         "SUBMITTED",
         "PROVISIONING",
         "DOWNLOAD_SOURCE",
         "INSTALL",
         "PRE_BUILD",
         "BUILD",
         "POST_BUILD",
         "UPLOAD_ARTIFACTS",
         "FINALIZING"
       ],
       "completed-phase-status": [
         "TIMED_OUT",
         "STOPPED",
         "FAILED", 
         "SUCCEEDED",
         "FAULT",
         "CLIENT_ERROR"
       ],
       "project-name": [
         "my-demo-project-1",
         "my-demo-project-2"
       ]
     }  
   }
   ```

   Na regra anterior, faça as alterações no código a seguir conforme necessário.
   + Para acionar um evento para cada alteração na fase de compilação (que pode enviar até nove notificações para cada compilação), deixe todos os valores conforme mostrado na matriz `completed-phase` ou remova a matriz `completed-phase` junto.
   + Para acionar eventos apenas para alterações feitas na fase de compilação individuais, remova o nome de cada fase de compilação na matriz `completed-phase` para a qual você não deseja acionar um evento.
   + Para acionar um evento para cada alteração feita no status da fase de compilação, deixe todos os valores conforme mostrado na matriz `completed-phase-status` ou remova a matriz `completed-phase-status` junto.
   + Para acionar eventos apenas para alterações feitas no status da fase de compilação individuais, remova o nome de cada status da fase de compilação na matriz `completed-phase-status` para a qual você não deseja acionar um evento.
   + Para acionar eventos para todos os projetos de compilação, remova a matriz `project-name`.
   + Para acionar eventos para projetos de compilação individuais, especifique o nome de cada projeto de compilação na matriz `project-name`. 

   Para obter mais informações sobre padrões de eventos, consulte [Padrões de eventos](https://docs.aws.amazon.com/eventbridge/latest/userguide/filtering-examples-structure.html) no Guia EventBridge do usuário da Amazon.

   Para obter mais informações sobre a filtragem com padrões de eventos, consulte [Filtragem baseada em conteúdo com padrões de eventos no Guia](https://docs.aws.amazon.com/eventbridge/latest/userguide/content-filtering-with-event-patterns.html) do usuário da Amazon EventBridge .
**nota**  
Se quiser acionar eventos para alterações feitas no estado de compilação e alterações na fase de compilação, é necessário criar duas regras à parte: uma para alterações feitas no estado da compilação e outra para alterações feitas na fase de compilação. Se você tentar integrar ambas as regras em uma única, a regra combinada poderá produzir resultados inesperados ou deixar de funcionar em conjunto.

   Quando você tiver concluído a substituição do código, escolha **Save**.

1. Em **Targets**, escolha **Add target**. 

1. Na lista de destinos, escolha **SNS topic**. 

1. Em **Topic**, escolha o tópico que você identificou ou criou anteriormente. 

1. Expanda **Configure input** e escolha **Input Transformer**. 

1. Na caixa **Input Path (Caminho de entrada)**, digite um dos caminhos de entrada a seguir.

   Para uma regra com um valor `detail-type` de `CodeBuild Build State Change`, insira o seguinte.

   ```
   {"build-id":"$.detail.build-id","project-name":"$.detail.project-name","build-status":"$.detail.build-status"}
   ```

   Para uma regra com um valor `detail-type` de `CodeBuild Build Phase Change`, insira o seguinte.

   ```
   {"build-id":"$.detail.build-id","project-name":"$.detail.project-name","completed-phase":"$.detail.completed-phase","completed-phase-status":"$.detail.completed-phase-status"}
   ```

   Para obter outros tipos de informações, consulte [Referência do formato de entrada das notificações de compilação](sample-build-notifications-ref.md).

1. Na caixa **Input Template (Modelo de entrada)**, insira um dos modelos de entrada.

   Para uma regra com um valor `detail-type` de `CodeBuild Build State Change`, insira o seguinte.

   ```
   "Build '<build-id>' for build project '<project-name>' has reached the build status of '<build-status>'."
   ```

   Para uma regra com um valor `detail-type` de `CodeBuild Build Phase Change`, insira o seguinte.

   ```
   "Build '<build-id>' for build project '<project-name>' has completed the build phase of '<completed-phase>' with a status of '<completed-phase-status>'."
   ```

1. Escolha **Configure details (Configurar detalhes)**.

1. Na página **Step 2: Configure rule details (Etapa 2: configurar detalhes da regra)** insira um nome e uma descrição opcional. Em **State (Estado)**, deixe **Enabled (Habilitado)** selecionado.

1. Escolha **Criar regra**. 

1. Crie projetos de compilação, execute as compilações e exiba as informações de compilação.

1. Confirme se agora CodeBuild está enviando notificações de compilação com sucesso. Por exemplo, verifique se agora os e-mails de notificação de compilação estão em sua caixa de entrada.

Para alterar o comportamento de uma regra, no CloudWatch console, escolha a regra que você deseja alterar, escolha **Ações** e, em seguida, escolha **Editar**. Faça alterações na regra e escolha **Configure details (Configurar detalhes)** e **Update rule (Atualizar regra)**.

Para parar de usar uma regra para enviar notificações de compilação, no CloudWatch console, escolha a regra que você deseja parar de usar, escolha **Ações** e, em seguida, escolha **Desativar**.

Para excluir completamente uma regra, no CloudWatch console, escolha a regra que você deseja excluir, escolha **Ações** e, em seguida, escolha **Excluir**.

# Referência do formato de entrada das notificações de compilação
<a name="sample-build-notifications-ref"></a>

CloudWatch entrega notificações no formato JSON.

As notificações de alteração feita no estado da compilação usam o seguinte formato:

```
{
  "version": "0",
  "id": "c030038d-8c4d-6141-9545-00ff7b7153EX",
  "detail-type": "CodeBuild Build State Change",
  "source": "aws.codebuild",
  "account": "123456789012",
  "time": "2017-09-01T16:14:28Z",
  "region": "us-west-2",
  "resources":[
    "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX"
  ],
  "detail":{
    "build-status": "SUCCEEDED",
    "project-name": "my-sample-project",
    "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX",
    "additional-information": {
      "artifact": {
        "md5sum": "da9c44c8a9a3cd4b443126e823168fEX",
        "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX",
        "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip"
      },
      "environment": {
        "image": "aws/codebuild/standard:5.0",
        "privileged-mode": false,
        "compute-type": "BUILD_GENERAL1_SMALL",
        "type": "LINUX_CONTAINER",
        "environment-variables": []
      },
      "timeout-in-minutes": 60,
      "build-complete": true,
      "initiator": "MyCodeBuildDemoUser",
      "build-start-time": "Sep 1, 2017 4:12:29 PM",
      "source": {
        "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip",
        "type": "S3"
      },
      "logs": {
        "group-name": "/aws/codebuild/my-sample-project",
        "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX",
        "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX"
      },
      "phases": [
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:12:29 PM",
          "duration-in-seconds": 0,
          "phase-type": "SUBMITTED",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:13:05 PM",
          "duration-in-seconds": 36,
          "phase-type": "PROVISIONING",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:05 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 4,
          "phase-type": "DOWNLOAD_SOURCE",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "INSTALL",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "PRE_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 70,
          "phase-type": "BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "POST_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "UPLOAD_ARTIFACTS",
          "phase-status": "SUCCEEDED"
        },
         {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:26 PM",
          "duration-in-seconds": 4,
          "phase-type": "FINALIZING",
          "phase-status": "SUCCEEDED"
        },
        {
          "start-time": "Sep 1, 2017 4:14:26 PM",
          "phase-type": "COMPLETED"
        }
      ]
    },
    "current-phase": "COMPLETED",
    "current-phase-context": "[]",
    "version": "1"
  }
}
```

As notificações de alteração feita na fase de compilação usam o seguinte formato:

```
{
  "version": "0",
  "id": "43ddc2bd-af76-9ca5-2dc7-b695e15adeEX",
  "detail-type": "CodeBuild Build Phase Change",
  "source": "aws.codebuild",
  "account": "123456789012",
  "time": "2017-09-01T16:14:21Z",
  "region": "us-west-2",
  "resources":[
    "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX"
  ],
  "detail":{
    "completed-phase": "COMPLETED",
    "project-name": "my-sample-project",
    "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX",
    "completed-phase-context": "[]",
    "additional-information": {
      "artifact": {
        "md5sum": "da9c44c8a9a3cd4b443126e823168fEX",
        "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX",
        "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip"
      },
      "environment": {
        "image": "aws/codebuild/standard:5.0",
        "privileged-mode": false,
        "compute-type": "BUILD_GENERAL1_SMALL",
        "type": "LINUX_CONTAINER",
        "environment-variables": []
      },
      "timeout-in-minutes": 60,
      "build-complete": true,
      "initiator": "MyCodeBuildDemoUser",
      "build-start-time": "Sep 1, 2017 4:12:29 PM",
      "source": {
        "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip",
        "type": "S3"
      },
      "logs": {
        "group-name": "/aws/codebuild/my-sample-project",
        "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX",
        "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX"
      },
      "phases": [
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:12:29 PM",
          "duration-in-seconds": 0,
          "phase-type": "SUBMITTED",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:13:05 PM",
          "duration-in-seconds": 36,
          "phase-type": "PROVISIONING",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:05 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 4,
          "phase-type": "DOWNLOAD_SOURCE",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "INSTALL",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "PRE_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 70,
          "phase-type": "BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "POST_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "UPLOAD_ARTIFACTS",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:26 PM",
          "duration-in-seconds": 4,
          "phase-type": "FINALIZING",
          "phase-status": "SUCCEEDED"
        },
        {
          "start-time": "Sep 1, 2017 4:14:26 PM",
          "phase-type": "COMPLETED"
        }
      ]  
    },
    "completed-phase-status": "SUCCEEDED",
    "completed-phase-duration-seconds": 4,
    "version": "1",
    "completed-phase-start": "Sep 1, 2017 4:14:21 PM",
    "completed-phase-end": "Sep 1, 2017 4:14:26 PM"
  }
}
```

# Crie uma amostra de crachás com CodeBuild
<a name="sample-build-badges"></a>

AWS CodeBuild agora suporta o uso de emblemas de construção, que fornecem uma imagem incorporável e gerada dinamicamente (*emblema*) que exibe o status da versão mais recente de um projeto. Essa imagem pode ser acessada por meio de uma URL publicamente disponível gerada para seu CodeBuild projeto. Isso permite que qualquer pessoa visualize o status de um CodeBuild projeto. Como não contêm informações de segurança, os emblemas de compilação não exigem autenticação.

**Topics**
+ [Criar um projeto de compilação com emblemas de compilação](#sample-build-badges-request-running)
+ [Acesse os emblemas de AWS CodeBuild construção](access-badges.md)
+ [Publique emblemas de CodeBuild construção](publish-badges.md)
+ [CodeBuild status do crachá](badge-statuses.md)

## Criar um projeto de compilação com emblemas de compilação
<a name="sample-build-badges-request-running"></a>

Use um dos procedimentos a seguir para criar um projeto de compilação com emblemas de compilação ativados. Você pode usar AWS CLI ou Console de gerenciamento da AWS o.

**Para criar um projeto de compilação com emblemas de compilação habilitados (AWS CLI)**
+ Para obter informações sobre como criar um projeto de compilação, consulte [Crie um projeto de compilação (AWS CLI)](create-project.md#create-project-cli). Para incluir emblemas de construção em seu AWS CodeBuild projeto, você deve especificar *badgeEnabled* com um valor de`true`.

**Para criar um projeto de compilação com emblemas de compilação habilitados (console)**

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1.  Se uma página de CodeBuild informações for exibida, escolha **Criar projeto de construção**. Caso contrário, no painel de navegação, expanda **Compilar**, escolha **Projetos de compilação** e, depois, **Criar projeto de compilação**. 

1. Em **Nome do projeto**, insira um nome para esse projeto de compilação. Os nomes dos projetos de criação devem ser exclusivos em cada AWS conta. Também é possível incluir uma descrição opcional do projeto de compilação para ajudar outros usuários a entender para que esse projeto é usado.

1. Em **Source (Origem)**, em **Source provider (Fornecedor de origem)**, selecione tipo de fornecedor de código-fonte e faça um dos seguintes procedimentos:
**nota**  
 CodeBuild não oferece suporte à criação de emblemas com o provedor de origem do Amazon S3. Como AWS CodePipeline usa o Amazon S3 para transferências de artefatos, os emblemas de construção não são compatíveis com projetos de construção que fazem parte de um pipeline criado em. CodePipeline 
   + Se você tiver escolhido **CodeCommit**, em **Repository (Repositório)**, escolha o nome do repositório. Selecione **Habilitar emblema da compilação** para que o status de compilação do projeto fique visível e possa ser incorporado.
   + Se você escolher **GitHub**, siga as instruções para se conectar (ou reconectar) com GitHub. Na página GitHub **Autorizar aplicativo**, em **Acesso à organização**, escolha **Solicitar acesso** ao lado de cada repositório que você AWS CodeBuild deseja acessar. Depois que você escolher **Authorize application (Autorizar aplicação)**, no console do AWS CodeBuild , em **Repository (Repositório)**, escolha o nome do repositório que contém o código-fonte. Selecione **Habilitar emblema da compilação** para que o status de compilação do projeto fique visível e possa ser incorporado.
   + Se você escolher **Bitbucket**, siga as instruções para se conectar (ou reconectar) ao Bitbucket. Na página **Confirm access to your account** do Bitbucket, em **Organization access**, escolha **Grant access**. Depois de escolher **Conceder acesso**, de volta ao AWS CodeBuild console, para **Repositório**, escolha o nome do repositório que contém o código-fonte. Selecione **Habilitar emblema da compilação** para que o status de compilação do projeto fique visível e possa ser incorporado.
**Importante**  
A atualização da origem do projeto pode afetar a precisão dos emblemas de compilação do projeto.

1. Em **Ambiente**:

   Para **Imagem do ambiente**, faça um dos seguintes procedimentos:
   + Para usar uma imagem do Docker gerenciada por AWS CodeBuild, escolha **Imagem gerenciada** e, em seguida, faça seleções em **Sistema operacional**, **Tempo de execução (s)**, **Imagem e Versão da** **imagem**. Faça uma seleção em **Environment type (Tipo de ambiente)** se estiver disponível.
   + Para usar outra imagem do Docker, selecione **Custom image (Imagem personalizada)**. Em **Tipo de ambiente**, selecione **ARM**, **Linux**, **Linux GPU** ou **Windows**. Se você selecionar **Other registry (Outro registro)**, em **External registry URL (URL de registro externo)**, insira o nome e a tag da imagem do Docker no Docker Hub usando o formato `docker repository/docker image name`. Se você escolher o **Amazon ECR**, use o **repositório Amazon ECR e** a imagem do **Amazon ECR para escolher a imagem** do Docker em sua conta. AWS 
   + Para usar uma imagem privada do Docker, selecione **Imagem personalizada**. Em **Tipo de ambiente**, selecione **ARM**, **Linux**, **Linux GPU** ou **Windows**. Em **Image registry (Registro da imagem)**, selecione **Other registry (Outro registro)** e insira o ARN das credenciais da imagem privada do Docker. As credenciais devem ser criadas pelo Secrets Manager. Para obter mais informações, consulte [O que é o AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) no *Guia do usuário do AWS Secrets Manager *.

1. Em **Perfil de serviço**, faça um dos seguintes procedimentos:
   + Se você não tiver uma função CodeBuild de serviço, escolha **Nova função de serviço**. No campo **Role name**, digite o nome da nova função.
   + Se você tiver uma função CodeBuild de serviço, escolha **Função de serviço existente**. Em **ARN do perfil**, escolha o perfil de serviço.
**nota**  
Ao usar o console para criar ou atualizar um projeto de compilação, você pode criar uma função de CodeBuild serviço ao mesmo tempo. Por padrão, a função funciona somente com esse projeto de build. Se você usar o console para associar essa função de serviço a outro projeto de compilação, a função será atualizada para funcionar com os outros projetos de compilação. Uma função de serviço pode funcionar com até 10 projetos de compilação.

1. Em **Buildspec**, siga um destes procedimentos:
   + Escolha **Usar um arquivo buildspec** para usar o arquivo buildspec.yml no diretório raiz do código-fonte.
   + Selecione **Inserir comandos de compilação** para usar o console para inserir comandos de compilação.

   Para obter mais informações, consulte o [Referência de buildspec](build-spec-ref.md).

1. Em **Artefatos**, para **Tipo**, faça um dos seguintes procedimentos:
   + Se você não quiser criar artefatos de saída de compilação, selecione **Nenhum artefato**.
   + Para armazenar a saída de compilação em um bucket do S3, escolha **Amazon S3** e faça o seguinte:
     + Se você quiser usar o nome do projeto para a pasta ou arquivo ZIP de saída da compilação, deixe **Name (Nome)** em branco. Caso contrário, insira o nome. Por padrão, o nome do artefato é o nome do projeto. Se você quiser usar um nome diferente, insira-o na caixa de nome do artefato. Se você quiser gerar um arquivo ZIP, inclua a extensão zip.
     + Para **Bucket name**, selecione o nome do bucket de saída.
     + Se você tiver escolhido **Inserir comandos de compilação** anteriormente neste procedimento, em **Arquivos de saída**, insira os locais dos arquivos da compilação que deseja incluir na pasta ou no arquivo ZIP de saída da compilação. Para vários locais, separe-os com uma vírgula (por exemplo, `appspec.yml, target/my-app.jar`). Para obter mais informações, consulte a descrição de `files` em [Sintaxe de buildspec](build-spec-ref.md#build-spec-ref-syntax).

1. Expanda **Configuração adicional** e escolha as opções conforme apropriado.

1. Selecione **Create build project (Criar projeto de compilação)**. Na página **Revisão**, escolha **Iniciar compilação** para executar a compilação.

# Acesse os emblemas de AWS CodeBuild construção
<a name="access-badges"></a>

Você pode usar o AWS CodeBuild console ou o AWS CLI para acessar os emblemas de construção.
+ No CodeBuild console, na lista de projetos de construção, na coluna **Nome**, escolha o link que corresponde ao projeto de construção. Na *project-name* página **Criar projeto:**, em **Configuração**, escolha **Copiar URL do selo**. Para obter mais informações, consulte [Visualizar detalhes de um projeto de compilação (console)](view-project-details.md#view-project-details-console).
+ No AWS CLI, execute o `batch-get-projects` comando. O URL do emblema de compilação está incluído na seção de detalhes do ambiente do projeto da saída. Para obter mais informações, consulte [Visualizar detalhes de um projeto de compilação (AWS CLI)](view-project-details.md#view-project-details-cli).

O URL de solicitação do emblema de compilação é gerado com uma ramificação padrão comum, mas é possível especificar qualquer ramificação no repositório de origem utilizado para executar uma compilação. Por exemplo:

```
https://codebuild.us-east-1.amazon.com/badges?uuid=...&branch=<branch>
```

Você também pode especificar uma tag do repositório de origem substituindo o parâmetro `branch` pelo parâmetro `tag` no URL do emblema. Por exemplo: 

```
https://codebuild.us-east-1.amazon.com/badges?uuid=...&tag=<tag>
```

# Publique emblemas de CodeBuild construção
<a name="publish-badges"></a>

É possível exibir o status da versão mais recente em um arquivo de markdown usando o URL do emblema de compilação em uma imagem de markdown. Isso é útil para exibir o status da compilação mais recente no arquivo readme.md no seu repositório de origem (por exemplo, ou). GitHub CodeCommit Por exemplo:

```
![](<build badge URL>)
```

# CodeBuild status do crachá
<a name="badge-statuses"></a>

O emblema de CodeBuild construção pode ter um dos seguintes status.
+ **PASSING** A compilação mais recente na ramificação indicada passada. 
+ **FAILING** A compilação mais recente na ramificação indicada expirou, falhou, apresentou defeito ou foi parada.
+ **IN\$1PROGRESS** A compilação mais recente na ramificação indicada está em andamento.
+ **UNKNOWN** O projeto ainda não executou uma compilação para a ramificação indicada ou nenhuma. Além disso, o recurso de emblemas de compilação pode ter sido desabilitado.

# 'Relatório de teste usando a amostra AWS CLI'
<a name="sample-test-report-cli"></a>

Os testes que você especificar no arquivo buildspec são executados durante a compilação. Este exemplo mostra como usar o para AWS CLI incorporar testes em CodeBuild compilações. Você pode usar JUnit para criar testes de unidade ou usar outra ferramenta para criar testes de configuração. Depois, você pode avaliar os resultados do teste para corrigir problemas ou otimizar seu aplicativo. 

Você pode usar a CodeBuild API ou o AWS CodeBuild console para acessar os resultados do teste. Este exemplo mostra como configurar seu relatório para que seus resultados de teste sejam exportados para um bucket do S3. 

**Topics**
+ [Executar o exemplo de relatório de teste](#sample-test-report-cli-run)

## Executar o exemplo de relatório de teste
<a name="sample-test-report-cli-run"></a>

Use as etapas a seguir para executar o exemplo de relatório de teste.

**Topics**
+ [Pré-requisitos](#sample-test-report-cli-prerequisites)
+ [Etapa 1: criar um grupo de relatórios](#sample-test-report-cli-create-report)
+ [Etapa 2: configurar um projeto com um grupo de relatórios](#sample-test-report-cli-create-project-with-report)
+ [Etapa 3: executar e visualizar resultados de um relatório](#sample-test-report-cli-run-and-view-report-results)

### Pré-requisitos
<a name="sample-test-report-cli-prerequisites"></a>
+ Criar seus casos de teste. Este exemplo é escrito partindo-se do pressuposto de que você tem casos de teste para incluir em seu relatório de teste de amostra. Especifique o local dos arquivos de teste no arquivo buildspec. 

  Os seguintes formatos de arquivo de relatório de teste são compatíveis:
  + Cucumber JSON (.json)
  + JUnit XML (.xml)
  + NUnit XML (.xml)
  + NUnit3 XML (.xml)
  + TestNG XML (.xml)
  + Visual Studio TRX (.trx)
  + Visual Studio TRX XML (.xml)

  Crie seus casos de teste com qualquer estrutura de teste que possa criar arquivos de relatório em um desses formatos (por exemplo, JUnit plug-in Surefire, TestNG ou Cucumber).
+ Crie um bucket do S3 e anote seu nome. Para obter mais informações, consulte [How do I create an S3 bucket?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html) no *Guia do usuário do Amazon S3*. 
+ Crie um perfil do IAM e anote o ARN. É necessário o ARN ao criar seu projeto de compilação. 
+ Se sua função não tiver as seguintes permissões, adicione-as. 

  ```
  {
      "Effect": "Allow",
      "Resource": [
          "*"
      ],
      "Action": [
          "codebuild:CreateReportGroup",
          "codebuild:CreateReport",
          "codebuild:UpdateReport",
          "codebuild:BatchPutTestCases"
      ]
  }
  ```

   Para obter mais informações, consulte [Permissões para operações de relatórios de testes](test-permissions.md#test-permissions-related-to-reporting). 

### Etapa 1: criar um grupo de relatórios
<a name="sample-test-report-cli-create-report"></a>

1. Crie um arquivo chamado `CreateReportGroupInput.json`. 

1. Crie uma pasta no bucket do S3 onde os resultados do teste são exportados. 

1. Copie o seguinte em `CreateReportGroupInput.json`. Em `<bucket-name>`, use o nome do bucket do S3. Em `<path-to-folder>`, insira o caminho para a pasta no bucket do S3. 

   ```
   {
     "name": "<report-name>",
     "type": "TEST",
     "exportConfig": {
       "exportConfigType": "S3",
       "s3Destination": {
         "bucket": "<bucket-name>",
         "path": "<path-to-folder>",
         "packaging": "NONE"
       }
     }
   }
   ```

1. Execute o comando a seguir no diretório que contenha `CreateReportGroupInput.json`.

   ```
   aws codebuild create-report-group --cli-input-json file://CreateReportGroupInput.json
   ```

   A saída é semelhante à seguinte. Anote o ARN do `reportGroup`. Use-o ao criar um projeto que use esse grupo de relatórios.

   ```
   {
     "reportGroup": {
       "arn": "arn:aws:codebuild:us-west-2:123456789012:report-group/<report-name>",
       "name": "<report-name>",
       "type": "TEST",
       "exportConfig": {
         "exportConfigType": "S3",
         "s3Destination": {
           "bucket": "<s3-bucket-name>",
           "path": "<folder-path>",
           "packaging": "NONE",
           "encryptionKey": "arn:aws:kms:us-west-2:123456789012:alias/aws/s3"
         }
       },
       "created": 1570837165.885,
       "lastModified": 1570837165.885
     }
   }
   ```

### Etapa 2: configurar um projeto com um grupo de relatórios
<a name="sample-test-report-cli-create-project-with-report"></a>

Para executar um relatório, primeiro você cria um projeto de CodeBuild compilação configurado com seu grupo de relatórios. Os casos de teste especificados para o grupo de relatórios são executados quando você executa uma compilação. 

1. Crie um arquivo buildspec chamado `buildspec.yml`. 

1. Use o seguinte YAML como modelo para o seu arquivo `buildspec.yml`. Inclua os comandos que executam seus testes. Na seção `reports`, especifique os arquivos que contêm os resultados dos seus casos de teste. Esses arquivos armazenam os resultados do teste com os quais você pode acessar CodeBuild. Eles expiram 30 dias após sua criação. Esses arquivos são diferentes dos arquivos de resultado de caso de teste bruto exportados para um bucket do S3.

   ```
   version: 0.2
       phases:
       install:
           runtime-versions:
               java: openjdk8
       build:
         commands:
           - echo Running tests 
           - <enter commands to run your tests>
           
       reports:
         <report-name-or-arn>: #test file information
         files:
           - '<test-result-files>'
         base-directory: '<optional-base-directory>'
         discard-paths: false #do not remove file paths from test result files
   ```
**nota**  
Em vez do ARN de um grupo de relatórios existente, você também pode especificar um nome para um grupo de relatórios que não foi criado. Se você especificar um nome em vez de um ARN, CodeBuild cria um grupo de relatórios ao executar uma compilação. O nome dele contém o nome do projeto e o nome que você especificar no arquivo buildspec, neste formato: `project-name-report-group-name`. Para obter mais informações, consulte [Criar relatórios de teste](report-create.md) e [Nomenclatura do grupo de relatórios](test-report-group-naming.md). 

1. Crie um arquivo chamado `project.json`. Este arquivo contém entrada para o comando **create-project**. 

1. Copie o seguinte JSON em `project.json`. Em `source`, insira o tipo e o local do repositório que contém os arquivos de origem. Em `serviceRole`, especifique o ARN da função que você está usando. 

   ```
   {
     "name": "test-report-project",
     "description": "sample-test-report-project",
     "source": {
       "type": "CODECOMMIT|CODEPIPELINE|GITHUB|S3|BITBUCKET|GITHUB_ENTERPRISE|NO_SOURCE",
       "location": "<your-source-url>"
     },
     "artifacts": {
       "type": "NO_ARTIFACTS"
     },
     "cache": {
       "type": "NO_CACHE"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "aws/codebuild/standard:5.0",
       "computeType": "small"
     },
     "serviceRole": "arn:aws:iam::<your-aws-account-id>:role/service-role/<your-role-name>"
   }
   ```

1. Execute o comando a seguir no diretório que contenha `project.json`. Isso cria um projeto chamado `test-project`. 

   ```
   aws codebuild create-project --cli-input-json file://project.json
   ```

### Etapa 3: executar e visualizar resultados de um relatório
<a name="sample-test-report-cli-run-and-view-report-results"></a>

Nesta seção, você executa uma compilação do projeto criado anteriormente. Durante o processo de criação, CodeBuild cria um relatório com os resultados dos casos de teste. O relatório está contido no grupo de relatórios especificado. 

1. Para iniciar uma compilação, execute o comando a seguir. `test-report-project` é o nome do projeto de compilação criado acima. Anote o ID de compilação que aparece na saída. 

   ```
   aws codebuild start-build --project-name test-report-project
   ```

1. Execute o comando a seguir para obter informações sobre sua compilação, incluindo o ARN do seu relatório. Em `<build-id>`, especifique seu ID de compilação. Anote o ARN do relatório na propriedade `reportArns` da saída. 

   ```
   aws codebuild batch-get-builds --ids <build-id>
   ```

1. Execute o comando a seguir para obter detalhes sobre o relatório. Em `<report-arn>`, especifique o ARN do relatório. 

   ```
   aws codebuild batch-get-reports --report-arns <report-arn>
   ```

   A saída é semelhante à seguinte. Essa saída de exemplo mostra quantos testes foram bem-sucedidos, falharam, foram ignorados, resultaram em erro ou retornaram um status desconhecido.

   ```
   {
     "reports": [
       {
         "status": "FAILED",
         "reportGroupArn": "<report-group-arn>",
         "name": "<report-group-name>",
         "created": 1573324770.154,
         "exportConfig": {
           "exportConfigType": "S3",
           "s3Destination": {
             "bucket": "<amzn-s3-demo-bucket>",
             "path": "<path-to-your-report-results>",
             "packaging": "NONE",
             "encryptionKey": "<encryption-key>"
           }
         },
         "expired": 1575916770.0,
         "truncated": false,
         "executionId": "arn:aws:codebuild:us-west-2:123456789012:build/<name-of-build-project>:2c254862-ddf6-4831-a53f-6839a73829c1",
         "type": "TEST",
         "arn": "<report-arn>",
         "testSummary": {
           "durationInNanoSeconds": 6657770,
           "total": 11,
           "statusCounts": {
             "FAILED": 3,
             "SKIPPED": 7,
             "ERROR": 0,
             "SUCCEEDED": 1,
             "UNKNOWN": 0
           }
         }
       }
     ],
     "reportsNotFound": []
   }
   ```

1. Execute o seguinte comando para listar informações sobre casos de teste para seu relatório. Em `<report-arn>`, especifique o ARN do seu relatório. No parâmetro opcional `--filter`, você pode especificar um resultado de status (`SUCCEEDED`, `FAILED`, `SKIPPED`, `ERROR`, ou `UNKNOWN`). 

   ```
   aws codebuild describe-test-cases \
       --report-arn <report-arn> \
       --filter status=SUCCEEDED|FAILED|SKIPPED|ERROR|UNKNOWN
   ```

    A saída é semelhante à seguinte. 

   ```
   {
     "testCases": [
       {
         "status": "FAILED",
         "name": "Test case 1",
         "expired": 1575916770.0,
         "reportArn": "<report-arn>",
         "prefix": "Cucumber tests for agent",
         "message": "A test message",
         "durationInNanoSeconds": 1540540,
         "testRawDataPath": "<path-to-output-report-files>"
       },
       {
         "status": "SUCCEEDED",
         "name": "Test case 2",
         "expired": 1575916770.0,
         "reportArn": "<report-arn>",
         "prefix": "Cucumber tests for agent",
         "message": "A test message",
         "durationInNanoSeconds": 1540540,
         "testRawDataPath": "<path-to-output-report-files>"
       }
     ]
   }
   ```

# Amostras do Docker para CodeBuild
<a name="sample-docker-section"></a>

Esta seção descreve exemplos de integrações entre Docker e. AWS CodeBuild


| Amostra | Description | 
| --- | --- | 
|  [Docker em amostra de imagem personalizada para CodeBuild](sample-docker-custom-image.md)  |  Este exemplo cria e executa uma imagem do Docker usando CodeBuild uma imagem de compilação personalizada do Docker (`docker:dind`no Docker Hub).   | 
|  [Exemplo de servidor de criação de imagens Docker para CodeBuild](sample-docker-server.md)  |  Esse exemplo transfere as compilações do Docker para um servidor de compilação de imagens gerenciado.   | 
|  [O Windows Docker cria uma amostra para CodeBuild](sample-windows-docker-custom-image.md)  |  Este exemplo cria e executa uma imagem do Windows Docker usando. CodeBuild  | 
|  [Exemplo de “Publicar imagem do Docker em um repositório de imagens do Amazon ECR” para CodeBuild](sample-docker.md)  |  Este exemplo produz como saída de compilação de uma imagem do Docker e, depois, a envia a um repositório de imagens do Amazon Elastic Container Registry (Amazon ECR).   | 
|  [Registro privado com AWS Secrets Manager amostra para CodeBuild](sample-private-registry.md)  |  Este exemplo mostra como usar uma imagem do Docker armazenada em um registro privado como seu ambiente CodeBuild de execução.  | 

# Docker em amostra de imagem personalizada para CodeBuild
<a name="sample-docker-custom-image"></a>

O exemplo a seguir cria e executa uma imagem do Docker usando AWS CodeBuild uma imagem de compilação personalizada do Docker (`docker:dind`no Docker Hub). 

Para saber como criar uma imagem do Docker usando uma imagem de construção fornecida CodeBuild com o suporte do Docker, consulte nosso. [Exemplo “Publicar imagem do Docker no Amazon ECR”](sample-docker.md)

**Importante**  
A execução dessa amostra pode resultar em cobranças em sua AWS conta. Isso inclui possíveis cobranças por CodeBuild e por AWS recursos e ações relacionados ao Amazon S3 e CloudWatch aos AWS KMS registros. Para obter mais informações, consulte [CodeBuild preços, preços](https://aws.amazon.com/codebuild/pricing) do [Amazon S3, preços](https://aws.amazon.com/s3/pricing) e [AWS Key Management Service preços](https://aws.amazon.com/kms/pricing) da [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing).

**Topics**
+ [Executar o Docker no exemplo de imagem personalizada](#sample-docker-custom-image-running)

## Executar o Docker no exemplo de imagem personalizada
<a name="sample-docker-custom-image-running"></a>

Use o procedimento a seguir para executar o Docker em um exemplo de imagem personalizada. Para obter mais informações sobre este exemplo, consulte [Docker em amostra de imagem personalizada para CodeBuild](#sample-docker-custom-image).

**Para executar o Docker no exemplo de imagem personalizada**

1. Crie os arquivos conforme descrito nas [Arquivos](#sample-docker-custom-image-files) seções [Estrutura de diretório](#sample-docker-custom-image-dir) e deste tópico e, em seguida, carregue-os em um bucket de entrada do S3 ou em um AWS CodeCommit repositório do Bitbucket. GitHub 
**Importante**  
Não faça upload de `(root directory name)`, apenas dos arquivos dentro de `(root directory name)`.   
Se você estiver usando um bucket de entrada do S3, crie um arquivo ZIP que contenha os arquivos e envie-o para o bucket de entrada. Não adicione `(root directory name)` ao arquivo ZIP, apenas aos arquivos dentro de `(root directory name)`.

1. Crie um projeto de compilação, execute a compilação e exiba as respectivas informações.

   Se você usar o AWS CLI para criar o projeto de construção, a entrada formatada em JSON para o `create-project` comando poderá ser semelhante a essa. (Substitua os espaços reservados com seus próprios valores.)

   ```
   {
     "name": "sample-docker-custom-image-project",
     "source": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-input-bucket/DockerCustomImageSample.zip"
     },
     "artifacts": {
       "type": "NO_ARTIFACTS"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "docker:dind",
       "computeType": "BUILD_GENERAL1_SMALL",
       "privilegedMode": false
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```
**nota**  
Por padrão, o daemon do Docker está habilitado para compilações não VPC. Se você quiser usar contêineres do Docker para compilações da VPC, consulte [Privilégio de tempo de execução e funcionalidades do Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) no site do Docker Docs e ative o modo privilegiado. Além disso, o Windows não é compatível com o modo privilegiado.

1. Para ver os resultados da compilação, procure no log da compilação a string `Hello, World!`. Para obter mais informações, consulte [Visualizar detalhes de compilação](view-build-details.md).

### Estrutura de diretório
<a name="sample-docker-custom-image-dir"></a>

Essa amostra pressupõe esta estrutura de diretório.

```
(root directory name)
├── buildspec.yml
└── Dockerfile
```

### Arquivos
<a name="sample-docker-custom-image-files"></a>

A imagem de base do sistema operacional Ubuntu é usada nessa amostra. A amostra usa estes arquivos.

`buildspec.yml` (em `(root directory name)`)

```
version: 0.2

phases:
  pre_build:
    commands:
      - docker build -t helloworld .
  build:
    commands:
      - docker images
      - docker run helloworld echo "Hello, World!"
```

`Dockerfile` (em `(root directory name)`)

```
FROM maven:3.3.9-jdk-8
 
RUN echo "Hello World"
```

# Exemplo de servidor de criação de imagens Docker para CodeBuild
<a name="sample-docker-server"></a>

O exemplo a seguir transfere as compilações do Docker para um servidor de compilação de imagens gerenciado. Você pode adaptar esse exemplo para provisionar um servidor de criação de imagens Docker dedicado e gerenciado na configuração do seu CodeBuild projeto. Observe que a instância provisionada está ativa enquanto as compilações são executadas ativamente para o projeto, e a instância é interrompida quando as compilações não estão em execução. A instância provisionada é armazenada por até um mês antes de ser reciclada. Para obter mais informações, consulte [ CodeBuild Docker Server Capability](https://aws.amazon.com/blogs//aws/accelerate-ci-cd-pipelines-with-the-new-aws-codebuild-docker-server-capability).

**Importante**  
A execução dessa amostra pode resultar em cobranças em sua AWS conta. Isso inclui possíveis cobranças por CodeBuild e por AWS recursos e ações relacionados ao Amazon S3 e CloudWatch aos AWS KMS registros. Para obter mais informações, consulte [CodeBuild preços, preços](https://aws.amazon.com/codebuild/pricing) do [Amazon S3, preços](https://aws.amazon.com/s3/pricing) e [AWS Key Management Service preços](https://aws.amazon.com/kms/pricing) da [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing).

**Topics**
+ [Configurar um servidor do Docker](#sample-docker-server-running)

## Configurar um servidor do Docker
<a name="sample-docker-server-running"></a>

Use o procedimento a seguir para provisionar um ambiente de computação dedicado para um CodeBuild projeto que gerencia cargas de trabalho do Docker e armazena camadas de imagem do Docker. 

**Como configurar um servidor do Docker**

1. Crie os arquivos conforme descrito nas [Arquivos](#sample-docker-server-files) seções [Estrutura de diretório](#sample-docker-server-dir) e deste tópico e, em seguida, carregue-os em um bucket de entrada do S3 ou em um AWS CodeCommit repositório do Bitbucket. GitHub 
**Importante**  
Não faça upload de `(root directory name)`, apenas dos arquivos dentro de `(root directory name)`.   
Se você estiver usando um bucket de entrada do S3, crie um arquivo ZIP que contenha os arquivos e envie-o para o bucket de entrada. Não adicione `(root directory name)` ao arquivo ZIP, apenas aos arquivos dentro de `(root directory name)`.

1. Crie um projeto de compilação, execute a compilação e exiba as respectivas informações:

   1. Na seção **Ambiente** do console, escolha **Configuração adicional**, acesse **Configuração do servidor do Docker** e selecione **Habilitar servidor do Docker para este projeto**. Depois, você pode escolher o **Tipo de computação do servidor do Docker** e fornecer uma **Credencial do registro**.

   1. Se você usar o AWS CLI para criar o projeto de construção, a entrada formatada em JSON para o `create-project` comando poderá ser semelhante a essa. (Substitua os espaços reservados com seus próprios valores.)

      ```
      {
        "name": "sample-docker-custom-image-project",
        "source": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-input-bucket/DockerServerSample.zip"
        },
        "artifacts": {
          "type": "NO_ARTIFACTS"
        },
        "environment": {
          "type": "LINUX_CONTAINER",
          "image": "aws/codebuild/amazonlinux-x86_64-standard:5.0",
          "computeType": "BUILD_GENERAL1_LARGE",
          "dockerServer": [ 
               { 
                  "computeType": "BUILD_GENERAL1_LARGE",
                  "securityGroupIds": [ "security-groups-ID" ]
               }
            ]
        },
        "serviceRole": "arn:aws:iam::account-ID:role/role-name"
      }
      ```
**nota**  
Os grupos de segurança configurados para servidores do Docker devem permitir a entrada de tráfego de rede da VPC configurada no projeto. Eles devem permitir a entrada na porta 9876.

1. Para ver os resultados da compilação, procure no log da compilação a string `Hello, World!`. Para obter mais informações, consulte [Visualizar detalhes de compilação](view-build-details.md).

### Estrutura de diretório
<a name="sample-docker-server-dir"></a>

Essa amostra pressupõe esta estrutura de diretório.

```
(root directory name)
├── buildspec.yml
└── Dockerfile
```

### Arquivos
<a name="sample-docker-server-files"></a>

A imagem de base do sistema operacional Ubuntu é usada nessa amostra. A amostra usa estes arquivos.

`buildspec.yml` (em `(root directory name)`)

```
version: 0.2

phases:
  build:
    commands:
      - docker buildx build -t helloworld --load .
      - docker run helloworld echo "Hello, World!"
```

`Dockerfile` (em `(root directory name)`)

```
FROM public.ecr.aws/amazonlinux/amazonlinux:latest 
 
RUN echo "Hello World"
```

# O Windows Docker cria uma amostra para CodeBuild
<a name="sample-windows-docker-custom-image"></a>

O exemplo a seguir cria e executa uma imagem do Windows Docker usando. CodeBuild

**Topics**
+ [Executar exemplo de compilações do Docker no Windows](#sample-windows-docker-build-running)

## Executar exemplo de compilações do Docker no Windows
<a name="sample-windows-docker-build-running"></a>

Use o procedimento a seguir para executar compilações do Docker no Windows.

**Como executar exemplo de compilações do Docker no Windows**

1. Crie os arquivos conforme descrito nas [Arquivos](#sample-windows-docker-custom-image-files) seções [Estrutura de diretório](#sample-windows-docker-custom-image-dir) e deste tópico e, em seguida, carregue-os em um bucket de entrada do S3 ou em um AWS CodeCommit repositório do Bitbucket. GitHub 
**Importante**  
Não faça upload de `(root directory name)`, apenas dos arquivos dentro de `(root directory name)`.   
Se você estiver usando um bucket de entrada do S3, crie um arquivo ZIP que contenha os arquivos e envie-o para o bucket de entrada. Não adicione `(root directory name)` ao arquivo ZIP, apenas aos arquivos dentro de `(root directory name)`.

1. Crie uma frota do `WINDOWS_EC2`.

   Se você usar o AWS CLI para criar a frota, a entrada formatada em JSON para o `create-fleet` comando pode ser semelhante a essa. (Substitua os espaços reservados com seus próprios valores.)

   ```
   {
     "name": "fleet-name",
     "baseCapacity": 1,
     "environmentType": "WINDOWS_EC2",
     "computeType": "BUILD_GENERAL1_MEDIUM"
   }
   ```

1. Crie um projeto de compilação, execute a compilação e exiba as respectivas informações.

   Se você usar o AWS CLI para criar o projeto de construção, a entrada formatada em JSON para o `create-project` comando poderá ser semelhante a essa. (Substitua os espaços reservados com seus próprios valores.)

   ```
   {
     "name": "project-name",
     "source": {
       "type": "S3",
       "location": "bucket-name/DockerImageSample.zip"
     },
     "artifacts": {
       "type": "NO_ARTIFACTS"
     },
     "environment": {
       "type": "WINDOWS_EC2",
       "image": "Windows",
       "computeType": "BUILD_GENERAL1_MEDIUM",
       "fleet": {
          "fleetArn": "fleet-arn"
       }
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name"
   }
   ```

1. Para ver os resultados da compilação, procure no log da compilação a string `Hello, World!`. Para obter mais informações, consulte [Visualizar detalhes de compilação](view-build-details.md).

### Estrutura de diretório
<a name="sample-windows-docker-custom-image-dir"></a>

Essa amostra pressupõe esta estrutura de diretório.

```
(root directory name)
├── buildspec.yml
└── Dockerfile
```

### Arquivos
<a name="sample-windows-docker-custom-image-files"></a>

A imagem de base do sistema operacional usada nesse exemplo é `mcr.microsoft.com/windows/servercore:ltsc2022`. A amostra usa estes arquivos.

`buildspec.yml` (em `(root directory name)`)

```
version: 0.2

phases:
  pre_build:
    commands:
      - docker build -t helloworld .
  build:
    commands:
      - docker images
      - docker run helloworld powershell -Command "Write-Host 'Hello World!'"
```

`Dockerfile` (em `(root directory name)`)

```
FROM mcr.microsoft.com/windows/servercore:ltsc2022

RUN powershell -Command "Write-Host 'Hello World'"
```

# Exemplo de “Publicar imagem do Docker em um repositório de imagens do Amazon ECR” para CodeBuild
<a name="sample-docker"></a>

Este exemplo produz como saída de compilação de uma imagem do Docker e, depois, a envia a um repositório de imagens do Amazon Elastic Container Registry (Amazon ECR). Você pode adaptar esta amostra para enviar a imagem Docker para um Docker Hub. Para obter mais informações, consulte [Adapte o exemplo “Publicar imagem do Docker no Amazon ECR” para enviar para o Docker Hub](sample-docker-docker-hub.md).

Para saber como compilar uma imagem de Docker usando uma imagem de compilação personalizada do Docker (`docker:dind` no Docker Hub), consulte [Docker no exemplo de imagem personalizada](sample-docker-custom-image.md).

Esse exemplo foi testado fazendo referência a `golang:1.12`

Esse exemplo usa o novo recurso de compilações do Docker multiestágio, que produz uma imagem de Docker como saída de compilação. Depois, ele envia a imagem do Docker por push a um repositório de imagens do Amazon ECR. As compilações da imagem de Docker multiestágio ajudam a reduzir o tamanho da imagem de Docker final. Para obter mais informações, consulte [Usar compilações multiestágio com o Docker](https://docs.docker.com/engine/userguide/eng-image/multistage-build/).

**Importante**  
A execução dessa amostra pode resultar em cobranças em sua AWS conta. Isso inclui possíveis cobranças por AWS CodeBuild AWS recursos e ações relacionados ao Amazon S3 AWS KMS, CloudWatch Logs e Amazon ECR. Para obter mais informações, consulte [CodeBuild preços, preços](https://aws.amazon.com/codebuild/pricing) do [Amazon S3, preços, preços](https://aws.amazon.com/s3/pricing) da Amazon e [AWS Key Management Service preços](https://aws.amazon.com/kms/pricing) do [Amazon CloudWatch ](https://aws.amazon.com/cloudwatch/pricing) [Elastic Container Registry](https://aws.amazon.com/ecr/pricing).

**Topics**
+ [Execute o exemplo “Publicar imagem do Docker no Amazon ECR”](#sample-docker-running)
+ [Adapte o exemplo “Publicar imagem do Docker no Amazon ECR” para enviar para o Docker Hub](sample-docker-docker-hub.md)

## Execute o exemplo “Publicar imagem do Docker no Amazon ECR”
<a name="sample-docker-running"></a>

Use o procedimento a seguir para executar o exemplo que publica uma imagem do Docker no Amazon ECR. Para obter mais informações sobre este exemplo, consulte [Exemplo de “Publicar imagem do Docker em um repositório de imagens do Amazon ECR” para CodeBuild](#sample-docker).

**Como executar este exemplo**

1. Se você já possui um repositório de imagens no Amazon ECR que deseje usar, avance para a etapa 3. Caso contrário, se você estiver usando um usuário em vez de uma conta AWS raiz ou um usuário administrador para trabalhar com o Amazon ECR, adicione essa declaração (entre *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* e*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) ao usuário (ou grupo do IAM ao qual o usuário está associado). Não é recomendável usar uma conta AWS raiz. Essa declaração permite a criação de repositórios Amazon ECR para armazenar imagens do Docker. As elipses (`...`) são usadas para agilizar e para ajudá-lo a encontrar onde adicionar a declaração. Não remova nenhuma declaração e não digite essas elipses nas políticas. Para obter mais informações, consulte [Working with inline policies using the Console de gerenciamento da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) no *Guia do usuário*. 

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ecr:CreateRepository"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------
**nota**  
A entidade do IAM que modifica essa política deve ter permissão no IAM para alterar políticas.

1. Crie um repositório de imagens no Amazon ECR. Certifique-se de criar o repositório na mesma AWS região em que você cria seu ambiente de compilação e executa sua compilação. Para obter mais informações, consulte [Creating a repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) no *Guia do usuário do Amazon ECR*. O nome desse repositório deve corresponder ao nome do repositório que você especificará posteriormente neste procedimento, representado pela variável de ambiente `IMAGE_REPO_NAME`. Certifique-se de que a política de repositório do Amazon ECR conceda acesso push de imagens para sua função CodeBuild de serviço IAM. 

1. Adicione essa declaração (entre *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* e*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) à política que você anexou à sua função AWS CodeBuild de serviço. Essa declaração permite CodeBuild fazer o upload de imagens do Docker para os repositórios do Amazon ECR. As elipses (`...`) são usadas para agilizar e para ajudá-lo a encontrar onde adicionar a declaração. Não remova nenhuma declaração e não digite essas elipses nas políticas. 

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ecr:BatchCheckLayerAvailability",
                   "ecr:CompleteLayerUpload",
                   "ecr:GetAuthorizationToken",
                   "ecr:InitiateLayerUpload",
                   "ecr:PutImage",
                   "ecr:UploadLayerPart"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------
**nota**  
A entidade do IAM que modifica essa política deve ter permissão no IAM para alterar políticas.

1. Crie os arquivos conforme descrito nas [Arquivos](#sample-docker-files) seções [Estrutura de diretório](#sample-docker-dir) e deste tópico e, em seguida, carregue-os em um bucket de entrada do S3 ou em um AWS CodeCommit repositório do Bitbucket. GitHub Para obter mais informações, consulte [Image definitions file reference](https://docs.aws.amazon.com/codepipeline/latest/userguide/file-reference.html) no *Guia do usuário do AWS CodePipeline *.
**Importante**  
Não faça upload de `(root directory name)`, apenas dos arquivos dentro de `(root directory name)`.   
Se você estiver usando um bucket de entrada do S3, crie um arquivo ZIP que contenha os arquivos e envie-o para o bucket de entrada. Não adicione `(root directory name)` ao arquivo ZIP, apenas aos arquivos dentro de `(root directory name)`.

1. Crie um projeto de compilação, execute a compilação e exiba suas informações.

    Se você usar o console para criar seu projeto:

   1.  Para **Operating system**, selecione **Ubuntu**. 

   1.  Em **Runtime (Tempo de execução)**, selecione **Standard (Padrão)**. 

   1.  **Para **Imagem**, escolha: 5.0aws/codebuild/standard.** 

   1.  Adicione as seguintes variáveis de ambiente: 
      +  AWS\$1DEFAULT\$1REGION com um valor de *region-ID* 
      +  AWS\$1ACCOUNT\$1ID com um valor de *account-ID* 
      +  IMAGE\$1TAG com o valor Latest 
      +  IMAGE\$1REPO\$1NAME com um valor de *Amazon-ECR-repo-name* 

   Se você usar o AWS CLI para criar o projeto de construção, a entrada formatada em JSON para o `create-project` comando poderá ser semelhante a essa. (Substitua os espaços reservados com seus próprios valores.)

   ```
   {
     "name": "sample-docker-project",
     "source": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-input-bucket/DockerSample.zip"
     },
     "artifacts": {
       "type": "NO_ARTIFACTS"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "aws/codebuild/standard:5.0",
       "computeType": "BUILD_GENERAL1_SMALL",
       "environmentVariables": [
         {
           "name": "AWS_DEFAULT_REGION",
           "value": "region-ID"
         },
         {
           "name": "AWS_ACCOUNT_ID",
           "value": "account-ID"
         },
         {
           "name": "IMAGE_REPO_NAME",
           "value": "Amazon-ECR-repo-name"
         },
         {
           "name": "IMAGE_TAG",
           "value": "latest"
         }
       ],
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```

1. Confirme se a imagem do Docker foi enviada CodeBuild com sucesso para o repositório:

   1. Abra o console do Amazon ECR em [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/).

   1. Escolha o nome do repositório. A imagem deve ser listada na coluna **Image tag (Tag de imagem)**

### Estrutura de diretório
<a name="sample-docker-dir"></a>

Essa amostra pressupõe esta estrutura de diretório.

```
(root directory name)
├── buildspec.yml
└── Dockerfile
```

### Arquivos
<a name="sample-docker-files"></a>

Esta amostra usa estes arquivos.

`buildspec.yml` (em `(root directory name)`)

```
version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...          
      - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
      - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG      
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
```

`Dockerfile` (em `(root directory name)`)

```
FROM golang:1.12-alpine AS build
#Install git
RUN apk add --no-cache git
#Get the hello world package from a GitHub repository
RUN go get github.com/golang/example/hello
WORKDIR /go/src/github.com/golang/example/hello
# Build the project and send the output to /bin/HelloWorld 
RUN go build -o /bin/HelloWorld

FROM golang:1.12-alpine
#Copy the build's output binary from the previous build container
COPY --from=build /bin/HelloWorld /bin/HelloWorld
ENTRYPOINT ["/bin/HelloWorld"]
```

**nota**  
CodeBuild substitui as imagens personalizadas do `ENTRYPOINT` Docker.

# Adapte o exemplo “Publicar imagem do Docker no Amazon ECR” para enviar para o Docker Hub
<a name="sample-docker-docker-hub"></a>

Para adaptar o exemplo “Publicar imagem do Docker no Amazon ECR” de modo que a imagem do Docker seja enviada ao Docker Hub e não ao Amazon ECR, edite o código do exemplo. Para obter mais informações sobre o exemplo, consulte [Exemplo de “Publicar imagem do Docker em um repositório de imagens do Amazon ECR” para CodeBuild](sample-docker.md) e [Execute o exemplo “Publicar imagem do Docker no Amazon ECR”](sample-docker.md#sample-docker-running).
**nota**  
Se você estiver usando uma versão do Docker anterior à 17.06, remova a opção `--no-include-email`.

1. Substitua estas linhas de código específicas do Amazon ECR no arquivo `buildspec.yml`:

   ```
   ...
     pre_build:
       commands:
         - echo Logging in to Amazon ECR...
         - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
     build:
       commands:
         - echo Build started on `date`
         - echo Building the Docker image...          
         - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
         - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
     post_build:
       commands:
         - echo Build completed on `date`
         - echo Pushing the Docker image...
         - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
   ...
   ```

   Por estas linhas de código específicas no Docker Hub:

   ```
   ...
     pre_build:
       commands:
         - echo Logging in to Docker Hub...
         # Type the command to log in to your Docker Hub account here.          
     build:
       commands:
         - echo Build started on `date`
         - echo Building the Docker image...
         - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
         - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $IMAGE_REPO_NAME:$IMAGE_TAG
     post_build:
       commands:
         - echo Build completed on `date`
         - echo Pushing the Docker image...
         - docker push $IMAGE_REPO_NAME:$IMAGE_TAG
   ...
   ```

1. Faça o upload do código editado em um bucket de entrada do S3 ou em um AWS CodeCommit repositório do Bitbucket. GitHub 
**Importante**  
Não faça upload de `(root directory name)`, apenas dos arquivos dentro de `(root directory name)`.   
Se você estiver usando um bucket de entrada do S3, crie um arquivo ZIP que contenha os arquivos e envie-o para o bucket de entrada. Não adicione `(root directory name)` ao arquivo ZIP, apenas aos arquivos dentro de `(root directory name)`.

1. Substitua estas linhas de código da entrada formatada JSON para o comando `create-project`:

   ```
   ...
       "environmentVariables": [
         {
           "name": "AWS_DEFAULT_REGION",
           "value": "region-ID"
         },
         {
           "name": "AWS_ACCOUNT_ID",
           "value": "account-ID"
         },
         {
           "name": "IMAGE_REPO_NAME",
           "value": "Amazon-ECR-repo-name"
         },
         {
           "name": "IMAGE_TAG",
           "value": "latest"
         }
       ]
   ...
   ```

   Por estas linhas de código:

   ```
   ...
       "environmentVariables": [
         {
           "name": "IMAGE_REPO_NAME",
           "value": "your-Docker-Hub-repo-name"
         },
         {
           "name": "IMAGE_TAG",
           "value": "latest"
         }
       ]
   ...
   ```

1. Crie um ambiente de compilação, execute a compilação e exiba informações relacionadas.

1. Confirme se a imagem do Docker foi enviada AWS CodeBuild com sucesso para o repositório. Faça login no Docker Hub, vá até o repositório e selecione a guia **Tags**. A tag `latest` deve conter um valor **Last Updated** bem recente.

# Registro privado com AWS Secrets Manager amostra para CodeBuild
<a name="sample-private-registry"></a>

 Este exemplo mostra como usar uma imagem do Docker armazenada em um registro privado como seu ambiente AWS CodeBuild de execução. As credenciais para o registro privado são armazenadas no AWS Secrets Manager. Qualquer registro privado funciona com CodeBuild. Esse exemplo usa o Docker Hub. 

**nota**  
Os segredos são visíveis para ações e não são mascarados quando gravados em um arquivo.

**Topics**
+ [Requisitos do exemplo do registro privado](#sample-private-registry-requirements)
+ [Crie um CodeBuild projeto com um registro privado](private-registry-sample-create-project.md)
+ [Configurar uma credencial de registro privada para executores auto-hospedados](private-registry-sample-configure-runners.md)

## Requisitos do exemplo do registro privado
<a name="sample-private-registry-requirements"></a>

 Para usar um registro privado com AWS CodeBuild, você deve ter o seguinte: 
+  Um segredo do Secrets Manager que armazena suas credenciais do Docker Hub. As credenciais são usados para acessar seu repositório privado. 
**nota**  
Você será cobrado pelos segredos criados.
+  Um repositório ou conta privada. 
+  Uma política do IAM de função de CodeBuild serviço que concede acesso ao seu segredo do Secrets Manager. 

 Siga estas etapas para criar esses recursos e, em seguida, criar um projeto de CodeBuild compilação usando as imagens do Docker armazenadas em seu registro privado. 

# Crie um CodeBuild projeto com um registro privado
<a name="private-registry-sample-create-project"></a>

1. Para obter informações sobre como criar um repositório privado gratuito, consulte [repositórios no Docker Hub](https://docs.docker.com/docker-hub/repos/). Você também pode executar os comandos a seguir em um terminal para extrair uma imagem, obter seu ID e enviá-la a um novo repositório. 

   ```
   docker pull amazonlinux
   docker images amazonlinux --format {{.ID}}
   docker tag image-id your-username/repository-name:tag
   docker login
   docker push your-username/repository-name
   ```

1.  Siga as etapas em [Criar um AWS Secrets Manager segredo](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) no *Guia do AWS Secrets Manager usuário*.

   

   1.  Na etapa 3, em **Escolher tipo de segredo**, selecione **Outro tipo de segredo**. 

   1. Em **Chave/valor do segredo**, crie um par de chave/valor para o nome de usuário do Docker Hub e um par de chave/valor para a senha do Docker Hub. 

   1.  Continue seguindo as etapas em [Criar um AWS Secrets Manager segredo](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html). 

   1.  Na etapa 5, na página **Configurar alternância automática**, desative-a porque as chaves correspondem às credenciais do Docker Hub. 

   1.  Conclua seguindo as etapas em [Criar um AWS Secrets Manager segredo](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html). 

    Para ter mais informações, consulte [O que é o AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) 

1.  Quando você cria um AWS CodeBuild projeto no console, CodeBuild anexa a permissão necessária para você. Se você usar uma AWS KMS chave diferente de`DefaultEncryptionKey`, deverá adicioná-la à função de serviço. Para obter mais informações, consulte [Modifying a role (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html#roles-managingrole-editing-console) no *Guia do usuário do IAM*. 

    Para que o perfil de serviço funcione com o Secrets Manager, ele deverá ter, no mínimo, a permissão `secretsmanager:GetSecretValue`.   
![\[A configuração do perfil de serviço.\]](http://docs.aws.amazon.com/pt_br/codebuild/latest/userguide/images/private-registry-sample-iam.png)

1.  Para usar o console para criar um projeto com um ambiente armazenado em um registro privado, faça o seguinte enquanto você cria um projeto. Para mais informações, consulte [Criar um projeto de compilação (console)](create-project.md#create-project-console). 
**nota**  
 Se seu registro privado estiver em sua VPC, ele deverá ter acesso público à Internet. CodeBuild não é possível extrair uma imagem de um endereço IP privado em uma VPC. 

   1.  Em **Imagem de ambiente**, selecione **Imagem personalizada**. 

   1.  Para **Environment type (Tipo de ambiente)**, selecione **Linux** ou **Windows**. 

   1.  Em **Registro de imagens**, selecione **Outro registro**. 

   1.  Em **URL de registro externo**, insira o local da imagem e, em **Credencial do registro: opcional**, insira o ARN ou o nome das credenciais do Secrets Manager.
**nota**  
 Se as suas credenciais não existirem em sua região atual, será necessário usar o ARN. Não será possível usar o nome da credencial se as credenciais existirem em uma região diferente. 

# Configurar uma credencial de registro privada para executores auto-hospedados
<a name="private-registry-sample-configure-runners"></a>

Use as instruções apresentadas a seguir para configurar uma credencial de registro para um executor auto-hospedado.

**nota**  
Observe que essas credenciais só serão usadas se as imagens forem substituídas pelas de registros privados. 

------
#### [ AWS Management Console ]

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Crie um projeto de compilação ou selecione um já existente. Para obter informações, consulte [Criar um projeto de compilação (console)](create-project.md#create-project-console) e [Alterar configurações de um projeto de compilação (console)](change-project.md#change-project-console).

1.  Em **Ambiente**, escolha **Configuração adicional**. 

1.  Em **Configuração adicional**, insira o nome ou ARN do formulário secreto AWS Secrets Manager para a **credencial do Registro** - opcional.  
![\[A configuração da credencial do registro.\]](http://docs.aws.amazon.com/pt_br/codebuild/latest/userguide/images/registry-credential.png)

------
#### [ AWS CLI ]

1. Se você quiser criar um projeto, execute o comando **create-project**.

   ```
   aws codebuild create-project \
       --name project-name \
       --source type=source-type,location=source-location \
       --environment "type=environment-type,image=image,computeType=compute-type,registryCredential={credentialProvider=SECRETS_MANAGER,credential=secret-name-or-arn},imagePullCredentialsType=CODEBUILD|SERVICE_ROLE" \
       --artifacts type=artifacts-type \
       --service-role arn:aws:iam::account-ID:role/service-role/service-role-name
   ```

1. Se você quiser atualizar um projeto já existente, execute o comando **update-project**.

   ```
   aws codebuild update-project \
       --name project-name \
       --environment "type=environment-type,image=image,computeType=compute-type,registryCredential={credentialProvider=SECRETS_MANAGER,credential=secret-name-or-arn}"
   ```

------

# Criar um site estático com saída de compilação hospedada em um bucket do S3
<a name="sample-disable-artifact-encryption"></a>

Você pode desabilitar a criptografia de artefatos em uma compilação. Convém fazer isso para que você possa publicar os artefatos em um local configurado para hospedar um site. Não é possível publicar artefatos criptografados. Este exemplo mostra como você pode usar webhooks para acionar uma compilação e publicar seus artefatos em um bucket do S3 configurado como um site. 

1.  Siga as instruções em [Configurar um site estático](https://docs.aws.amazon.com/AmazonS3/latest/userguide/HostingWebsiteOnS3Setup.html) para configurar um bucket do S3 para funcionar como um site. 

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1.  Se uma página de CodeBuild informações for exibida, escolha **Criar projeto de construção**. Caso contrário, no painel de navegação, expanda **Compilar**, escolha **Projetos de compilação** e, depois, **Criar projeto de compilação**. 

1. Em **Nome do projeto**, insira um nome para esse projeto de compilação. Os nomes dos projetos de criação devem ser exclusivos em cada AWS conta. Também é possível incluir uma descrição opcional do projeto de compilação para ajudar outros usuários a entender para que esse projeto é usado.

1.  Em **Source (Origem)**, para **Source provider (Provedor de origem)**, selecione **GitHub**. Siga as instruções para se conectar (ou reconectar GitHub) e escolha **Autorizar**. 

    Em **Webhook**, selecione **Rebuild every time a code change is pushed to this repository (Recompilar toda vez que uma alteração de código for enviada para este repositório)**. Você só pode marcar essa caixa de seleção caso tenha escolhido **Use a repository in my account (Usar um repositório na minha conta)**.   
![\[A configuração do webhook.\]](http://docs.aws.amazon.com/pt_br/codebuild/latest/userguide/images/webhook.png)

1. Em **Ambiente**:

   Para **Imagem do ambiente**, faça um dos seguintes procedimentos:
   + Para usar uma imagem do Docker gerenciada por AWS CodeBuild, escolha **Imagem gerenciada** e, em seguida, faça seleções em **Sistema operacional**, **Tempo de execução (s)**, **Imagem e Versão da** **imagem**. Faça uma seleção em **Environment type (Tipo de ambiente)** se estiver disponível.
   + Para usar outra imagem do Docker, selecione **Custom image (Imagem personalizada)**. Em **Tipo de ambiente**, selecione **ARM**, **Linux**, **Linux GPU** ou **Windows**. Se você selecionar **Other registry (Outro registro)**, em **External registry URL (URL de registro externo)**, insira o nome e a tag da imagem do Docker no Docker Hub usando o formato `docker repository/docker image name`. Se você escolher o **Amazon ECR**, use o **repositório Amazon ECR e** a imagem do **Amazon ECR para escolher a imagem** do Docker em sua conta. AWS 
   + Para usar uma imagem privada do Docker, selecione **Imagem personalizada**. Em **Tipo de ambiente**, selecione **ARM**, **Linux**, **Linux GPU** ou **Windows**. Em **Image registry (Registro da imagem)**, selecione **Other registry (Outro registro)** e insira o ARN das credenciais da imagem privada do Docker. As credenciais devem ser criadas pelo Secrets Manager. Para obter mais informações, consulte [O que é o AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) no *Guia do usuário do AWS Secrets Manager *.

1. Em **Perfil de serviço**, faça um dos seguintes procedimentos:
   + Se você não tiver uma função CodeBuild de serviço, escolha **Nova função de serviço**. No campo **Role name**, digite o nome da nova função.
   + Se você tiver uma função CodeBuild de serviço, escolha **Função de serviço existente**. Em **ARN do perfil**, escolha o perfil de serviço.
**nota**  
Ao usar o console para criar ou atualizar um projeto de compilação, você pode criar uma função de CodeBuild serviço ao mesmo tempo. Por padrão, a função funciona somente com esse projeto de build. Se você usar o console para associar essa função de serviço a outro projeto de compilação, a função será atualizada para funcionar com os outros projetos de compilação. Uma função de serviço pode funcionar com até 10 projetos de compilação.

1. Em **Buildspec**, siga um destes procedimentos:
   + Escolha **Usar um arquivo buildspec** para usar o arquivo buildspec.yml no diretório raiz do código-fonte.
   + Selecione **Inserir comandos de compilação** para usar o console para inserir comandos de compilação.

   Para obter mais informações, consulte o [Referência de buildspec](build-spec-ref.md).

1.  Em **Artefatos**, em **Tipo**, escolha **Amazon S3** para armazenar a saída da compilação em um bucket do S3. 

1.  Em **Bucket name (Nome do bucket)**, escolha o nome do bucket do S3 que você configurou para funcionar como um site na etapa 1. 

1.  Se você escolheu **Insert build commands (Inserir comandos de compilação)** em **Environment (Ambiente)**, em **Output files (Arquivos de saída)**, insira os locais dos arquivos da compilação que você quer colocar no bucket de saída. Se você tiver mais de um local, use uma vírgula para separar cada um deles (por exemplo, **appspec.yml, target/my-app.jar**). Para obter mais informações, consulte [Artifacts reference-key in the buildspec file](build-spec-ref.md#artifacts-build-spec).

1.  Selecione **Disable artifacts encryption (Desabilitar a criptografia dos artefatos)**. 

1. Expanda **Configuração adicional** e escolha as opções conforme apropriado.

1. Selecione **Create build project (Criar projeto de compilação)**. Na página de projeto de compilação, em **Build history (Histórico de compilação)**, escolha **Start build (Iniciar compilação)** para executar a compilação.

1.  (Opcional) Siga as instruções em [Exemplo: Acelere seu site com a Amazon CloudFront](https://docs.aws.amazon.com/AmazonS3/latest/userguide/website-hosting-cloudfront-walkthrough.html) no Guia do *desenvolvedor do Amazon S3*. 

# Várias fontes de entrada e exemplos de artefatos de saída
<a name="sample-multi-in-out"></a>

Você pode criar um projeto de compilação do AWS CodeBuild com mais de uma origem de entrada e mais de um conjunto de artefatos de saída. Este exemplo mostra como configurar um projeto de compilação que: 
+ Usa várias origens e repositórios de diferentes tipos.
+ Publica artefatos de compilação em vários buckets do S3 em uma única compilação.

 No exemplo a seguir, você cria um projeto de compilação e o utiliza para executar uma compilação. O exemplo usa o arquivo buildspec do projeto de compilação para mostrar como incorporar mais de uma origem e criar mais de um conjunto de artefatos. 

Para saber como criar um pipeline que use várias entradas de origem para o CodeBuild a fim de criar vários artefatos de saída, consulte [Amostra de uma CodePipeline/CodeBuild integração com várias fontes de entrada e artefatos de saída](sample-codepipeline.md#sample-pipeline-multi-input-output).

**Topics**
+ [Criar um projeto de compilação com várias entradas e saídas](sample-multi-in-out-create.md)
+ [Criar um projeto de compilação sem uma origem](no-source.md)

# Criar um projeto de compilação com várias entradas e saídas
<a name="sample-multi-in-out-create"></a>

Use o procedimento a seguir para criar um projeto de compilação com várias entradas e saídas.

**Para criar um projeto de compilação com várias entradas e saídas**

1.  Faça upload das origens em um ou mais buckets do S3, repositórios do CodeCommit, do GitHub, do GitHub Enterprise Server ou do Bitbucket. 

1.  Escolha qual será a origem principal. Essa é a origem em que o CodeBuild procura e executa o arquivo buildspec. 

1.  Crie um projeto de compilação. Para obter mais informações, consulte [Criar um projeto de compilação no AWS CodeBuild](create-project.md). 

1.  Crie o projeto de compilação, execute a compilação e obtenha informações sobre ela. 

1.  Se você usar a AWS CLI para criar o projeto de compilação, a entrada em formato JSON para o comando `create-project` poderá ser semelhante a: 

   ```
   {
     "name": "sample-project",
     "source": {
       "type": "S3",
       "location": "<bucket/sample.zip>"
     },
     "secondarySources": [
       {
         "type": "CODECOMMIT",
         "location": "https://git-codecommit.us-west-2.amazonaws.com/v1/repos/repo",
         "sourceIdentifier": "source1"
       },
       {
         "type": "GITHUB",
         "location": "https://github.com/awslabs/aws-codebuild-jenkins-plugin",
         "sourceIdentifier": "source2"
       }
     ],
     "secondaryArtifacts": [ss
       {
         "type": "S3",
         "location": "<output-bucket>",
         "artifactIdentifier": "artifact1"
       },
       {
         "type": "S3",
         "location": "<other-output-bucket>",
         "artifactIdentifier": "artifact2"
       }
     ],
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "aws/codebuild/standard:5.0",
       "computeType": "BUILD_GENERAL1_SMALL"
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```

 Sua origem principal é definida abaixo do atributo `source`. Todas as outras origens são chamadas de secundárias e aparecem abaixo de `secondarySources`. Todas as origens secundárias são instaladas em seu próprio diretório. Esse diretório é armazenado na variável de ambiente interna `CODEBUILD_SRC_DIR_sourceIdentifer`. Para obter mais informações, consulte [Variáveis de ambiente em ambientes de compilação](build-env-ref-env-vars.md). 

 O atributo `secondaryArtifacts` contém uma lista de definições de artefato. Esses artefatos usam o bloco `secondary-artifacts` do arquivo buildspec que fica aninhado dentro do bloco `artifacts`. 

 Os artefatos secundários no arquivo buildspec têm a mesma estrutura que os artefatos e são separados pelo seu respectivo identificador de artefato. 

**nota**  
 Na [API do CodeBuild](https://docs.aws.amazon.com/codebuild/latest/APIReference/), o `artifactIdentifier` em um artefato secundário é um atributo obrigatório em `CreateProject` e `UpdateProject`. Ele deve ser usado para fazer referência a um artefato secundário. 

 Com a entrada em formato JSON anterior, o arquivo buildspec do projeto deve ter esta aparência: 

```
version: 0.2

phases:
  install:
    runtime-versions:
      java: openjdk11
  build:
    commands:
      - cd $CODEBUILD_SRC_DIR_source1
      - touch file1
      - cd $CODEBUILD_SRC_DIR_source2
      - touch file2

artifacts:
  files:
    - '**.*'
  secondary-artifacts:
    artifact1:
      base-directory: $CODEBUILD_SRC_DIR_source1
      files:
        - file1
    artifact2:
      base-directory: $CODEBUILD_SRC_DIR_source2
      files:
        - file2
```

 Você pode substituir a versão da origem principal usando a API com o atributo `sourceVersion` em `StartBuild`. Para substituir uma ou mais versões de origem secundária, use o atributo `secondarySourceVersionOverride`. 

 A entrada em formato JSON para o comando `start-build` na AWS CLI deve ter esta aparência: 

```
{
   "projectName": "sample-project",
   "secondarySourcesVersionOverride": [
      {
        "sourceIdentifier": "source1",
        "sourceVersion": "codecommit-branch"
      },
      {
        "sourceIdentifier": "source2",
        "sourceVersion": "github-branch"
      },
   ]
}
```

# Criar um projeto de compilação sem uma origem
<a name="no-source"></a>

 Para configurar um projeto do CodeBuild, escolha o tipo de origem **NO\$1SOURCE** ao configurar a origem. Quando o tipo de origem for **NO\$1SOURCE**, você não poderá especificar um arquivo buildspec porque o projeto não terá uma origem. Em vez disso, você deverá especificar uma string buildspec formatada em YAML no atributo `buildspec` da entrada formatada em JSON para o comando `create-project` da CLI. A aparência poderá ser semelhante a esta: 

```
{
  "name": "project-name",
  "source": {
    "type": "NO_SOURCE",
    "buildspec": "version: 0.2\n\nphases:\n  build:\n    commands:\n      - command"
   },
  "environment": {
    "type": "LINUX_CONTAINER",
    "image": "aws/codebuild/standard:5.0",
    "computeType": "BUILD_GENERAL1_SMALL",    
  },
  "serviceRole": "arn:aws:iam::account-ID:role/role-name",
  "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
}
```

Para obter mais informações, consulte [Crie um projeto de compilação (AWS CLI)](create-project.md#create-project-cli).

# Versões de tempo de execução na amostra de arquivo buildspec para CodeBuild
<a name="sample-runtime-versions"></a>

Se você usa a imagem padrão do Amazon Linux 2 (AL2) versão 1.0 ou posterior, ou a imagem padrão do Ubuntu versão 2.0 ou posterior, você pode especificar um ou mais tempos de execução na `runtime-versions` seção do seu arquivo buildspec. Os exemplos a seguir mostram como você pode alterar o runtime do projeto, especificar mais de um runtime e especificar um runtime que dependa de outro runtime. Para obter informações sobre tempos de execução com suporte, consulte [Imagens do Docker fornecidas por CodeBuild](build-env-ref-available.md).

**nota**  
Se você usar o Docker no contêiner de compilação, sua compilação deverá ser executada no modo privilegiado. Para obter mais informações, consulte [Execute AWS CodeBuild compilações manualmente](run-build.md) e [Criar um projeto de compilação no AWS CodeBuild](create-project.md). 

**Topics**
+ [Atualizar a versão do runtime no arquivo buildspec](sample-runtime-update-version.md)
+ [Especificar dois tempos de execução](sample-runtime-two-major-version-runtimes.md)

# Atualizar a versão do runtime no arquivo buildspec
<a name="sample-runtime-update-version"></a>

Modifique o runtime usado pelo projeto para uma nova versão atualizando a seção `runtime-versions` do arquivo buildspec. Os exemplos a seguir mostram como especificar as versões 8 e 11 do Java.
+ Uma seção `runtime-versions` que especifica a versão 8 de Java:

  ```
  phases:
    install:
      runtime-versions:
        java: corretto8
  ```
+ Uma seção `runtime-versions` que especifica a versão 11 de Java:

  ```
  phases:
    install:
      runtime-versions:
        java: corretto11
  ```

Os exemplos a seguir mostram como especificar diferentes versões do Python usando a imagem padrão 5.0 do Ubuntu ou a imagem padrão 3.0 do Amazon Linux 2:
+ Uma seção `runtime-versions` que especifica o Python versão 3.7: 

  ```
  phases:
    install:
      runtime-versions:
        python: 3.7
  ```
+ Uma seção `runtime-versions` que especifica o Python versão 3.8: 

  ```
  phases:
    install:
      runtime-versions:
        python: 3.8
  ```

Este exemplo demonstra um projeto que começa com o tempo de execução Java versão 8 e, depois, é atualizado para o tempo de execução Java versão 10. 

1. Faça o download e instale o Maven. Para obter mais informações, consulte [Downloading Apache Maven](https://maven.apache.org/download.cgi) e [Installing Apache Maven](https://maven.apache.org/install.html) no site da Apache Maven.

1. Alterne para um diretório vazio em seu computador ou instância local e execute este comando Maven.

   ```
   mvn archetype:generate "-DgroupId=com.mycompany.app" "-DartifactId=ROOT" "-DarchetypeArtifactId=maven-archetype-webapp" "-DinteractiveMode=false"
   ```

   Se tiver êxito, a estrutura de diretório e os arquivos serão criados.

   ```
   .
   └── ROOT
       ├── pom.xml
       └── src
           └── main
               ├── resources
               └── webapp
                   ├── WEB-INF
                   │   └── web.xml
                   └── index.jsp
   ```

1. Crie um arquivo denominado `buildspec.yml` com os conteúdos a seguir. Armazene o arquivo no diretório ` (root directory name)/my-web-app`. 

   ```
   version: 0.2
   
   phases:
     install:
       runtime-versions:
         java: corretto8
     build:
       commands:
         - java -version
         - mvn package
   artifacts:
     files:
       - '**/*'
     base-directory: 'target/my-web-app'
   ```

   No arquivo buildspec: 
   + A seção `runtime-versions` especifica que o projeto usa o tempo de execução Java versão 8. 
   + O comando `- java -version` exibe a versão de Java usada pelo seu projeto ao ser compilado. 

   A estrutura de arquivo deve se parecer com esta. 

   ```
   (root directory name)
   └── my-web-app
       ├── src
       │   ├── main
       │   ├── resources
       │   └── webapp
       │       └── WEB-INF
       │           └── web.xml
       │               └── index.jsp
       ├── buildspec.yml
       └── pom.xml
   ```

1. Faça upload do conteúdo do `my-web-app` diretório em um bucket de entrada do S3 ou em um repositório CodeCommit GitHub, ou Bitbucket. 
**Importante**  
Não faça upload de `(root directory name)` nem `(root directory name)/my-web-app`, apenas dos diretórios e arquivos em `(root directory name)/my-web-app`.   
Se você estiver usando um bucket de entrada do S3, crie um arquivo ZIP que contenha a estrutura de diretório e os arquivos e envie-o para o bucket de entrada. Não adicione `(root directory name)` nem `(root directory name)/my-web-app` ao arquivo ZIP, apenas aos diretórios e arquivos em `(root directory name)/my-web-app`.

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Crie um projeto de compilação. Para obter mais informações, consulte [Criar um projeto de compilação (console)](create-project.md#create-project-console) e [Executar uma compilação (console)](run-build-console.md). Deixe todas as configurações em seus valores padrão, exceto estas configurações.
   + Em **Ambiente**:
     + Em **Imagem do ambiente**, escolha **Imagem gerenciada**.
     + Em **Sistema operacional**, escolha **Amazon Linux 2**. 
     +  Em **Runtime(s)**, selecione **Padrão**. 
     + Para **Imagem**, escolha **aws/codebuild/amazonlinux-x86\$164-standard:4.0**.

1. Selecione **Iniciar compilação**. 

1. Aceite os padrões em **Configuração de compilação** e escolha **Iniciar compilação**. 

1. Assim que a compilação for concluída, veja a saída da compilação na guia **Logs de compilação**. Você deve ver uma saída semelhante a: 

   ```
   [Container] Date Time Phase is DOWNLOAD_SOURCE
   [Container] Date Time CODEBUILD_SRC_DIR=/codebuild/output/src460614277/src
   [Container] Date Time YAML location is /codebuild/output/src460614277/src/buildspec.yml
   [Container] Date Time Processing environment variables
   [Container] Date Time Selecting 'java' runtime version 'corretto8' based on manual selections...
   [Container] Date Time Running command echo "Installing Java version 8 ..."
   Installing Java version 8 ... 
    
   [Container] Date Time Running command export JAVA_HOME="$JAVA_8_HOME" 
    
   [Container] Date Time Running command export JRE_HOME="$JRE_8_HOME" 
    
   [Container] Date Time Running command export JDK_HOME="$JDK_8_HOME" 
    
   [Container] Date Time Running command for tool_path in "$JAVA_8_HOME"/bin/* "$JRE_8_HOME"/bin/*;
   ```

1. Atualize a seção `runtime-versions` para Java versão 11: 

   ```
   install:
       runtime-versions:
         java: corretto11
   ```

1. Depois de salvar a alteração, execute a compilação novamente e veja a saída da compilação. A versão instalada de Java deverá ser 11. Você deve ver uma saída semelhante a: 

   ```
   [Container] Date Time Phase is DOWNLOAD_SOURCE
   [Container] Date Time CODEBUILD_SRC_DIR=/codebuild/output/src460614277/src
   [Container] Date Time YAML location is /codebuild/output/src460614277/src/buildspec.yml
   [Container] Date Time Processing environment variables
   [Container] Date Time Selecting 'java' runtime version 'corretto11' based on manual selections... 
   Installing Java version 11 ... 
    
   [Container] Date Time Running command export JAVA_HOME="$JAVA_11_HOME" 
    
   [Container] Date Time Running command export JRE_HOME="$JRE_11_HOME" 
    
   [Container] Date Time Running command export JDK_HOME="$JDK_11_HOME" 
    
   [Container] Date Time Running command for tool_path in "$JAVA_11_HOME"/bin/* "$JRE_11_HOME"/bin/*;
   ```

# Especificar dois tempos de execução
<a name="sample-runtime-two-major-version-runtimes"></a>

Você pode especificar mais de um tempo de execução no mesmo projeto de CodeBuild compilação. Este exemplo de projeto usa dois arquivos de origem: um que usa o tempo de execução Go e um que usa o tempo de execução Node.js. 

1. Crie um diretório denominado `my-source`. 

1. No diretório `my-source`, crie um diretório chamado `golang-app`. 

1. Crie um arquivo denominado `hello.go` com os conteúdos a seguir. Armazene o arquivo no diretório `golang-app`. 

   ```
   package main
   import "fmt"
   
   func main() {
     fmt.Println("hello world from golang")
     fmt.Println("1+1 =", 1+1)
     fmt.Println("7.0/3.0 =", 7.0/3.0)
     fmt.Println(true && false)
     fmt.Println(true || false)
     fmt.Println(!true)
     fmt.Println("good bye from golang")
   }
   ```

1. No diretório `my-source`, crie um diretório chamado `nodejs-app`. Ele deve estar no mesmo nível que o diretório `golang-app`. 

1. Crie um arquivo denominado `index.js` com os conteúdos a seguir. Armazene o arquivo no diretório `nodejs-app`. 

   ```
   console.log("hello world from nodejs");
   console.log("1+1 =" + (1+1));
   console.log("7.0/3.0 =" + 7.0/3.0);
   console.log(true && false);
   console.log(true || false);
   console.log(!true);
   console.log("good bye from nodejs");
   ```

1. Crie um arquivo denominado `package.json` com os conteúdos a seguir. Armazene o arquivo no diretório `nodejs-app`. 

   ```
   {
     "name": "mycompany-app",
     "version": "1.0.0",
     "description": "",
     "main": "index.js",
     "scripts": {
       "test": "echo \"run some tests here\""
     },
     "author": "",
     "license": "ISC"
   }
   ```

1. Crie um arquivo denominado `buildspec.yml` com os conteúdos a seguir. Armazene o arquivo no diretório `my-source`, no mesmo nível que os diretórios `nodejs-app` e `golang-app`. A seção `runtime-versions` especifica os runtimes do Node.js versão 12 e do Go versão 1.13. 

   ```
   version: 0.2
   
   phases:
     install:
       runtime-versions:
         golang: 1.13
         nodejs: 12
     build:
       commands:
         - echo Building the Go code...
         - cd $CODEBUILD_SRC_DIR/golang-app
         - go build hello.go 
         - echo Building the Node code...
         - cd $CODEBUILD_SRC_DIR/nodejs-app
         - npm run test
   artifacts:
     secondary-artifacts:
       golang_artifacts:
         base-directory: golang-app
         files:
           - hello
       nodejs_artifacts:
         base-directory: nodejs-app
         files:
           - index.js
           - package.json
   ```

1. A estrutura de arquivo deve se parecer com esta. 

   ```
   my-source
   ├── golang-app
   │   └── hello.go
   ├── nodejs.app
   │   ├── index.js
   │   └── package.json
   └── buildspec.yml
   ```

1. Faça upload do conteúdo do `my-source` diretório em um bucket de entrada do S3 ou em um repositório CodeCommit GitHub, ou Bitbucket.
**Importante**  
 Se você estiver usando um bucket de entrada do S3, crie um arquivo ZIP que contenha a estrutura de diretório e os arquivos e envie-o para o bucket de entrada. Não adicione `my-source` ao arquivo ZIP, apenas aos diretórios e arquivos em `my-source`.

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Crie um projeto de compilação. Para obter mais informações, consulte [Criar um projeto de compilação (console)](create-project.md#create-project-console) e [Executar uma compilação (console)](run-build-console.md). Deixe todas as configurações em seus valores padrão, exceto estas configurações.
   + Em **Ambiente**:
     + Em **Imagem do ambiente**, escolha **Imagem gerenciada**.
     + Em **Sistema operacional**, escolha **Amazon Linux 2**.
     + Em **Runtime(s)**, selecione **Padrão**.
     + Para **Imagem**, escolha **aws/codebuild/amazonlinux-x86\$164-standard:4.0**.

1. Selecione **Create build project (Criar projeto de compilação)**. 

1. Selecione **Iniciar compilação**. 

1. Aceite os padrões em **Configuração de compilação** e escolha **Iniciar compilação**. 

1. Assim que a compilação for concluída, veja a saída da compilação na guia **Logs de compilação**. Você deve ver saída semelhante ao seguinte: Ela mostra a saída dos tempos de execução Go e Node.js. Ela também mostra a saída dos aplicativos Go e Node.js. 

   ```
   [Container] Date Time Processing environment variables
   [Container] Date Time Selecting 'golang' runtime version '1.13' based on manual selections...
   [Container] Date Time Selecting 'nodejs' runtime version '12' based on manual selections...
   [Container] Date Time Running command echo "Installing Go version 1.13 ..."
   Installing Go version 1.13 ... 
    
   [Container] Date Time Running command echo "Installing Node.js version 12 ..." 
   Installing Node.js version 12 ... 
    
   [Container] Date Time Running command n $NODE_12_VERSION
      installed : v12.20.1 (with npm 6.14.10)
   
   [Container] Date Time Moving to directory /codebuild/output/src819694850/src
   [Container] Date Time Registering with agent
   [Container] Date Time Phases found in YAML: 2
   [Container] Date Time  INSTALL: 0 commands
   [Container] Date Time  BUILD: 1 commands
   [Container] Date Time Phase complete: DOWNLOAD_SOURCE State: SUCCEEDED
   [Container] Date Time Phase context status code:  Message:
   [Container] Date Time Entering phase INSTALL
   [Container] Date Time Phase complete: INSTALL State: SUCCEEDED
   [Container] Date Time Phase context status code:  Message:  
   [Container] Date Time Entering phase PRE_BUILD 
   [Container] Date Time Phase complete: PRE_BUILD State: SUCCEEDED 
   [Container] Date Time Phase context status code:  Message:  
   [Container] Date Time Entering phase BUILD 
   [Container] Date Time Running command echo Building the Go code... 
   Building the Go code... 
    
   [Container] Date Time Running command cd $CODEBUILD_SRC_DIR/golang-app 
    
   [Container] Date Time Running command go build hello.go 
    
   [Container] Date Time Running command echo Building the Node code... 
   Building the Node code... 
    
   [Container] Date Time Running command cd $CODEBUILD_SRC_DIR/nodejs-app 
    
   [Container] Date Time Running command npm run test 
    
   > mycompany-app@1.0.0 test /codebuild/output/src924084119/src/nodejs-app 
   > echo "run some tests here" 
    
   run some tests here
   ```

# Amostra da versão de origem com AWS CodeBuild
<a name="sample-source-version"></a>

 Esse exemplo demonstra como especificar uma versão de sua origem usando um formato diferente de um ID de confirmação (também conhecido como um SHA de confirmação). Você pode especificar a versão da sua fonte das seguintes maneiras: 
+  Para um provedor de origem do Amazon S3, use o ID da versão do objeto que representa o arquivo ZIP de entrada da compilação. 
+  Para CodeCommit o Bitbucket e o GitHub Enterprise Server, use um dos seguintes: GitHub 
  +  Solicitação pull como uma referência de solicitação pull (por exemplo, `refs/pull/1/head`). 
  +  Filial como nome de filial. 
  +  ID do commit. 
  +  Etiqueta. 
  +  Referência e um ID de confirmação. A referência pode ser uma das seguintes:
    +  Uma tag (por exemplo, `refs/tags/mytagv1.0^{full-commit-SHA}`). 
    +  Uma ramificação (por exemplo, `refs/heads/mydevbranch^{full-commit-SHA}`). 
    +  Uma solicitação pull (por exemplo, `refs/pull/1/head^{full-commit-SHA}`). 
+  Para GitLab e GitLab autogerenciado, use um dos seguintes: 
  +  Filial como nome de filial. 
  +  ID do commit. 
  +  Etiqueta. 

**nota**  
 Você pode especificar a versão de uma fonte de pull request somente se seu repositório for GitHub ou GitHub Enterprise Server. 

 Se você usar uma referência e um ID de confirmação para especificar uma versão, a fase `DOWNLOAD_SOURCE` da sua compilação será mais rápida do que se você fornecer somente a versão. Isso ocorre porque quando você adiciona uma referência, CodeBuild não é necessário baixar o repositório inteiro para encontrar o commit. 
+ Você pode especificar uma versão de origem com apenas um ID de confirmação, como `12345678901234567890123467890123456789`. Se você fizer isso, CodeBuild deverá baixar o repositório inteiro para encontrar a versão.
+ Você pode especificar uma versão de origem com uma referência e um ID de confirmação neste formato: `refs/heads/branchname^{full-commit-SHA}` (por exemplo, `refs/heads/main^{12345678901234567890123467890123456789}`). Se você fizer isso, CodeBuild baixará somente a ramificação especificada para encontrar a versão.

**nota**  
Para acelerar a `DOWNLOAD_SOURCE` fase da sua compilação, você também pode definir a **profundidade do clone do Git** para um número baixo. CodeBuild baixa menos versões do seu repositório.

**Topics**
+ [Especifique uma versão GitHub do repositório com um ID de confirmação](sample-source-version-github.md)
+ [Especifique uma versão do GitHub repositório com uma referência e um ID de confirmação](sample-source-version-github-ref.md)

# Especifique uma versão GitHub do repositório com um ID de confirmação
<a name="sample-source-version-github"></a>

Você pode especificar uma versão de origem com apenas um ID de confirmação, como `12345678901234567890123467890123456789`. Se você fizer isso, CodeBuild deverá baixar o repositório inteiro para encontrar a versão.

**Para especificar uma versão GitHub do repositório com um ID de confirmação**

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Crie um projeto de compilação. Para obter informações, consulte [Criar um projeto de compilação (console)](create-project.md#create-project-console) e [Executar uma compilação (console)](run-build-console.md). Deixe todas as configurações em seus valores padrão, exceto estas configurações:
   +  Em **Origem**: 
     +  Em **Source provider**, escolha **GitHub**. Se você não estiver conectado GitHub, siga as instruções para se conectar. 
     +  Em **Repository (Repositório)**, escolha **Public repository (Repositório público)**. 
     +  Em **URL do repositório**, insira **https://github.com/aws/aws-sdk-ruby.git**. 
   + Em **Ambiente**:
     + Em **Imagem do ambiente**, escolha **Imagem gerenciada**.
     + Em **Sistema operacional**, escolha **Amazon Linux 2**.
     + Em **Runtime(s)**, selecione **Padrão**.
     + Para **Imagem**, escolha **aws/codebuild/amazonlinux-x86\$164-standard:4.0**.

1.  Em **Build specifications (Especificações de compilação)**, escolha **Insert build commands (Inserir comandos de compilação)** e selecione **Switch to editor (Alternar para editor)**. 

1.  Em **Build commands (Comandos de compilação)**, substitua o texto de espaço reservado pelo seguinte: 

   ```
   version: 0.2
   
   phases:
     install:
       runtime-versions:
         ruby: 2.6
     build:
       commands:
          - echo $CODEBUILD_RESOLVED_SOURCE_VERSION
   ```

    A seção `runtime-versions` é necessária quando você usa a imagem padrão do Ubuntu 2.0. Aqui, o tempo de execução da versão 2.6 do Ruby é especificado, mas você pode usar qualquer tempo de execução. O comando `echo` exibe a versão do código-fonte armazenada na variável de ambiente `CODEBUILD_RESOLVED_SOURCE_VERSION`. 

1.  Aceite os padrões em **Configuração de compilação** e escolha **Iniciar compilação**. 

1.  Para **Source version (Versão de origem)**, insira **046e8b67481d53bdc86c3f6affdd5d1afae6d369**. Esse é o SHA de uma confirmação no repositório `https://github.com/aws/aws-sdk-ruby.git`. 

1.  Selecione **Iniciar compilação**. 

1.  Quando a compilação for concluída, você provavelmente verá o seguinte: 
   +  Na guia **Logs de compilação**, qual versão do projeto de origem foi usada. Aqui está um exemplo.

     ```
     [Container] Date Time Running command echo $CODEBUILD_RESOLVED_SOURCE_VERSION 
     046e8b67481d53bdc86c3f6affdd5d1afae6d369
      
     [Container] Date Time Phase complete: BUILD State: SUCCEEDED
     ```
   +  Na guia **Variáveis de ambiente**, a **Versão de origem resolvida** corresponde ao ID de confirmação usado para criar a compilação. 
   +  Na guia **Phase details (Detalhes da fase)**, a duração da fase `DOWNLOAD_SOURCE`. 

# Especifique uma versão do GitHub repositório com uma referência e um ID de confirmação
<a name="sample-source-version-github-ref"></a>

Você pode especificar uma versão de origem com uma referência e um ID de confirmação neste formato: `refs/heads/branchname^{full-commit-SHA}` (por exemplo, `refs/heads/main^{12345678901234567890123467890123456789}`). Se você fizer isso, CodeBuild baixará somente a ramificação especificada para encontrar a versão.

**Para especificar uma versão do GitHub repositório com uma referência e um ID de confirmação.**

1. Siga as etapas em [Especifique uma versão GitHub do repositório com um ID de confirmação](sample-source-version-github.md).

1.  No painel de navegação esquerdo, escolha **Build projects (Projetos de compilação)** e depois escolha o projeto criado anteriormente. 

1.  Selecione **Iniciar compilação**. 

1.  Na **Source version (Versão de origem)**, insira **refs/heads/main^\$1046e8b67481d53bdc86c3f6affdd5d1afae6d369\$1**. Trata-se do mesmo ID de confirmação e de uma referência para uma ramificação no formato `refs/heads/branchname^{full-commit-SHA}`. 

1.  Selecione **Iniciar compilação**. 

1. Quando a compilação for concluída, você provavelmente verá o seguinte: 
   +  Na guia **Logs de compilação**, qual versão do projeto de origem foi usada. Aqui está um exemplo.

     ```
     [Container] Date Time Running command echo $CODEBUILD_RESOLVED_SOURCE_VERSION 
     046e8b67481d53bdc86c3f6affdd5d1afae6d369
      
     [Container] Date Time Phase complete: BUILD State: SUCCEEDED
     ```
   +  Na guia **Variáveis de ambiente**, a **Versão de origem resolvida** corresponde ao ID de confirmação usado para criar a compilação. 
   +  Na guia **Phase details (Detalhes da fase)**, a duração da fase `DOWNLOAD_SOURCE` deve ser menor que a duração em que você usou apenas o ID de confirmação para especificar a versão de sua origem.

# Amostras de repositórios de origem de terceiros para CodeBuild
<a name="sample-third-party-source"></a>

Esta seção descreve exemplos de integrações entre repositórios de origem de terceiros e. CodeBuild


| Amostra | Description | 
| --- | --- | 
|  BitBucket amostra de pull request e filtro de webhook — consulte [Execute a amostra “Solicitação de pull e filtro de webhook do Bitbucket” para CodeBuild](sample-bitbucket-pull-request.md)  |  Este exemplo mostra como criar uma solicitação usando um repositório do Bitbucket. Ele também mostra como usar um Bitbucket webhook para acionar CodeBuild para criar uma compilação de um projeto.  | 
|  GitHub Exemplo de servidor corporativo — consulte [Execute a amostra do GitHub Enterprise Server para CodeBuild](sample-github-enterprise.md)  |  Este exemplo mostra como configurar seus CodeBuild projetos quando o repositório do GitHub Enterprise Server tem um certificado instalado. Também mostra como habilitar webhooks para que CodeBuild reconstrua o código-fonte toda vez que uma alteração de código for enviada ao seu GitHub repositório do Enterprise Server.  | 
|  GitHub amostra de pull request e filtro de webhook — consulte [Execute a solicitação GitHub pull e a amostra do filtro de webhook para CodeBuild](sample-github-pull-request.md)  |  Este exemplo mostra como criar uma pull request usando um repositório do GitHub Enterprise Server. Também mostra como habilitar webhooks para que CodeBuild reconstrua o código-fonte toda vez que uma alteração de código for enviada ao seu GitHub repositório do Enterprise Server.  | 

# Execute a amostra “Solicitação de pull e filtro de webhook do Bitbucket” para CodeBuild
<a name="sample-bitbucket-pull-request"></a>

AWS CodeBuild suporta webhooks quando o repositório de origem é o Bitbucket. Isso significa que, para um projeto de CodeBuild compilação que tem seu código-fonte armazenado em um repositório do Bitbucket, os webhooks podem ser usados para reconstruir o código-fonte toda vez que uma alteração de código é enviada para o repositório. Para obter mais informações, consulte [Filtrar eventos de webhook do Bitbucket](bitbucket-webhook.md). 

Este exemplo mostra como criar uma solicitação usando um repositório do Bitbucket. Também mostra como usar um webhook do Bitbucket para acionar CodeBuild a criação de uma compilação de um projeto.

**nota**  
Ao usar webhooks, é possível que um usuário acione uma compilação inesperada. Para atenuar esse risco, consulte [Práticas recomendadas para usar webhooks](webhooks.md#webhook-best-practices).

**Topics**
+ [Pré-requisitos](#sample-bitbucket-pull-request-prerequisites)
+ [Etapa 1: criar um projeto de compilação com o Bitbucket e habilitar os webhooks](#sample-bitbucket-pull-request-create)
+ [Etapa 2: acionar uma compilação com um webhook do Bitbucket](#sample-bitbucket-pull-request-trigger)

## Pré-requisitos
<a name="sample-bitbucket-pull-request-prerequisites"></a>

 Para executar essa amostra, você deve conectar seu AWS CodeBuild projeto à sua conta do Bitbucket. 

**nota**  
 CodeBuild atualizou suas permissões com o Bitbucket. Se você conectou seu projeto anteriormente ao Bitbucket e agora recebe um erro de conexão do Bitbucket, você deve se reconectar para conceder CodeBuild permissão para gerenciar seus webhooks. 

## Etapa 1: criar um projeto de compilação com o Bitbucket e habilitar os webhooks
<a name="sample-bitbucket-pull-request-create"></a>

 As etapas a seguir descrevem como criar um AWS CodeBuild projeto com o Bitbucket como repositório de origem e habilitar webhooks. 

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1.  Se uma página de CodeBuild informações for exibida, escolha **Criar projeto de construção**. Caso contrário, no painel de navegação, expanda **Compilar**, escolha **Projetos de compilação** e, depois, **Criar projeto de compilação**. 

1. Selecione **Create build project (Criar projeto de compilação)**. 

1. Em **Configuração de projetos**:  
**Nome do projeto**  
Insira um nome para esse projeto de compilação. Os nomes dos projetos de criação devem ser exclusivos em cada AWS conta. Também é possível incluir uma descrição opcional do projeto de compilação para ajudar outros usuários a entender para que esse projeto é usado.

1. Em **Origem**:  
**Provedor de origem**  
Selecione **Bitbucket**. Siga as instruções para se conectar (ou se reconectar) ao Bitbucket e depois escolha **Autorizar**.  
**Repositório**  
Escolha **Repositório em minha conta Bitbucket**.  
Se você ainda não se conectou à conta do Bitbucket, insira o nome de usuário e senha do aplicativo do Bitbucket e selecione **Salvar credenciais do Bitbucket**.  
**Repositório do Bitbucket**  
Insira o URL do repositório do Bitbucket.

1. Em **Eventos de webhook da origem principal**, selecione o seguinte. 
**nota**  
A seção **Eventos de webhook da origem principal** só estará visível se você escolheu **Repositório em minha conta Bitbucket** na etapa anterior.

   1. Selecione **Rebuild every time a code change is pushed to this repository (Recompilar toda vez que uma alteração de código for enviada para este repositório)** ao criar seu projeto. 

   1. Em **Event type (Tipo de evento)**, escolha um ou mais eventos. 

   1. Para filtrar quando um evento aciona uma compilação, em **Start a build under these conditions (Iniciar uma compilação sob estas condições)**, adicione um ou mais filtros opcionais. 

   1. Para filtrar quando um evento não é acionado, em **Don't start a build under these conditions (Não iniciar uma compilação sob estas condições)**, adicione um ou mais filtros opcionais. 

   1. Escolha **Adicionar grupo de filtros** para adicionar outro grupo de filtros, se necessário. 

   Para obter mais informações sobre os tipos e os filtros de eventos de webhook do Bitbucket, consulte [Filtrar eventos de webhook do Bitbucket](bitbucket-webhook.md).

1. Em **Ambiente**:  
**Imagem do ambiente**  
Escolha uma das seguintes opções:    
Para usar uma imagem do Docker gerenciada por: AWS CodeBuild  
Selecione **Imagem gerenciada** e, depois, faça as seleções em **Sistema operacional**, **Runtime(s)**, **Imagem** e **Versão da imagem**. Faça uma seleção em **Environment type (Tipo de ambiente)** se estiver disponível.  
Para usar outra imagem do Docker:  
Selecione **Imagem personalizada**. Em **Tipo de ambiente**, selecione **ARM**, **Linux**, **Linux GPU** ou **Windows**. Se você selecionar **Other registry (Outro registro)**, em **External registry URL (URL de registro externo)**, insira o nome e a tag da imagem do Docker no Docker Hub usando o formato `docker repository/docker image name`. Se você escolher o **Amazon ECR**, use o **repositório Amazon ECR e** a imagem do **Amazon ECR para escolher a imagem** do Docker em sua conta. AWS   
Para usar uma imagem privada do Docker:  
Selecione **Imagem personalizada**. Em **Tipo de ambiente**, selecione **ARM**, **Linux**, **Linux GPU** ou **Windows**. Em **Image registry (Registro da imagem)**, selecione **Other registry (Outro registro)** e insira o ARN das credenciais da imagem privada do Docker. As credenciais devem ser criadas pelo Secrets Manager. Para obter mais informações, consulte [O que é AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) no *Guia do AWS Secrets Manager usuário*.  
**Perfil de serviço**  
Escolha uma das seguintes opções:  
   + Se você não tiver uma função CodeBuild de serviço, escolha **Nova função de serviço**. No campo **Role name**, digite o nome da nova função.
   + Se você tiver uma função CodeBuild de serviço, escolha **Função de serviço existente**. Em **ARN do perfil**, escolha o perfil de serviço.
Ao usar o console para criar ou atualizar um projeto de compilação, você pode criar uma função de CodeBuild serviço ao mesmo tempo. Por padrão, a função funciona somente com esse projeto de build. Se você usar o console para associar essa função de serviço a outro projeto de compilação, a função será atualizada para funcionar com os outros projetos de compilação. Uma função de serviço pode funcionar com até 10 projetos de compilação.

1. Em **Buildspec**, siga um destes procedimentos:
   + Escolha **Usar um arquivo buildspec** para usar o arquivo buildspec.yml no diretório raiz do código-fonte.
   + Selecione **Inserir comandos de compilação** para usar o console para inserir comandos de compilação.

   Para obter mais informações, consulte o [Referência de buildspec](build-spec-ref.md).

1. Em **Artefatos**:  
**Tipo**  
Escolha uma das seguintes opções:  
   + Se você não quiser criar artefatos de saída de compilação, selecione **Nenhum artefato**.
   + Para armazenar a saída de compilação em um bucket do S3, escolha **Amazon S3** e faça o seguinte:
     + Se você quiser usar o nome do projeto para a pasta ou arquivo ZIP de saída da compilação, deixe **Name (Nome)** em branco. Caso contrário, insira o nome. Por padrão, o nome do artefato é o nome do projeto. Se você quiser usar um nome diferente, insira-o na caixa de nome do artefato. Se você quiser gerar um arquivo ZIP, inclua a extensão zip.
     + Para **Bucket name**, selecione o nome do bucket de saída.
     + Se você tiver escolhido **Inserir comandos de compilação** anteriormente neste procedimento, em **Arquivos de saída**, insira os locais dos arquivos da compilação que deseja incluir na pasta ou no arquivo ZIP de saída da compilação. Para vários locais, separe-os com uma vírgula (por exemplo, `appspec.yml, target/my-app.jar`). Para obter mais informações, consulte a descrição de `files` em [Sintaxe de buildspec](build-spec-ref.md#build-spec-ref-syntax).  
**Configuração adicional**  
Expanda **Configuração adicional** e defina as opções conforme apropriado.

1. Selecione **Create build project (Criar projeto de compilação)**. Na página **Revisão**, escolha **Iniciar compilação** para executar a compilação.

## Etapa 2: acionar uma compilação com um webhook do Bitbucket
<a name="sample-bitbucket-pull-request-trigger"></a>

Para um projeto que usa webhooks do Bitbucket, AWS CodeBuild cria uma compilação quando o repositório do Bitbucket detecta uma alteração no seu código-fonte. 

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. No painel de navegação, escolha **Build projects (Projetos de compilação)** e, em seguida, escolha um projeto associado a um repositório de Bitbucket com webhooks. Para obter informações sobre como criar um projeto de webhook do Bitbucket, consulte [Etapa 1: criar um projeto de compilação com o Bitbucket e habilitar os webhooks](#sample-bitbucket-pull-request-create). 

1. Faça algumas alterações no código no repositório do Bitbucket do seu projeto. 

1. Criar uma solicitação em seu repositório do Bitbucket. Para obter mais informações, consulte [Making a pull request](https://www.atlassian.com/git/tutorials/making-a-pull-request). 

1. Na página Webhooks do Bitbucket, escolha **View request (Visualizar solicitação)** para ver uma lista de eventos recentes. 

1. Escolha **Exibir detalhes** para ver detalhes sobre a resposta retornada por CodeBuild. A aparência pode ser semelhante a esta: 

   ```
   "response":"Webhook received and build started: https://us-east-1.console.aws.amazon.com/codebuild/home..."
   "statusCode":200
   ```

1. Navegue até a página de solicitação de Bitbucket para ver o status da compilação. 

# Execute a amostra do GitHub Enterprise Server para CodeBuild
<a name="sample-github-enterprise"></a>

AWS CodeBuild suporta o GitHub Enterprise Server como um repositório de origem. Este exemplo mostra como configurar seus CodeBuild projetos quando o repositório do GitHub Enterprise Server tem um certificado instalado. Também mostra como habilitar webhooks para que CodeBuild reconstrua o código-fonte toda vez que uma alteração de código for enviada ao seu GitHub repositório do Enterprise Server.

**Topics**
+ [Pré-requisitos](#sample-github-enterprise-prerequisites)
+ [Etapa 1: criar um projeto de compilação com o GitHub Enterprise Server e habilitar webhooks](#sample-github-enterprise-running)

## Pré-requisitos
<a name="sample-github-enterprise-prerequisites"></a>

1. Gere um token de acesso pessoal para seu CodeBuild projeto. Recomendamos que você crie um usuário GitHub corporativo e gere um token de acesso pessoal para esse usuário. Copie-o para sua prancheta para que possa ser usado ao criar seu CodeBuild projeto. Para obter mais informações, consulte [Criação de um token de acesso pessoal para a linha de comando](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/) no site da GitHub Ajuda.

   Ao criar o token de acesso pessoal, inclua o escopo do **repositório** na definição.  
![\[O escopo do repositório na definição.\]](http://docs.aws.amazon.com/pt_br/codebuild/latest/userguide/images/scopes.png)

1. Baixe seu certificado do GitHub Enterprise Server. CodeBuild usa o certificado para criar uma conexão SSL confiável com o repositório.

   **Clientes do Linux/macOS:**

   Na janela de terminal do , execute o seguinte comando:

   ```
   echo -n | openssl s_client -connect HOST:PORTNUMBER \
       | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /folder/filename.pem
   ```

   Substitua os espaços reservados no comando pelos seguintes valores:

   *HOST*. O endereço IP do seu repositório do GitHub Enterprise Server.

   *PORTNUMBER*. O número da porta que você está usando para se conectar (por exemplo, 443).

   *folder*. A pasta em que você baixou seu certificado.

   *filename*. O nome do arquivo do seu certificado.
**Importante**  
Salve o certificado como um arquivo .pem.

   **Clientes no Windows:**

   Use seu navegador para baixar seu certificado do GitHub Enterprise Server. Para ver os detalhes do certificado do site, escolha o ícone de cadeado. Para obter informações sobre como exportar o certificado, consulte a documentação do navegador.
**Importante**  
Salve o certificado como um arquivo .pem.

1. Faça upload do arquivo do certificado para um bucket do S3. Para obter informações sobre como criar um bucket do S3, consulte [Como criar um bucket do S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html) Para obter informações sobre como fazer upload de objetos para um bucket do S3, consulte [Como fazer upload de arquivos e pastas para um bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)
**nota**  
Esse bucket deve estar na mesma AWS região das suas compilações. Por exemplo, se você CodeBuild instruir a execução de uma compilação na região Leste dos EUA (Ohio), o bucket deverá estar na região Leste dos EUA (Ohio).

## Etapa 1: criar um projeto de compilação com o GitHub Enterprise Server e habilitar webhooks
<a name="sample-github-enterprise-running"></a>

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1.  Se uma página de CodeBuild informações for exibida, escolha **Criar projeto de construção**. Caso contrário, no painel de navegação, expanda **Compilar**, escolha **Projetos de compilação** e, depois, **Criar projeto de compilação**. 

1. Em **Nome do projeto**, insira um nome para esse projeto de compilação. Os nomes dos projetos de criação devem ser exclusivos em cada AWS conta. Também é possível incluir uma descrição opcional do projeto de compilação para ajudar outros usuários a entender para que esse projeto é usado.

1. Em **Origem**, em **Provedor de origem**, escolha **Servidor GitHub corporativo**.
   + Escolha **Gerenciar credenciais da conta** e **Token de acesso pessoal**. Em **Service**, escolha **Secrets Manager (recomendado)** e configure o segredo. Em seguida**, em Token de acesso pessoal GitHub corporativo**, insira seu token de acesso pessoal e escolha **Salvar**.
   + Em **Repository URL (URL do repositório)**, insira o caminho para o seu repositório, incluindo o nome do repositório.
   + Expanda **Configuração Adicional**.
   + Selecione **Rebuild every time a code change is pushed to this repository** para recompilar toda vez que uma alteração de código for enviada para esse repositório.
   + Selecione **Habilitar SSL inseguro** para ignorar os avisos de SSL enquanto você se conecta ao seu repositório de projetos do GitHub Enterprise Server.
**nota**  
Recomendamos usar **Enable insecure SSL** somente para teste. Ele não deve ser usado em um ambiente de produção.  
![\[A configuração do repositório do projeto GitHub Enterprise Server.\]](http://docs.aws.amazon.com/pt_br/codebuild/latest/userguide/images/github-enterprise.png)

1. Em **Ambiente**:

   Para **Imagem do ambiente**, faça um dos seguintes procedimentos:
   + Para usar uma imagem do Docker gerenciada por AWS CodeBuild, escolha **Imagem gerenciada** e, em seguida, faça seleções em **Sistema operacional**, **Tempo de execução (s)**, **Imagem e Versão da** **imagem**. Faça uma seleção em **Environment type (Tipo de ambiente)** se estiver disponível.
   + Para usar outra imagem do Docker, selecione **Custom image (Imagem personalizada)**. Em **Tipo de ambiente**, selecione **ARM**, **Linux**, **Linux GPU** ou **Windows**. Se você selecionar **Other registry (Outro registro)**, em **External registry URL (URL de registro externo)**, insira o nome e a tag da imagem do Docker no Docker Hub usando o formato `docker repository/docker image name`. Se você escolher o **Amazon ECR**, use o **repositório Amazon ECR e** a imagem do **Amazon ECR para escolher a imagem** do Docker em sua conta. AWS 
   + Para usar uma imagem privada do Docker, selecione **Imagem personalizada**. Em **Tipo de ambiente**, selecione **ARM**, **Linux**, **Linux GPU** ou **Windows**. Em **Image registry (Registro da imagem)**, selecione **Other registry (Outro registro)** e insira o ARN das credenciais da imagem privada do Docker. As credenciais devem ser criadas pelo Secrets Manager. Para obter mais informações, consulte [O que é o AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) no *Guia do usuário do AWS Secrets Manager *.

1. Em **Perfil de serviço**, faça um dos seguintes procedimentos:
   + Se você não tiver uma função CodeBuild de serviço, escolha **Nova função de serviço**. No campo **Role name**, digite o nome da nova função.
   + Se você tiver uma função CodeBuild de serviço, escolha **Função de serviço existente**. Em **ARN do perfil**, escolha o perfil de serviço.
**nota**  
Ao usar o console para criar ou atualizar um projeto de compilação, você pode criar uma função de CodeBuild serviço ao mesmo tempo. Por padrão, a função funciona somente com esse projeto de build. Se você usar o console para associar essa função de serviço a outro projeto de compilação, a função será atualizada para funcionar com os outros projetos de compilação. Uma função de serviço pode funcionar com até 10 projetos de compilação.

1. Expanda **Configuração Adicional**.

   Se você quiser CodeBuild trabalhar com sua VPC:
   + Para **VPC**, escolha a ID da VPC que usa. CodeBuild 
   + Para sub-redes **VPC, escolha as sub-redes** que incluem os recursos que usa. CodeBuild 
   + Para **grupos de segurança da VPC**, escolha os grupos de segurança CodeBuild usados para permitir o acesso aos recursos no. VPCs

   Para obter mais informações, consulte [Use AWS CodeBuild com a Amazon Virtual Private Cloud](vpc-support.md).

1. Em **Buildspec**, siga um destes procedimentos:
   + Escolha **Usar um arquivo buildspec** para usar o arquivo buildspec.yml no diretório raiz do código-fonte.
   + Selecione **Inserir comandos de compilação** para usar o console para inserir comandos de compilação.

   Para obter mais informações, consulte o [Referência de buildspec](build-spec-ref.md).

1. Em **Artefatos**, para **Tipo**, faça um dos seguintes procedimentos:
   + Se você não quiser criar artefatos de saída de compilação, selecione **Nenhum artefato**.
   + Para armazenar a saída de compilação em um bucket do S3, escolha **Amazon S3** e faça o seguinte:
     + Se você quiser usar o nome do projeto para a pasta ou arquivo ZIP de saída da compilação, deixe **Name (Nome)** em branco. Caso contrário, insira o nome. Por padrão, o nome do artefato é o nome do projeto. Se você quiser usar um nome diferente, insira-o na caixa de nome do artefato. Se você quiser gerar um arquivo ZIP, inclua a extensão zip.
     + Para **Bucket name**, selecione o nome do bucket de saída.
     + Se você tiver escolhido **Inserir comandos de compilação** anteriormente neste procedimento, em **Arquivos de saída**, insira os locais dos arquivos da compilação que deseja incluir na pasta ou no arquivo ZIP de saída da compilação. Para vários locais, separe-os com uma vírgula (por exemplo, `appspec.yml, target/my-app.jar`). Para obter mais informações, consulte a descrição de `files` em [Sintaxe de buildspec](build-spec-ref.md#build-spec-ref-syntax).

1. Em **Cache type (Tipo de cache)**, selecione uma das seguintes opções:
   + Se não quiser usar um cache, escolha **No cache**.
   + Se você quiser um cache do Amazon S3, selecione **Amazon S3** e faça o seguinte:
     + Em **Bucket**, escolha o nome do bucket do S3 onde o cache está armazenado.
     + (Opcional) Em **Prefixo do caminho do cache**, insira um prefixo de caminho do Amazon S3. O valor **Cache path prefix (Prefixo do caminho do cache)** é semelhante ao nome de um diretório. Ele permite que você armazene o cache em um bucket no mesmo diretório. 
**Importante**  
Não acrescente uma barra (/) ao final do prefixo do caminho.
   +  Se você quiser usar um cache local, selecione **Local** e depois selecione um ou mais modos de cache local. 
**nota**  
O modo de cache de camada do Docker está disponível apenas para o Linux. Se optar por esse modo, o projeto deverá ser executado no modo privilegiado. 

   O uso do cache economiza um tempo de compilação considerável porque as partes reutilizáveis do ambiente de compilação são armazenadas no cache e usadas em diferentes compilações. Para obter informações sobre como especificar um cache no arquivo de especificação de compilação, consulte [Sintaxe de buildspec](build-spec-ref.md#build-spec-ref-syntax). Para obter mais informações sobre armazenamento em cache, consulte [Compilações em cache para melhorar o desempenho](build-caching.md). 

1. Selecione **Create build project (Criar projeto de compilação)**. Na página de projeto da compilação, escolha **Start build (Iniciar compilação)**.

# Execute a solicitação GitHub pull e a amostra do filtro de webhook para CodeBuild
<a name="sample-github-pull-request"></a>

AWS CodeBuild suporta webhooks quando o repositório de origem está. GitHub Isso significa que, para um projeto de CodeBuild compilação que tem seu código-fonte armazenado em um GitHub repositório, os webhooks podem ser usados para reconstruir o código-fonte toda vez que uma alteração de código é enviada para o repositório. Para obter CodeBuild amostras, consulte [AWS CodeBuild Amostras](https://github.com/aws-samples/aws-codebuild-samples).

**nota**  
Ao usar webhooks, é possível que um usuário acione uma compilação inesperada. Para atenuar esse risco, consulte [Práticas recomendadas para usar webhooks](webhooks.md#webhook-best-practices).

**Topics**
+ [Etapa 1: criar um projeto de compilação com GitHub webhooks e ativá-los](#sample-github-pull-request-running)
+ [Etapa 2: verificar se os webhooks estão habilitados](#verification-checks)

## Etapa 1: criar um projeto de compilação com GitHub webhooks e ativá-los
<a name="sample-github-pull-request-running"></a>

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1.  Se uma página de CodeBuild informações for exibida, escolha **Criar projeto de construção**. Caso contrário, no painel de navegação, expanda **Compilar**, escolha **Projetos de compilação** e, depois, **Criar projeto de compilação**. 

1. Selecione **Create build project (Criar projeto de compilação)**. 

1. Em **Configuração de projetos**:  
**Nome do projeto**  
Insira um nome para esse projeto de compilação. Os nomes dos projetos de criação devem ser exclusivos em cada AWS conta. Também é possível incluir uma descrição opcional do projeto de compilação para ajudar outros usuários a entender para que esse projeto é usado.

1. Em **Origem**:  
**Provedor de origem**  
Selecione **GitHub**. Siga as instruções para se conectar (ou reconectar) GitHub e escolha **Autorizar**.  
**Repositório**  
Escolha **Repositório em minha GitHub conta.**  
**GitHub repositório**  
Insira a URL do seu GitHub repositório.

1. Em **Eventos de webhook da origem principal**, selecione o seguinte.
**nota**  
A seção **Eventos de webhook de origem primária** só estará visível se você escolher **Repositório em minha GitHub conta** na etapa anterior.

   1. Selecione **Rebuild every time a code change is pushed to this repository (Recompilar toda vez que uma alteração de código for enviada para este repositório)** ao criar seu projeto. 

   1. Em **Event type (Tipo de evento)**, escolha um ou mais eventos. 

   1. Para filtrar quando um evento aciona uma compilação, em **Start a build under these conditions (Iniciar uma compilação sob estas condições)**, adicione um ou mais filtros opcionais. 

   1. Para filtrar quando um evento não é acionado, em **Don't start a build under these conditions (Não iniciar uma compilação sob estas condições)**, adicione um ou mais filtros opcionais. 

   1. Escolha **Adicionar grupo de filtros** para adicionar outro grupo de filtros, se necessário. 

   Para obter mais informações sobre filtros e tipos de eventos de GitHub webhook, consulte[GitHub eventos de webhook](github-webhook.md).

1. Em **Ambiente**:  
**Imagem do ambiente**  
Escolha uma das seguintes opções:    
Para usar uma imagem do Docker gerenciada por: AWS CodeBuild  
Selecione **Imagem gerenciada** e, depois, faça as seleções em **Sistema operacional**, **Runtime(s)**, **Imagem** e **Versão da imagem**. Faça uma seleção em **Environment type (Tipo de ambiente)** se estiver disponível.  
Para usar outra imagem do Docker:  
Selecione **Imagem personalizada**. Em **Tipo de ambiente**, selecione **ARM**, **Linux**, **Linux GPU** ou **Windows**. Se você selecionar **Other registry (Outro registro)**, em **External registry URL (URL de registro externo)**, insira o nome e a tag da imagem do Docker no Docker Hub usando o formato `docker repository/docker image name`. Se você escolher **Amazon ECR**, use **Repositório do Amazon ECR** e **Imagem do Amazon ECR** para selecionar a imagem do Docker na conta da AWS .  
Para usar uma imagem privada do Docker:  
Selecione **Imagem personalizada**. Em **Tipo de ambiente**, selecione **ARM**, **Linux**, **Linux GPU** ou **Windows**. Em **Image registry (Registro da imagem)**, selecione **Other registry (Outro registro)** e insira o ARN das credenciais da imagem privada do Docker. As credenciais devem ser criadas pelo Secrets Manager. Para obter mais informações, consulte [O que é AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) no *Guia do AWS Secrets Manager usuário*.  
**Perfil de serviço**  
Escolha uma das seguintes opções:  
   + Se você não tiver uma função CodeBuild de serviço, escolha **Nova função de serviço**. No campo **Role name**, digite o nome da nova função.
   + Se você tiver uma função CodeBuild de serviço, escolha **Função de serviço existente**. Em **ARN do perfil**, escolha o perfil de serviço.
Ao usar o console para criar ou atualizar um projeto de compilação, você pode criar uma função de CodeBuild serviço ao mesmo tempo. Por padrão, a função funciona somente com esse projeto de build. Se você usar o console para associar essa função de serviço a outro projeto de compilação, a função será atualizada para funcionar com os outros projetos de compilação. Uma função de serviço pode funcionar com até 10 projetos de compilação.

1. Em **Buildspec**, siga um destes procedimentos:
   + Escolha **Usar um arquivo buildspec** para usar o arquivo buildspec.yml no diretório raiz do código-fonte.
   + Selecione **Inserir comandos de compilação** para usar o console para inserir comandos de compilação.

   Para obter mais informações, consulte o [Referência de buildspec](build-spec-ref.md).

1. Em **Artefatos**:  
**Tipo**  
Escolha uma das seguintes opções:  
   + Se você não quiser criar artefatos de saída de compilação, selecione **Nenhum artefato**.
   + Para armazenar a saída de compilação em um bucket do S3, escolha **Amazon S3** e faça o seguinte:
     + Se você quiser usar o nome do projeto para a pasta ou arquivo ZIP de saída da compilação, deixe **Name (Nome)** em branco. Caso contrário, insira o nome. Por padrão, o nome do artefato é o nome do projeto. Se você quiser usar um nome diferente, insira-o na caixa de nome do artefato. Se você quiser gerar um arquivo ZIP, inclua a extensão zip.
     + Para **Bucket name**, selecione o nome do bucket de saída.
     + Se você tiver escolhido **Inserir comandos de compilação** anteriormente neste procedimento, em **Arquivos de saída**, insira os locais dos arquivos da compilação que deseja incluir na pasta ou no arquivo ZIP de saída da compilação. Para vários locais, separe-os com uma vírgula (por exemplo, `appspec.yml, target/my-app.jar`). Para obter mais informações, consulte a descrição de `files` em [Sintaxe de buildspec](build-spec-ref.md#build-spec-ref-syntax).  
**Configuração adicional**  
Expanda **Configuração adicional** e defina as opções conforme apropriado.

1. Selecione **Create build project (Criar projeto de compilação)**. Na página **Revisão**, escolha **Iniciar compilação** para executar a compilação.

## Etapa 2: verificar se os webhooks estão habilitados
<a name="verification-checks"></a>

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. No painel de navegação, selecione **Projetos de compilação**.

1. Execute um destes procedimentos:
   + Selecione o link do projeto de compilação com webhooks que você deseja verificar e selecione **Detalhes da compilação**.
   + Selecione o botão ao lado do projeto de compilação com webhooks que você deseja verificar, selecione **Visualizar detalhes** e, depois, **Detalhes da compilação**.

1. Em **Eventos de webhook da origem principal**, escolha o link URL do **Webhook**. 

1. No seu GitHub repositório, na página **Configurações**, em **Webhooks**, verifique se **Pull Requests** e **Pushes** estão selecionados.

1. Nas configurações GitHub do seu perfil, em **Configurações pessoais**, **Aplicativos**, ** OAuthAplicativos autorizados**, você deve ver que seu aplicativo foi autorizado a acessar a AWS região selecionada.

# Tutorial: Assinatura de código da Apple com Fastlane ao CodeBuild usar o S3 para armazenamento de certificados
<a name="sample-fastlane"></a>

[fastlane](https://docs.fastlane.tools/) é uma ferramenta popular de automação de código aberto para automatizar implantações e lançamentos beta de aplicações iOS e Android. Ela gerencia todas as tarefas tediosas, como gerar capturas de tela, gerenciar assinaturas de código e lançar a aplicação.

## Pré-requisitos
<a name="sample-fastlane-prerequisites"></a>

Para concluir este tutorial, primeiro você precisa configurar o seguinte:
+ Um Conta da AWS
+ Uma [conta de desenvolvedor da Apple](https://developer.apple.com/)
+ Um bucket do S3 para armazenar certificados
+ fastlane instalado no projeto: [guia](https://docs.fastlane.tools/getting-started/ios/setup/) para instalar o fastlane

## Etapa 1: configurar o Fastlane Match com o S3 na máquina local
<a name="sample-fastlane-S3"></a>

O [Fastlane Match](https://docs.fastlane.tools/actions/match/) é uma das [ferramentas da Fastlane](https://fastlane.tools/) e permite uma configuração perfeita para assinatura de código em seu ambiente de desenvolvimento local e em outros ambientes. CodeBuild O Fastlane Match armazena todos os seus certificados de assinatura de código e perfis de provisionamento em um Git repository/S3 Bucket/Google Cloud Storage e baixa e instala os certificados e perfis necessários quando necessário.

Neste exemplo de configuração, você configura e usa um bucket do Amazon S3 para armazenamento. 

****

1. Inicialize o match em seu projeto:

   ```
   fastlane match init
   ```

1. Quando solicitado, escolha S3 como modo de armazenamento.

1. Atualize o “*Matchfile*” para usar o S3:

   ```
   storage_mode("s3")
      s3_bucket("your-s3-bucket-name")
      s3_region("your-aws-region")
      type("appstore") # The default type, can be: appstore, adhoc, enterprise or development
   ```

## Etapa 2: configurar o Fastfile
<a name="sample-fastlane-S3-fastfile"></a>

Crie ou atualize seu `Fastfile` com a seguinte lane.

Ativado CodeBuild, o Fastlane Match precisará ser executado toda vez que você criar e assinar seu aplicativo. A maneira mais fácil de fazer isso é adicionar a ação `match` à lane que cria a aplicação.

```
default_platform(:ios)

platform :ios do
  before_all do
    setup_ci
  end
  
  desc "Build and sign the app"
  lane :build do
    match(type: "appstore", readonly: true)
    gym(
      scheme: "YourScheme",
      export_method: "app-store"
    )
  end
end
```

**nota**  
Adicione `setup_ci` à seção `before_all `no `Fastfile` para que a ação de match funcione corretamente. Isso garante que um chaveiro temporário do Fastlane com as permissões apropriadas seja usado. Sem usar isso, podem ocorrer falhas na compilação ou resultados inconsistentes. 



## Etapa 3: executar o comando `fastlane match` para gerar os respectivos certificados e perfis
<a name="sample-fastlane-S3-certificates"></a>

O comando match do fastlane para o tipo especificado (ou seja, development, appstore, adhoc, enterprise) gerará o certificado e o perfil se não estiver disponível na loja remota. Os certificados e perfis serão armazenados no S3 pelo fastlane.

```
bundle exec fastlane match appstore
```

A execução do comando será interativa e o fastlane solicitará a definição da senha para descriptografar os certificados.

## Etapa 4: criar o arquivo da aplicação para o projeto
<a name="sample-fastlane-S3-appfile"></a>

Crie ou adicione o arquivo da aplicação conforme apropriado para o projeto.

****

1. Crie ou adicione o [Gymfile](http://docs.fastlane.tools/actions/gym/#gymfile), [Appfile](http://docs.fastlane.tools/advanced/Appfile/), [Snapfile](http://docs.fastlane.tools/actions/snapshot/#snapfile), [Deliverfile](http://docs.fastlane.tools/actions/deliver/#editing-the-deliverfile) com base nos requisitos de compilação do projeto.

1. Confirmar as alterações para o repositório remoto

## Etapa 5: criar variáveis de ambiente no Secrets Manager
<a name="sample-fastlane-S3-secrets"></a>

Crie dois segredos para armazenar o cookie da sessão do fastlane e a frase secreta correspondente. Consulte mais informações sobre como criar segredos no Secrets Manager em [Criar um segredo do AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

****

1. Acesse seu cookie de sessão do fastlane da seguinte forma.

   1. Chave secreta: `FASTLANE_SESSION`

   1. Valor do segredo: cookie de sessão gerado ao executar o comando a seguir na máquina local.
**nota**  
Esse valor fica disponível após a autenticação em um arquivo local: `~/.fastlane/spaceship/my_appleid_username/cookie`.

      ```
      fastlane spaceauth -u <apple account>
      ```

1. Frase secreta do Fastlane Match - Para permitir que o Fastlane Match decifre os certificados e perfis armazenados no bucket do S3, é necessário adicionar a senha de criptografia que você configurou na etapa de configuração do Match às variáveis de ambiente do projeto. CodeBuild

   1. Chave secreta: `MATCH_PASSWORD`

   1. Valor do segredo: *<match passphrase to decrypt certificates>*. A frase secreta é definida ao gerar os certificados na Etapa 3.

**nota**  
Ao criar os segredos acima no Secrets Manager, forneça o nome de um segredo com o seguinte prefixo: `/CodeBuild/`

## Etapa 6: criar uma frota de computação
<a name="sample-fastlane-S3-fleet"></a>

Crie a frota de computação para o projeto.

****

1. No console, acesse CodeBuild e crie uma nova frota de computação.

1. Escolha “macOS” como sistema operacional e selecione um tipo de computação e uma imagem apropriados.

## Etapa 7: criar um projeto no CodeBuild
<a name="sample-fastlane-S3-project"></a>

Crie seu projeto em CodeBuild.



****

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Crie um projeto de compilação. Para obter informações, consulte [Criar um projeto de compilação (console)](create-project.md#create-project-console) e [Executar uma compilação (console)](run-build-console.md).

1. Configure seu provedor de origem (como GitHub, CodeCommit). Esse é o repositório de origem do projeto do iOS e não o repositório de certificados.

1.  Em **Ambiente**: 
   + Escolha **Capacidade reservada**.
   + Em **Frota**, selecione a frota criada acima.
   + Forneça o nome da função de serviço que CodeBuild será criada para você.
   + Forneça as variáveis de ambiente abaixo.
     + Nome:`MATCH_PASSWORD`, Valor:*<secrets arn>*, Tipo: Secrets Manager (Secrets ARN criado na etapa 5 para MATCH\$1PASSWORD)
     + Nome:`FASTLANE_SESSION`, Valor:*<secrets arn>*, Tipo: Secrets Manager (Secrets ARN criado na Etapa 5 para FASTLANE\$1SESSION)

1. Em **Buildspec**, adicione:

   ```
   version: 0.2
   
   phases:
     install:
       commands:
         - gem install bundler
         - bundle install
     build:
       commands:
         - echo "Building and signing the app..."
         - bundle exec fastlane build
     post_build:
       commands:
         - echo "Build completed on date"
   
   artifacts:
     files:
       - '*/.ipa'
     name: app-$(date +%Y-%m-%d)
   ```

## Etapa 8: configurar o perfil do IAM
<a name="sample-fastlane-S3-role"></a>

Depois que o projeto for criado, certifique-se de que a função de serviço do seu CodeBuild projeto tenha permissões para acessar o bucket do S3 que contém os certificados. Adicione a seguinte política ao perfil:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::your-s3-bucket-name"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::your-s3-bucket-name/*"
        }
    ]
}
```

------

## Etapa 9: executar a compilação
<a name="sample-fastlane-S3-run"></a>

Execute o build. Você pode revisar o status da compilação e fazer login CodeBuild.

Depois que o trabalho for concluído, você poderá visualizar o log do trabalho.

## Solução de problemas
<a name="sample-fastlane-S3-troubleshooting"></a>
+ Se houver problemas com a busca de certificados, certifique-se de que as permissões do IAM estejam configuradas corretamente para acesso ao S3.
+ Se você encontrar problemas com a decodificação do certificado, defina a senha correta na variável de ambiente MATCH\$1PASSWORD.
+ Para problemas de assinatura de código, verifique se sua conta de desenvolvedor da Apple tem os certificados e perfis necessários e se o identificador do pacote no projeto do Xcode corresponde ao do perfil de aprovisionamento.

## Considerações sobre segurança
<a name="sample-fastlane-considerations"></a>

Veja as configurações sobre segurança deste tutorial.
+ Verifique se o bucket do S3 tem as configurações de segurança adequadas, incluindo criptografia em repouso. Em particular, certifique-se de que o bucket não tenha acesso público e restrinja o acesso somente CodeBuild ao sistema que precisa ter acesso.
+ Considere usar AWS Secrets Manager para armazenar informações confidenciais, como MATCH\$1PASSWORD e FASTLANE\$1SESSION.

Este exemplo fornece uma configuração para assinatura de código iOS com Fastlane CodeBuild usando o Amazon S3 para armazenamento de certificados. Talvez seja necessário ajustar algumas etapas com base nos requisitos e no CodeBuild ambiente específicos do projeto. Essa abordagem aproveita os AWS serviços para aumentar a segurança e a integração no AWS ecossistema.

# Tutorial: Assinatura de código da Apple com Fastlane em CodeBuild uso GitHub para armazenamento de certificados
<a name="sample-fastlane-github"></a>

[fastlane](https://docs.fastlane.tools/) é uma ferramenta popular de automação de código aberto para automatizar implantações e lançamentos beta de aplicações iOS e Android. Ela gerencia todas as tarefas tediosas, como gerar capturas de tela, gerenciar assinaturas de código e lançar a aplicação.

Este exemplo demonstra como configurar a assinatura de código da Apple usando o Fastlane em um CodeBuild projeto executado no Mac Fleet, com GitHub armazenamento para certificados e perfis de provisionamento.

## Pré-requisitos
<a name="sample-fastlane-github-prerequisites"></a>

Para concluir este tutorial, primeiro você precisa configurar o seguinte:
+ Um Conta da AWS
+ Uma [conta de desenvolvedor da Apple](https://developer.apple.com/)
+ Um GitHub repositório privado para armazenar certificados
+ fastlane instalado no projeto: [guia](https://docs.fastlane.tools/getting-started/ios/setup/) para instalar o fastlane

## Etapa 1: Configure o Fastlane Match GitHub em sua máquina local
<a name="sample-fastlane-github-certificates"></a>

O [Fastlane Match](https://docs.fastlane.tools/actions/match/) é uma das [ferramentas da Fastlane](https://fastlane.tools/) e permite uma configuração perfeita para assinatura de código em seu ambiente de desenvolvimento local e não. CodeBuild O Fastlane Match armazena todos os seus certificados de assinatura de código e perfis de provisionamento em um Git repository/S3 Bucket/Google Cloud Storage e baixa e instala os certificados e perfis necessários quando necessário.

Neste exemplo de configuração, vamos configurar e usar um repositório Git para armazenamento. 

****

1. Inicialize o match em seu projeto:

   ```
   fastlane match init
   ```

1. Quando solicitado, escolha GitHub como modo de armazenamento.

1. Atualize seu `*Matchfile*` para usar GitHub:

   ```
   git_url("https://github.com/your-username/your-certificate-repo.git")
   storage_mode("git")
   type("development") # The default type, can be: appstore, adhoc, enterprise or development
   ```

**nota**  
Insira o URL HTTPS do repositório Git para fastlane para autenticar e clonar com sucesso. Caso contrário, você poderá receber um erro de autenticação ao tentar usar o match.

## Etapa 2: configurar o Fastfile
<a name="sample-fastlane-github-fastfile"></a>

Crie ou atualize seu `Fastfile` com a seguinte lane.

Ativado CodeBuild, o Fastlane Match precisará ser executado toda vez que você criar e assinar seu aplicativo. A maneira mais fácil de fazer isso é adicionar a ação `match` à lane que cria a aplicação.

```
default_platform(:ios)

platform :ios do
  before_all do
    setup_ci
  end
  
  desc "Build and sign the app"
  lane :build do
    match(type: "appstore", readonly: true)
    gym(
      scheme: "YourScheme",
      export_method: "app-store"
    )
  end
end
```

**nota**  
Adicione `setup_ci` à seção `before_all `no `Fastfile` para que a ação de match funcione corretamente. Isso garante que um chaveiro temporário do Fastlane com as permissões apropriadas seja usado. Sem usar isso, podem ocorrer falhas na compilação ou resultados inconsistentes. 

## Etapa 3: executar o comando `fastlane match` para gerar os respectivos certificados e perfis
<a name="sample-fastlane-github-certificates"></a>

O comando match do fastlane para o tipo especificado (ou seja, development, appstore, adhoc, enterprise) gerará o certificado e o perfil se não estiver disponível na loja remota. Os certificados e perfis serão armazenados GitHub pela fastlane.

```
bundle exec fastlane match appstore
```

A execução do comando será interativa e o fastlane solicitará a definição da senha para descriptografar os certificados.

## Etapa 4: criar o arquivo da aplicação para o projeto
<a name="sample-fastlane-github-appfile"></a>

Crie ou adicione o arquivo da aplicação conforme apropriado para o projeto.

****

1. Crie ou adicione o [Gymfile](http://docs.fastlane.tools/actions/gym/#gymfile), [Appfile](http://docs.fastlane.tools/advanced/Appfile/), [Snapfile](http://docs.fastlane.tools/actions/snapshot/#snapfile), [Deliverfile](http://docs.fastlane.tools/actions/deliver/#editing-the-deliverfile) com base nos requisitos de compilação do projeto.

1. Confirme as alterações para o repositório remoto.

## Etapa 5: criar variáveis de ambiente no Secrets Manager
<a name="sample-fastlane-github-secrets"></a>

Crie três segredos para armazenar o cookie da sessão do fastlane e a frase secreta correspondente. Consulte mais informações sobre como criar segredos no Secrets Manager em [Criar um segredo do AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

****

1. Acesse seu cookie de sessão do fastlane da seguinte forma.

   1. Chave secreta: `FASTLANE_SESSION`

   1. Valor do segredo: cookie de sessão gerado ao executar o comando a seguir na máquina local.
**nota**  
Esse valor fica disponível após a autenticação em um arquivo local: `~/.fastlane/spaceship/my_appleid_username/cookie`.

      ```
      fastlane spaceauth -u <Apple_account>
      ```

1. Frase secreta do Fastlane Match - Para permitir que o Fastlane Match decifre os certificados e perfis armazenados no repositório Git, é necessário adicionar a senha de criptografia que você configurou na etapa de configuração do Match às variáveis de ambiente do projeto. CodeBuild 

   1. Chave secreta: `MATCH_PASSWORD`

   1. Valor do segredo: `<match passphrase to decrypt certificates>`. A frase secreta é definida ao gerar os certificados na Etapa 3.

1. `MATCH_GIT_BASIC_AUTHORIZATION` do Fastlane: defina uma autorização básica para *match*:

   1. Chave secreta: 

      `MATCH_GIT_BASIC_AUTHORIZATION`

   1. Valor do segredo: o valor deve ser uma string codificada em base64 do seu nome de usuário e token de acesso pessoal (PAT) no formato `username:password`. Você pode gerá-lo usando o seguinte comando:

      ```
      echo -n your_github_username:your_personal_access_token | base64
      ```

      Você pode gerar seu PAT no GitHub console em **Seu perfil > Configurações > Configurações de desenvolvedores > Token de acesso pessoal**. Para obter mais informações, consulte o guia a seguir: [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing- your-personal-access-tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).

**nota**  
Ao criar os segredos acima no Secrets Manager, forneça o nome de um segredo com o seguinte prefixo: `/CodeBuild/`

## Etapa 6: criar uma frota de computação
<a name="sample-fastlane-github-fleet"></a>

Crie a frota de computação para o projeto.

****

1. No console, acesse CodeBuild e crie uma nova frota de computação.

1. Escolha `macOS` como sistema operacional e selecione um tipo de computação e uma imagem apropriados.

## Etapa 7: criar um projeto no CodeBuild
<a name="sample-fastlane-github-project"></a>

Crie seu projeto em CodeBuild.

****

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Crie um projeto de compilação. Para obter informações, consulte [Criar um projeto de compilação (console)](create-project.md#create-project-console) e [Executar uma compilação (console)](run-build-console.md).

1. Configure seu provedor de origem (como GitHub, CodeCommit). Esse é o repositório de origem do projeto do iOS e não o repositório de certificados.

1.  Em **Ambiente**: 
   + Escolha **Capacidade reservada**.
   + Em **Frota**, selecione a frota criada acima.
   + Forneça o nome da função de serviço que CodeBuild será criada para você.
   + Forneça as variáveis de ambiente abaixo.
     + Nome:`MATCH_PASSWORD`, Valor:*<secrets arn>*, Tipo: Secrets Manager (Secrets ARN criado na etapa 5 para MATCH\$1PASSWORD)
     + Nome:`FASTLANE_SESSION`, Valor:*<secrets arn>*, Tipo: Secrets Manager (Secrets ARN criado na etapa 5 para FASTLANE\$1SESSION)
     + Nome:`MATCH_GIT_BASIC_AUTHORIZATION`, Valor:*<secrets ARN>*, Tipo: Secrets Manager Secrets ARN (criado na etapa 5 para) `MATCH_GIT_BASIC_AUTHORIZATION`

1. Em **Buildspec**, adicione:

   ```
   version: 0.2
   
   phases:
     install:
       commands:
         - gem install bundler
         - bundle install
     build:
       commands:
         - echo "Building and signing the app..."
         - bundle exec fastlane build
     post_build:
       commands:
         - echo "Build completed on date"
   
   artifacts:
     files:
       - '*/.ipa'
     name: app-$(date +%Y-%m-%d)
   ```

## Etapa 8: executar a compilação
<a name="sample-fastlane-github-run"></a>

Execute o build. Você pode revisar o status da compilação e fazer login CodeBuild.

Depois que o trabalho for concluído, você poderá visualizar o log do trabalho.

## Solução de problemas
<a name="sample-fastlane-github-troubleshooting"></a>
+ Se você tiver problemas para acessar o GitHub repositório, verifique novamente seu token de acesso pessoal e a variável de ambiente MATCH\$1GIT\$1BASIC\$1AUTHORIZATION.
+ Se você encontrar problemas com a decodificação do certificado, defina a senha correta na variável de ambiente MATCH\$1PASSWORD.
+ Para problemas de assinatura de código, verifique se sua conta de desenvolvedor da Apple tem os certificados e perfis necessários e se o identificador do pacote no projeto do Xcode corresponde ao do perfil de aprovisionamento.

## Considerações sobre segurança
<a name="sample-fastlane-github-considerations"></a>

Veja as configurações sobre segurança deste tutorial.
+ Mantenha seu GitHub repositório de certificados privado e audite regularmente o acesso.
+ Considere usar AWS Secrets Manager para armazenar informações confidenciais, como MATCH\$1PASSWORD e FASTLANE\$1SESSION.

Este exemplo fornece uma configuração para a assinatura de código do iOS com o Fastlane e CodeBuild o uso GitHub para armazenamento de certificados. Talvez seja necessário ajustar algumas etapas com base nos requisitos e no CodeBuild ambiente específicos do projeto. Essa abordagem aproveita os AWS serviços para aumentar a segurança e a integração no AWS ecossistema.

# Defina os nomes dos artefatos no momento da compilação usando versionamento semântico
<a name="sample-buildspec-artifact-naming"></a>

 Este exemplo contém exemplos de arquivos buildspec que demonstram como especificar o nome de um artefato que é criado no momento da compilação. Um nome especificado em um arquivo buildspec pode incorporar comandos Shell e variáveis de ambiente para torná-lo exclusivo. Um nome especificado em um arquivo buildspec substitui um nome inserido no console quando você cria o projeto.

 Se você compilar várias vezes, o uso do nome de um artefato especificado no arquivo buildspec poderá garantir que os nomes dos arquivos de artefato de saída sejam exclusivos. Por exemplo, você pode usar uma data e um time stamp que é inserido no nome de um artefato no momento da compilação. 

Se você quiser substituir o nome do artefato que inseriu no console por um nome no arquivo buildspec, faça o seguinte:

1.  Defina o projeto de compilação para substituir o nome do artefato por um nome no arquivo buildspec. 
   +  Se você usar o console do para criar seu projeto de compilação, selecione **Enable semantic versioning (Habilitar versionamento semântico)**. Para obter mais informações, consulte [Criar um projeto de compilação (console)](create-project.md#create-project-console). 
   +  Se você usar a AWS CLI, defina o `overrideArtifactName` como true no arquivo em formato JSON transmitido para `create-project`. Para obter mais informações, consulte [Crie um projeto de compilação (AWS CLI)](create-project.md#create-project-cli). 
   +  Se você usar a API do AWS CodeBuild, defina o sinalizador `overrideArtifactName` no objeto `ProjectArtifacts` quando um projeto for criado ou atualizado ou quando uma compilação for iniciada. 

1.  Especifique um nome no arquivo buildspec. Use os seguintes exemplos de arquivos buildspec como um guia. 

 Este exemplo do Linux mostra como especificar um artefato que inclui a data em que a compilação foi criada: 

```
version: 0.2         
phases:
  build:
    commands:
      - rspec HelloWorld_spec.rb
artifacts:
  files:
    - '**/*'
  name: myname-$(date +%Y-%m-%d)
```

 Este exemplo do Linux mostra como especificar o nome de um artefato que usa uma variável de ambiente do CodeBuild. Para obter mais informações, consulte [Variáveis de ambiente em ambientes de compilação](build-env-ref-env-vars.md). 

```
version: 0.2         
phases:
  build:
    commands:
      - rspec HelloWorld_spec.rb
artifacts:
  files:
    - '**/*'
  name: myname-$AWS_REGION
```

 Este exemplo do Windows mostra como especificar um artefato que inclui a data e a hora em que a compilação foi criada: 

```
version: 0.2
env:
  variables:
    TEST_ENV_VARIABLE: myArtifactName
phases:
  build:
    commands:
      - cd samples/helloworld
      - dotnet restore
      - dotnet run
artifacts:
  files:
    - '**/*'
  name: $Env:TEST_ENV_VARIABLE-$(Get-Date -UFormat "%Y%m%d-%H%M%S")
```

 Este exemplo do Windows mostra como especificar o nome de um artefato que usa uma variável declarada no arquivo buildspec e uma variável de ambiente do CodeBuild. Para obter mais informações, consulte [Variáveis de ambiente em ambientes de compilação](build-env-ref-env-vars.md). 

```
version: 0.2
env:
  variables:
    TEST_ENV_VARIABLE: myArtifactName
phases:
  build:
    commands:
      - cd samples/helloworld
      - dotnet restore
      - dotnet run
artifacts:
  files:
    - '**/*'
  name: $Env:TEST_ENV_VARIABLE-$Env:AWS_REGION
```

 Para obter mais informações, consulte [Referência de especificação de construção para CodeBuild](build-spec-ref.md). 