Implemente o ImageLabeller com o Bitbucket
![Foto de rosto de Warren Marusiak](https://wac-cdn.atlassian.com/dam/jcr:7509aefb-43e8-401d-90fe-0850cbe6bb13/wmarusiak_headshot%20(1).png?cdnVersion=2022)
Warren Marusiak
Evangelista tecnológico sênior
Para demonstrar como desenvolver, implementar e gerenciar aplicativos usando o Jira Software e várias ferramentas conectadas, nossa equipe criou o ImageLabeller, um aplicativo de demonstração simples gerado na AWS que usa aprendizado de máquina para aplicar etiquetas às imagens.
Esta página aborda como implementar o ImageLabeller com o Bitbucket. Antes de começar, recomendamos a leitura das páginas da arquitetura do ImageLabeller e da configuração do AWS SageMaker para contextualizar.
Pré-requisitos
Se você ainda não tiver o SSH configurado para sua conta do Bitbucket, siga estas instruções.
Repositórios do GitHub voltados para o público com código ImageLabeller
Vídeo de demonstração do Bitbucket Pipelines
Crie um repositório para a infraestrutura do AWS S3
Um ciclo de desenvolvimento padrão, em geral, faz com que um desenvolvedor pegue uma tarefa do Jira, a mova para o trabalho em andamento e, em seguida, conclua o trabalho de desenvolvimento. O ID do item do Jira é a chave que vincula o trabalho de desenvolvimento ao item do Jira. É o principal componente de integração entre os dois sistemas.
A partir do Jira, crie um item novo para adicionar um repositório de infraestrutura do AWS S3 ao Bitbucket. Anote o ID do item. GI-5 neste exemplo.
![Captura de tela mostrando o item do Jira ao adicionar o repositório de infraestrutura do AWS S3 ao Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:30d6a8e7-de1e-4f4a-90da-86e20ca4034e/Create_a_new_issue.png?cdnVersion=2022)
Vá para o Bitbucket> Criar > Repositório.
![Como criar um repositório no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:91267990-ea45-4412-8c31-9abf326b0ff6/screenshot_system_tests_02.png?cdnVersion=2022)
Selecione o Espaço de trabalho e o Projeto apropriados. Defina o nome da ramificação padrão como linha principal. Clique em Criar repositório para continuar.
![Janela pop-up para criar um novo repositório no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:aafd17ff-5cf6-4f67-9c24-4270d15b3e64/Select_Workspace_in_Project.png?cdnVersion=2022)
Em seu terminal, acesse seu repositório s3_infra e execute o seguinte para enviar seu arquivo template.yml do AWS CloudFormation para o Bitbucket.
git add --all
git commit -m "IM-5 add s3_infra repository to Bitbucket"
git remote add origin git@bitbucket.org:pmmquickstartguides01/s3_infra.git
git branch -m mainline
git push -u origin mainline
Ativar Bitbucket Pipelines
Vá para Configurações do repositório > Configurações > Habilitar pipelines.
![Como habilitar pipelines no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:7e44812e-4b95-4dd2-b312-d1e43dfec625/Enable_pipelines_in_Bitbucket.png?cdnVersion=2022)
Adicionar variáveis de repositório de chaves de acesso da AWS
Acesse Variáveis do repositório, insira sua ID de chave de acesso da AWS e clique em Adicionar. Em seguida, insira sua chave de acesso secreta da AWS e clique em Adicionar.
![Variáveis de repositório no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:82848609-b1f9-4564-ae17-1a94e42f3fdc/Enter_your_AWS_key_ID.png?cdnVersion=2022)
Configurar ambientes de implementação
Clique em Implementações.
![Tela de configurações de implementações no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:4979e02b-faae-4bbe-ade8-c31ab256709b/Deployments.png?cdnVersion=2022)
Clique em adicionar ambiente para adicionar novos ambientes. Há um ambiente de teste no US-WEST-1, um ambiente de staging no US-EAST-2 e três ambientes de produção no US-WEST-2, US-EAST-1 e CA-CENTRAL-1 neste exemplo.
![Como adicionar ambientes de implementação no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:bb2b3924-e65e-4c84-95c8-3dac9b620388/deployment-environments.png?cdnVersion=2022)
bitbucket-pipelines.yml para implementação na AWS
Acesse seu repositório s3_infra no terminal e crie uma ramificação com o nome do ID de item do Jira.
git checkout -b IM-5
Crie um arquivo bitbucket-pipelines.yml com o seguinte yaml. Isso define um fluxo de trabalho de implementação para seus ambientes de teste, staging e produção.
definitions:
steps:
- step: &deploy-test-usw1
name: Deploy Test us-west-1
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-1'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
- step: &deploy-staging-use2
name: Deploy Staging us-east-2
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-2'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
- step: &deploy-production-usw2
name: Deploy Production us-west-2
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-2'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
- step: &deploy-production-use1
name: Deploy Production us-east-1
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-1'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
- step: &deploy-production-cac1
name: Deploy Production ca-central-1
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'ca-central-1'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
pipelines:
default:
- step:
<<: *deploy-test-usw1
deployment: Test us-west-1
- step:
<<: *deploy-staging-use2
deployment: Staging us-east-2
branches:
mainline:
- step:
<<: *deploy-production-usw2
deployment: Production us-west-2
- step:
<<: *deploy-production-use1
deployment: Production us-east-1
- step:
<<: *deploy-production-cac1
deployment: Production ca-central-1
Como entender um arquivo bitbucket-pipelines.yml
Definições e etapas
Defina um conjunto de etapas na seção de definições. Cada etapa tem um alias que é referenciado em todo o arquivo bitbucket-pipelines.yml, um nome que aparece na tela de implementação do Bitbucket e um script. Um script é uma coleção de um ou mais comandos.
definitions:
steps:
- step: &deploy-test-usw1
name: Deploy Test us-west-1
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-1'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
Pipes
Essa etapa usa o pipe atlassian/aws-cloudformation-deploy
para implementar os buckets do AWS S3 definidos no arquivo s3_infra template.yml.
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
O conjunto de pipes disponíveis é encontrado aqui. A documentação do pipe atlassian/aws-cloudformation-deploy
pode ser encontrada aqui.
Pipelines
Pipelines executam um conjunto de etapas. O pipeline padrão é o conjunto de etapas executado para ramificações que não são explicitamente nomeadas em pipelines. Esse pipeline padrão executa etapas que são implementadas em ambientes de teste e staging.
pipelines:
default:
- step:
<<: *deploy-test-usw1
deployment: Test us-west-1
- step:
<<: *deploy-staging-use2
deployment: Staging us-east-2
As implementações permitem a integração entre o Jira e o Bitbucket.
deployment: Test us-west-1
Você pode definir um conjunto de etapas executadas para uma ramificação específica e nomeada em ramificações. O trecho abaixo define um conjunto de etapas para a ramificação da linha principal.
branches:
mainline:
- step:
<<: *deploy-production-usw2
deployment: Production us-west-2
- step:
<<: *deploy-production-use1
deployment: Production us-east-1
- step:
<<: *deploy-production-cac1
deployment: Production ca-central-1
Leia este artigo de referência para obter mais informações sobre esse tópico.
Enviando para uma ramificação de recursos
Execute o seguinte na linha de comando para enviar suas alterações para a ramificação GI-5 do seu repositório s3_infra. Inclua o ID do item do Jira nas mensagens de commit e nos nomes das ramificações para permitir a integração com o Jira Bitbucket e acompanhar o que está acontecendo em seu projeto.
git add --all
git commit -m "IM-5 add bitbucket-pipelines.yml"
git push -u origin IM-5
Clique em Pipelines e depois em GI-5 para ver o pipeline em execução.
![Como executar pipeline no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:064b8f87-4b16-48d3-87c2-94297c1f95a2/see_the_running_pipeline.png?cdnVersion=2022)
Clique no próprio pipeline para ver as informações da execução. O pipeline executou etapas de implementação toscreenshot_s em um ambiente de teste em us-west-1 e em um ambiente de staging em us-east-2.
![Informações da execução do pipeline no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:bc21437b-f290-4cc3-99cb-d4a30917f224/see_details_of_the_execution.png?cdnVersion=2022)
Criar uma solicitação pull
Para criar uma solicitação pull, clique em Solicitações pull e depois em Criar solicitação pull.
![Como criar uma solicitação pull no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:aa51bc6a-ee8a-487b-9157-f8b37c835bf7/create_pull_request.png?cdnVersion=2022)
Escolha sua ramificação de recurso como ramificação de origem, marque a caixa de seleção Fechar ramificação e clique em Criar solicitação pull.
![Como criar um modal de solicitação pull no Bitbucket.](https://wac-cdn.atlassian.com/dam/jcr:50ed6bf5-be76-4993-99fa-141c090ed6fb/create_pull_request_modal.png?cdnVersion=2022)
Analise as alterações no código e, em seguida, Aprove e Mescle a solicitação pull.
![Aprovar e mesclar a solicitação pull no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:a242b7ee-ac5f-4592-b62d-6316057f1f70/approve_and_merge_request.png?cdnVersion=2022)
Clicar em Mesclar abre a tela de mesclagem da solicitação pull. Marque a caixa de seleção Item de transição e clique em Mesclar.
![Marque a caixa de seleção "item de transição" ao mesclar solicitação pull no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:4c9a3536-8aa5-403b-8b94-6f908fd7eeb5/transition_issue_check_box.png?cdnVersion=2022)
Clique em Pipelines para monitorar o pipeline da linha principal.
![Como monitorar o pipeline principal no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:fad23065-cc32-4bd9-822a-079d7519b67f/monitor_the_main_pipeline.png?cdnVersion=2022)
A ramificação do GI-5 desapareceu. A ramificação da linha principal está à esquerda e um pipeline está em execução. Clique no pipeline.
![Tela do pipeline de ramificações da linha principal no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:2956bbb0-68fd-413d-8dd7-cf0a82005922/pipeline_is_running.png?cdnVersion=2022)
O pipeline executou etapas de implementação em ambientes de produção em us-west-2, us-east-1 e ca-central-1. É possível executar novamente um pipeline clicando no botão Executar novamente se um pipeline falhar.
Fazer rollback de uma implementação incorreta
Para fazer rollback de uma implementação, clique em Implementações.
![Tela de implementações no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:11bfda11-c540-4281-9b4c-ff4ee8374e09/deployments(2).png?cdnVersion=2022)
Clique no ambiente em que você quer fazer rollback para obter uma lista de implementações históricas, escolher a versão do rollback e clique em Reimplementar.
![Como selecionar um ambiente e, em seguida, a versão em que você quer fazer rollback no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:655283bd-0a91-4526-9164-c50ca21661e9/choose_the_version_you_want_to_deploy.png?cdnVersion=2022)
Verifique se a alteração está correta e clique em Reimplementar.
![Verifique se suas alterações estão corretas antes de selecionar "reimplementar" no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:91ac3fd0-9058-4336-a812-a67586a4d75c/verify_the_change_is_correct.png?cdnVersion=2022)
Somente o ambiente escolhido é reimplementado.
![Modal de pipeline no Bitbucket mostrando apenas o ambiente escolhido sendo reimplementado](https://wac-cdn.atlassian.com/dam/jcr:85290b0c-83f4-42ce-8c50-d792cd951223/the_chosen_environment_is_redeployed_.png?cdnVersion=2022)
Crie um repositório para o SubmitImage AWS Lambda
Acesse o Jira e crie um item do Jira para adicionar um repositório SubmitImage ao Bitbucket. Anote o ID do item do Jira. Neste exemplo, é GI-6.
![Como criar um item no Jira Software para adicionar um repositório SubmitImage ao Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:249ff2e7-281a-4d01-96d8-c66a60173354/create_a_jira_issue.png?cdnVersion=2022)
Vá para o Bitbucket e clique em Criar e depois em Repositório.
![Como criar um repositório no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:1b48a560-9d12-4b15-b963-0c6a4282a628/create_repository.png?cdnVersion=2022)
Selecione a Área de trabalho e o Projeto apropriados. Defina o Nome da ramificação padrão como linha principal. Clique em Criar repositório para continuar.
![Modal em pop-up ao criar um novo repositório no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:5d75d479-8626-4406-a68d-94b2d8fced24/select_the_workspace_and_project.png?cdnVersion=2022)
No seu terminal, acesse seu repositório SubmitImage e execute o seguinte para enviar seu código AWS Lambda para o Bitbucket. Inclua o ID do item do Jira nas mensagens de commit e nos nomes das ramificações para permitir a integração com o Jira Bitbucket e acompanhar o que está acontecendo em seu projeto.
git add --all
git commit -m "IM-6 add SubmitImage to Bitbucket"
git remote add origin git@bitbucket.org:pmmquickstartguides01/submitimage.git
git branch -m mainline
git push -u origin mainline
Habilitar pipelines
Vá para Configurações do repositório, clique em Configurações e, em seguida, Habilitar pipelines.
![Habilite pipelines nas configurações de Pipelines no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:aee8ea24-7d09-4e8f-9174-04290199157b/enable_pipelines.png?cdnVersion=2022)
Adicionar variáveis de repositório
Clique em Variáveis do repositório para adicionar sua ID de chave de acesso da AWS, chave de acesso secreta da AWS e ID da conta da AWS. Dê ao usuário do IAM associado à chave de acesso da AWS AdministratorAccess. Você pode optar por usar um controle de acesso mais refinado escolhendo políticas de acesso individuais da AWS.
![Habilite pipelines nas configurações de Pipelines no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:32dd3507-1291-4800-9124-03cfd62b3bec/repository_variables.png?cdnVersion=2022)
Adicionar ambientes de implementação
Clique em Implementações e, em seguida, adicionar ambiente para adicionar novos ambientes. Há um ambiente de teste no us-west-1, um ambiente de staging no us-east-2 e três ambientes de produção no us-west-2, us-east-1 e ca-central-1 neste exemplo.
![Ambientes de implementação no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:bb2b3924-e65e-4c84-95c8-3dac9b620388/deployment-environments.png?cdnVersion=2022)
Criar chaves SSH
Acesse seu repositório SubmitImage no Bitbucket e clique em Configurações do repositório, depois em Chaves SSH e depois em Gerar chaves.
![Gerar chaves SSH no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:b7f0f877-fa93-4ca1-9751-4cb58188c540/create_SSH_keys.png?cdnVersion=2022)
Você vai precisar dessa chave SSH ao criar o repositório SystemTests.
![Informações da chave SSH no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:d3cfc01c-b8a5-4afc-bcb1-a844b9334c97/SSH_key_details.png?cdnVersion=2022)
bitbucket-pipelines.yml para implementação na AWS
Acesse seu repositório SubmitImage no terminal e crie uma ramificação com o nome do ID de item do Jira.
git checkout -b IM-6
Crie um arquivo bitbucket-pipelines.yml com o seguinte yaml. Isso define um pipeline do Bitbucket para seus ambientes de teste, staging e produção. Você deve atualizar a linha de clone do git para que SystemTests seja seu repositório SystemTests.
definitions:
steps:
-step: &rununittests
name: run unit tests
image: golang:buster
script:
- cd submitImage
- go test ./opendevopslambda/...
-step: &deploy-test-usw1
name: Deploy Test us-west-1
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- ls -lah /opt/atlassian/pipelines/agent/build/build/
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-1'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-west-1-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-west-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
-step: &integration-test-usw1
name: Integration test usw1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-1
-step: &deploy-staging-use2
name: Deploy Staging us-east-2
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- ls -lah /opt/atlassian/pipelines/agent/build/build/
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-2'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-east-2-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-east-2-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
-step: &integration-test-use2
name: Integration test use2
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-east-2
-step: &deploy-production-usw2
name: Deploy Production us-west-2
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- ls -lah /opt/atlassian/pipelines/agent/build/build/
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-2'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-west-2-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-west-2-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
-step: &integration-test-usw2
name: Integration test usw2
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-2
-step: &deploy-production-use1
name: Deploy Production us-east-1
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- ls -lah /opt/atlassian/pipelines/agent/build/build/
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-1'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-east-1-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-east-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
-step: &integration-test-use1
name: Integration test use1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-east-1
-step: &deploy-production-cac1
name: Deploy Production ca-central-1
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- ls -lah /opt/atlassian/pipelines/agent/build/build/
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'ca-central-1'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-ca-central-1-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-ca-central-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
-step: &integration-test-cac1
name: Integration test cac1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=ca-central-1
pipelines:
default:
- step: *rununittests
- step:
<<: *deploy-test-usw1
deployment: Test us-west-1
# - step: *integration-test-usw1
- step:
<<: *deploy-staging-use2
deployment: Staging us-east-2
# - step: *integration-test-use2
branches:
mainline:
- step:
<<: *deploy-production-usw2
deployment: Production us-west-2
# - step: *integration-test-usw2
- step:
<<: *deploy-production-use1
deployment: Production us-east-1
# - step: *integration-test-use1
- step:
<<: *deploy-production-cac1
deployment: Production ca-central-1
# - step: *integration-test-cac1
A execução dos testes de integração está comentada por enquanto. Os testes do sistema só vão ser aprovados quando todo o aplicativo for implementado. Remova os comentários das etapas do teste de integração em seu repositório e faça outra tentativa para executar o Pipeline de implementação depois que todos os componentes do ImageLabeller forem implementados. Você deve atualizar a linha de clone do git para que SystemTests seja seu repositório SystemTests.
Como entender um arquivo bitbucket-pipelines.yml
Essa etapa executa testes de unidade a partir da base de código SubmitImage.
-step: &rununittests
name: run unit tests
image: golang:buster
script:
- cd submitImage
- go test ./opendevopslambda/...
Essa tarefa usa o AWS SAM para implementar seu SubmitImage AWS Lambda no us-west-2. A documentação desse pipe pode ser encontrada aqui.
-step: &deploy-usw2-prod
name: deploy us-west-2 prod
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-2'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-west-2-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-west-2-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
Essa tarefa clona o repositório SystemTests e executa testes de integração no us-west-2. Você deve atualizar a linha de clone do git para que SystemTests seja seu repositório SystemTests.
-step: &integration-test-usw2
name: Integration test usw2
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-2
Enviando para uma ramificação de recursos
Na linha de comando, execute o seguinte para enviar seu código para a ramificação GI-8 do seu repositório SubmitImage.
git add --all
git commit -m "IM-6 add bitbucket-pipelines.yml to SubmitImage"
git push -u origin IM-6
Clique em Pipelines e depois em GI-6 para ver o pipeline em execução.
![Captura de tela dos pipelines do Bitbucket Cloud](https://wac-cdn.atlassian.com/dam/jcr:698f5681-788b-4fd3-a751-382139f54b58/screenshot_bbcpipelines.png?cdnVersion=2022)
Criar uma solicitação pull
Para criar uma solicitação pull, clique em Solicitações pull e depois em Criar solicitação pull. Conclua o solicitação pull e clique em Pipelines para ver a implementação da produção.
![Pipeline de implementação de produção no Bitbucket Cloud](https://wac-cdn.atlassian.com/dam/jcr:36623e30-a1e3-4d9f-9fde-6a1cabbabfb1/screenshot_bbcproductiondeployment.png?cdnVersion=2022)
Crie um repositório para InvokeLabeller AWS Lambda
Acesse o Jira e crie um item do Jira para adicionar um repositório InvokeLabeller ao Bitbucket. Anote o ID do item do Jira. Neste exemplo, é GI-10.
![Captura de tela exibindo itens do Jira em um quadro do Jira](https://wac-cdn.atlassian.com/dam/jcr:5a3b19fc-1800-4e51-af5e-35fdb7bf8e03/screenshot_jiraissueinvokelabellerAWSlambda.png?cdnVersion=2022)
Vá para o Bitbucket e clique em Criar e depois em Repositório. Selecione a Área de trabalho e o Projeto apropriados. Defina o Nome da ramificação padrão como linha principal. Clique em Criar repositório para continuar.
![Crie um repositório invokelabeller no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:5927d27b-ce4f-4707-ae09-2ee3cba82433/screenshot_bbc_createrepoinvokelabeller.png?cdnVersion=2022)
No seu terminal, acesse seu repositório InvokeLabeller e execute o seguinte para enviar seu código AWS Lambda para o Bitbucket. Inclua o ID do item do Jira nas mensagens de commit e nos nomes das ramificações para permitir a integração com o Jira Bitbucket e acompanhar o que está acontecendo em seu projeto.
git add --all
git commit -m "IM-10 add InvokeLabeller to Bitbucket"
git remote add origin git@bitbucket.org:pmmquickstartguides01/invokelabeller.git
git branch -m mainline
git push -u origin mainline
Habilitar pipelines
Vá para Configurações do repositório, clique em Configurações e, em seguida, Habilitar pipelines.
![Habilite pipelines nas configurações no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:aee8ea24-7d09-4e8f-9174-04290199157b/enable_pipelines.png?cdnVersion=2022)
Adicionar variáveis de repositório
Clique em Variáveis do repositório para adicionar sua ID de chave de acesso da AWS, chave de acesso secreta da AWS e ID da conta da AWS. Dê ao usuário do IAM associado à chave de acesso da AWS AdministratorAccess. Você pode optar por usar um controle de acesso mais refinado escolhendo políticas de acesso individuais da AWS, mas as informações são deixadas para o leitor.
![Adicione variáveis de repositório no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:32dd3507-1291-4800-9124-03cfd62b3bec/repository_variables.png?cdnVersion=2022)
Adicionar ambientes de implementação
Clique em Implementações e, em seguida, adicionar ambiente para adicionar novos ambientes. Há um ambiente de teste no us-west-1, um ambiente de staging no us-east-2 e três ambientes de produção no us-west-2, us-east-1 e ca-central-1 neste exemplo.
![Ambientes de implementação no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:bb2b3924-e65e-4c84-95c8-3dac9b620388/deployment-environments.png?cdnVersion=2022)
Criar chaves SSH
Acesse seu repositório SubmitImage no Bitbucket e clique em Configurações do repositório, depois em Chaves SSH e depois em Gerar chaves.
![Informações da chave SSH no Bitbucket Cloud](https://wac-cdn.atlassian.com/dam/jcr:d3cfc01c-b8a5-4afc-bcb1-a844b9334c97/SSH_key_details.png?cdnVersion=2022)
bitbucket-pipelines.yml para implementação na AWS
Acesse seu repositório InvokeLabeller no terminal e crie uma ramificação com o nome do ID de item do Jira.
git checkout -b IM-10
Crie um arquivo bitbucket-pipelines.yml com o seguinte yaml. Isso define um pipeline do Bitbucket para seus ambientes de teste, staging e produção. Você deve atualizar a linha de clone do git para que SystemTests seja seu repositório SystemTests.
definitions:
steps:
-step: &rununittests
name: run unit tests
image: python:rc-buster
script:
- pip3 install pytest
- pip3 install moto
- pip3 install -r tst/requirements.txt --user
- python3 -m pytest -v tst/unit --junitxml=test-reports/report.xml
-step: &deploy-usw1-test
name: deploy us-west-1 test
image: amazon/aws-sam-cli-build-image-python3.8
script:
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-1'
STACK_NAME: 'OpenDevOpsImageLabeller'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-west-1-${AWS_ACCOUNT_ID}/image-labeller-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-west-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'template.yml'
-step: &integration-test-usw1
name: integration test usw1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-1
-step: &deploy-use2-staging
name: deploy us-east-2 staging
image: amazon/aws-sam-cli-build-image-python3.8
script:
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-2'
STACK_NAME: 'OpenDevOpsImageLabeller'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-east-2-${AWS_ACCOUNT_ID}/image-labeller-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-east-2-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'template.yml'
-step: &integration-test-use2
name: integration test use2
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-east-2
-step: &deploy-usw2-prod
name: deploy us-west-2 prod
image: amazon/aws-sam-cli-build-image-python3.8
script:
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-2'
STACK_NAME: 'OpenDevOpsImageLabeller'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-west-2-${AWS_ACCOUNT_ID}/image-labeller-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-west-2-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'template.yml'
-step: &integration-test-usw2
name: integration test usw2
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-2
-step: &deploy-use1-prod
name: deploy us-east-1 prod
image: amazon/aws-sam-cli-build-image-python3.8
script:
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-1'
STACK_NAME: 'OpenDevOpsImageLabeller'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-east-1-${AWS_ACCOUNT_ID}/image-labeller-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-east-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'template.yml'
-step: &integration-test-use1
name: integration test use1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-east-1
-step: &deploy-cac1-prod
name: deply ca-central-1 prod
image: amazon/aws-sam-cli-build-image-python3.8
script:
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'ca-central-1'
STACK_NAME: 'OpenDevOpsImageLabeller'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-ca-central-1-${AWS_ACCOUNT_ID}/image-labeller-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-ca-central-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'template.yml'
-step: &integration-test-cac1
name: integration test cac1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=ca-central-1
pipelines:
default:
- step: *rununittests
- step:
<<: *deploy-usw1-test
deployment: us-west-1 Test
# - step: *integration-test-usw1
- step:
<<: *deploy-use2-staging
deployment: us-east-2 Staging
# - step: *integration-test-use2
branches:
mainline:
- step:
<<: *deploy-usw2-prod
deployment: us-west-2 Prod
# - step: *integration-test-usw2
- step:
<<: *deploy-use1-prod
deployment: us-east-1 Prod
# - step: *integration-test-use1
- step:
<<: *deploy-cac1-prod
deployment: ca-central-1 Prod
# - step: *integration-test-cac1
A execução dos testes de integração está comentada por enquanto. Os testes do sistema só vão ser aprovados quando todo o aplicativo for implementado. Remova os comentários das etapas do teste de integração em seu repositório e faça outra tentativa para executar o Pipeline de implementação depois que todos os componentes do ImageLabeller forem implementados. Você deve atualizar a linha de clone do git para que SystemTests seja seu repositório SystemTests.
Como entender um arquivo bitbucket-pipelines.yml
Essa etapa executa testes de unidade a partir da base de código InvokeLabeller.
-step: &rununittests
name: run unit tests
image: golang:buster
script:
- cd submitImage
- go test ./opendevopslambda/...
Atualize o src/app.py com o endpoint do AWS SageMaker
Abra o arquivo src/app.py do InvokeLabeller e procure por query_endpoint. Altere o endpoint_name e o region_name do cliente para que correspondam ao seu notebook AWS SageMaker.
def query_endpoint(img):
endpoint_name = 'jumpstart-dft-image-labeller-endpoint'
client = boto3.client(service_name='runtime.sagemaker', region_name='us-west-1')
response = client.invoke_endpoint(EndpointName=endpoint_name, ContentType='application/x-image', Body=img)
model_predictions = json.loads(response['Body'].read())['predictions'][0]
return model_predictions
Enviando para uma ramificação de recursos
Na linha de comando, execute o seguinte para enviar suas alterações para a ramificação GI-10 do seu repositório InvokeLabeller.
git add --all
git commit -m "IM-10 add bitbucket-pipelines.yml to InvokeLabeller"
git push -u origin IM-10
Clique em Pipelines e depois em GI-10 para ver o pipeline em execução.
![Veja pipelines em execução no Bitbucket Cloud](https://wac-cdn.atlassian.com/dam/jcr:1d0cdbca-3e3e-4a8e-b192-94c5b4c1352b/screenshot_bbc_seerunningpipelines.png?cdnVersion=2022)
Criar uma solicitação pull
Para criar uma solicitação pull, clique em Solicitações pull e depois em Criar solicitação pull. Conclua o solicitação pull e clique em Pipelines para ver a implementação da produção.
![Como visualizar a implementação da produção no Bitbucket Pipelines](https://wac-cdn.atlassian.com/dam/jcr:56a3b0b5-3d6e-49f5-8c90-152e9716a523/screenshot_bbc_productiondeploymentinvokelabeller.png?cdnVersion=2022)
Crie um repositório para testes do sistema
Acesse o Jira e crie um item do Jira para adicionar um repositório SystemTests ao Bitbucket. Anote o ID do item. GI-7 neste exemplo.
![Como visualizar um item recém-criado do Jira no quadro do Jira](https://wac-cdn.atlassian.com/dam/jcr:97254cac-7c9c-4d91-a62d-cafde7fe9096/screenshot_system_tests_01.png?cdnVersion=2022)
Vá para o Bitbucket e clique em Criar e depois em Repositório.
![Como criar um repositório no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:99f52cd9-487e-4044-bdc1-c844161a4104/Create_repository_in_Bitbucket.png?cdnVersion=2022)
Selecione a Área de trabalho e o Projeto apropriados. Defina o Nome da ramificação padrão como linha principal. Clique em Criar repositório para continuar.
![Como inserir informações ao criar um novo repositório no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:46e691ae-a1f1-4b8d-bb48-ab94ea59ace0/screenshot_system_tests_03.png?cdnVersion=2022)
No seu terminal, acesse seu repositório SystemTests e execute o seguinte para enviar seu código para o Bitbucket.
git add --all
git commit -m "IM-7 add SystemTests repository to Bitbucket"
git remote add origin git@bitbucket.org:pmmquickstartguides01/systemtests.git
git branch -M mainline
git push -u origin mainline
O repositório systemTests não precisa de um arquivo bitbucket-pipelines.yml. Ele não tem um pipeline próprio, pois oferece testes para a execução de outros pipelines. Anote o URL remoto do seu SystemTests. Os pipelines de IC/CD SubmitImage, GetImageLabel e InvokeLabeller vão clonar o repositório SystemTests durante as etapas de teste. Você vai precisar atualizar o bitbucket-pipelines.yml de repositórios posteriores com o URL correto.
Adicione chaves SSH de SubmitImage, GetImageLabel e InvokeLabeller
Clique em Configurações do repositório e, em seguida, em Chaves de acesso.
![Acesse a página de configurações de chaves no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:6d18f61a-7471-4230-b52a-0925a93e04b3/screenshot_system_tests_04.png?cdnVersion=2022)
Clique em Adicionar chave, cole a chave SSH copiada de SubmitImage, GetImageLabel ou InvokeLabeller e clique em Adicionar chave SSH.
![Como adicionar uma chave SSH no Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:740afece-ec20-49ac-845d-3e1e28cbc20d/screenshot_system_tests_05.png?cdnVersion=2022)
Se você chegou até aqui, parabéns! Você acabou de implementar o ImageLabeller. A próxima etapa é configurar o monitoramento do ImageLabeller com o Opsgenie.
Compartilhe este artigo
Próximo tópico
Leitura recomendada
Marque esses recursos para aprender sobre os tipos de equipes de DevOps ou para obter atualizações contínuas sobre DevOps na Atlassian.
![Ilustração do DevOps](https://wac-cdn.atlassian.com/dam/jcr:bd9d8b2c-ca36-444f-8595-719cb1990e64/Devops-community.png?cdnVersion=2022)
Comunidade de DevOps
![Ilustração do DevOps](https://wac-cdn.atlassian.com/dam/jcr:297108ea-d232-4368-af51-b53af230c4fe/Simulation-workshop.png?cdnVersion=2022)
Caminho de aprendizagem de DevOps
![Ilustração do mapa](https://wac-cdn.atlassian.com/dam/jcr:25f6330a-4191-408f-a4e5-2e24bfba67b4/Maturity-model.png?cdnVersion=2022)