Bitbucket: automação da revisão de código com a IA generativa

Bitbucket:
automação de análise de código com a IA generativa

Sobre este codelab

subjectÚltimo mar. 24, 2025 atualizado
account_circleEscrito por Andrey Shakirov

1. Visão geral

Neste laboratório, você vai configurar o pipeline do Bitbucket e integrá-lo ao Gemini para automatizar as etapas de revisão de código.

92eff32c1969388f.png

O que você vai aprender

Você vai aprender a:

  • Como adicionar etapas de automação de revisão de código da GenAI no Bitbucket
  • Como executar a CLI devai localmente para automatizar as revisões de código

Pré-requisitos

  • Para fazer este laboratório, é preciso saber usar o console do Cloud e os ambientes do Cloud Shell.

2. Configuração e requisitos

Configuração do projeto do Cloud

  1. Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. É uma string de caracteres não usada pelas APIs do Google e pode ser atualizada quando você quiser.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Cloud gera automaticamente uma string exclusiva. Em geral, não importa o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, normalmente identificado como PROJECT_ID. Se você não gostar do ID gerado, crie outro aleatório. Se preferir, teste o seu e confira se ele está disponível. Ele não pode ser mudado após essa etapa e permanece durante o projeto.
  • Para sua informação, há um terceiro valor, um Número do projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, ative o faturamento no console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não vai ser muito cara, se tiver algum custo. Para encerrar os recursos e evitar cobranças além deste tutorial, exclua os recursos criados ou exclua o projeto. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

Configuração do ambiente

Abra o chat do Gemini.

bc3c899ac8bcf488.png

Ou digite "Peça ao Gemini" na barra de pesquisa.

e1e9ad314691368a.png

Ative a API Gemini para Google Cloud:

990a0ceea7d05531.png

Clique em Start chatting e siga uma das perguntas de exemplo ou digite seu próprio comando para testar.

ed120d672468b412.png

Sugestões de comandos:

  • Explicar o Cloud Run em cinco pontos principais.
  • Você é gerente de produto do Google Cloud Run e explica o Cloud Run para um estudante em cinco pontos-chave.
  • Você é gerente de produto do Google Cloud Run e explica o Cloud Run para um desenvolvedor certificado do Kubernetes em cinco pontos principais.
  • Você é gerente de produto do Google Cloud Run e explica a um desenvolvedor sênior em cinco pontos principais quando usar o Cloud Run em vez do GKE.

Confira o guia de comandos para saber como escrever comandos melhores.

Como o Gemini para o Google Cloud usa seus dados

Compromisso do Google com a privacidade

O Google foi um dos primeiros no setor a publicar um compromisso de privacidade de IA/ML, que descreve que os clientes precisam ter o mais alto nível de segurança e controle sobre os dados armazenados na nuvem.

Dados que você envia e recebe

As perguntas que você faz ao Gemini, incluindo qualquer informação de entrada ou código que você envia para análise ou conclusão, são chamadas de comandos. As respostas ou as finalizações de código que você recebe do Gemini são chamadas de respostas. O Gemini não usa seus comandos nem as respostas deles como dados para treinar os modelos.

Criptografia de instruções

Quando você envia comandos para o Gemini, os dados são criptografados em trânsito como entrada para o modelo subjacente no Gemini.

Dados do programa gerados pelo Gemini

O Gemini é treinado com base no código próprio do Google Cloud e em códigos de terceiros selecionados. Você é responsável pela segurança, testes e eficácia do seu código, incluindo qualquer preenchimento, geração ou análise de código que o Gemini oferece.

Saiba mais sobre como o Google processa suas solicitações.

3. Opções para testar solicitações

Se você quiser mudar/ampliar os comandos de cli devai, há várias opções para isso.

O Vertex AI Studio faz parte da plataforma Vertex AI do Google Cloud, projetada especificamente para simplificar e acelerar o desenvolvimento e o uso de modelos de IA generativa.

O Google AI Studio é uma ferramenta baseada na Web para prototipagem e experimentação com engenharia de comando e a API Gemini.

O web app Gemini (gemini.google.com) é uma ferramenta baseada na Web projetada para ajudar você a explorar e usar o poder dos modelos de IA do Gemini do Google.

  • App Google Gemini para dispositivos móveis no Android e iOS

4. Criar a conta de serviço

Ative o Cloud Shell clicando no ícone à direita da barra de pesquisa.

3e0c761ca41f315e.png

No terminal aberto, ative os serviços necessários para usar as APIs da Vertex AI e o chat Gemini.

gcloud services enable \
    aiplatform
.googleapis.com \
    cloudaicompanion
.googleapis.com \
    cloudresourcemanager
.googleapis.com \
    secretmanager
.googleapis.com

Se for necessário autorizar, clique em "Autorizar" para continuar.

6356559df3eccdda.png

Execute os comandos a seguir para criar uma nova conta de serviço e chaves.

Você vai usar essa conta de serviço para fazer chamadas de API para a API Gemini da Vertex AI de pipelines CICD.

PROJECT_ID=$(gcloud config get-value project)
SERVICE_ACCOUNT_NAME
='vertex-client'
DISPLAY_NAME
='Vertex Client'
KEY_FILE_NAME
='vertex-client-key'

gcloud iam service
-accounts create $SERVICE_ACCOUNT_NAME --display-name "$DISPLAY_NAME"

Conceder papéis.

gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/aiplatform.admin" --condition None

gcloud projects add
-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" --condition None

gcloud iam service
-accounts keys create $KEY_FILE_NAME.json --iam-account=$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com

5. Importar repositório do GitHub para o repositório do Bitbucket

Faça login em https://bitbucket.org/ e selecione a opção "Create" / Repository / Import repository".

bf74d0d8c903fd71.png

URL do repositório Git:

https://github.com/GoogleCloudPlatform/genai-for-developers.git

Selecione seu espaço de trabalho e projeto e informe um nome para o novo repositório.

891c8ac58cc71419.png

Clique em "Import repository" para iniciar o processo de importação.

6. Adicionar variáveis de pipeline do Bitbucket

Em seguida, você vai ativar o pipeline CICD do Bitbucket para executar a análise de código quando as mudanças forem enviadas para o repositório.

Abra o repositório do Bitbucket no navegador e navegue até a seção "Repository settings / PIPELINES / Settings"". Ative os pipelines para este repositório.

8b431c2a83222546.png

Navegue até a seção "Repository settings / PIPELINES / Repository variables"".

Adicione três variáveis:

  • PROJECT_ID: o ID do projeto do Qwiklabs
  • LOCATION: us-central1
  • GOOGLE_CLOUD_CREDENTIALS

Para o valor da variável GOOGLE_CLOUD_CREDENTIALS, use a chave da conta de serviço criada na seção acima. Execute este comando no Google Cloud Shell e copie e cole o valor.

cat ~/vertex-client-key.json

Visualização de variáveis do repositório:

fe2b8e768c09dc5b.png

7. Executar o pipeline do Bitbucket

Abra a seção "Pipelines" e clique em "Run initial pipeline".

f97424bbfc790da8.png

Selecione a ramificação "main" e o pipeline "default" e clique em "Run".

8e7604e2f513360e.png

8. Analisar a saída do pipeline do Bitbucket

Abra/atualize a seção "Pipelines" e analise a saída do pipeline.

abf4fbdec6781ffd.png

335acbee3cba263f.png

Resultados do comando de cobertura de teste:

devai review testcoverage -c ./sample-app/src

Esse comando devai review testcoverage analisa o código e o conjunto de testes associado, se disponível, usando um modelo de IA generativa, o Gemini. Ele avalia a cobertura de teste do código fornecido, identificando arquivos e métodos com e sem testes de unidade. Em seguida, o comando usa o modelo para fornecer um resumo da cobertura, incluindo métricas como linhas e ramificações/condições cobertas. Com base na análise, ele faz recomendações para melhorar a cobertura de testes, sugerindo testes específicos para adicionar e oferecendo conselhos gerais sobre as práticas recomendadas de testes. Por fim, ele gera a resposta do modelo Gemini, que inclui detalhes como arquivos sem cobertura e sugestões para melhorar os testes atuais para o usuário pela linha de comando.

Resultados do comando de análise de código:

devai review code -c ./sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

O comando devai review code realiza uma análise abrangente de um snippet de código fornecido usando um modelo de IA generativa. Ele usa o código para ser analisado como entrada (contexto) e uma preferência de formato de saída (saída). Ele usa um modelo de linguagem grande para analisar o código em busca de correção, eficiência, manutenibilidade, segurança e adesão às práticas recomendadas. O comando constrói uma solicitação detalhada que instrui o Gemini sobre como realizar a revisão e a envia para o modelo para avaliar o código fornecido. Por fim, ele processa a resposta do Gemini, formatando-a em Markdown, JSON ou uma tabela de acordo com a preferência do usuário, e gera os resultados da análise.

Resultados do comando de análise de compliance:

devai review compliance --context ./sample-app/k8s --config ./devai-cli/gemini/styleguide.md

O comando devai review compliance analisa o código em relação a um conjunto de práticas recomendadas, geralmente para configurações do Kubernetes. Ele usa um modelo Gemini para analisar o código fornecido (context) e compará-lo com os padrões especificados em um arquivo de configuração separado (config). O comando usa um comando para instruir o modelo Gemini a agir como um engenheiro Kubernetes especialista e fornecer um relatório de compliance. Em seguida, formata as descobertas como uma breve explicação, com foco em exemplos de código que demonstram como resolver os problemas identificados. Por fim, o comando imprime a saída da análise de compliance do Gemini no console. Isso permite que um usuário audite facilmente o código para verificar a conformidade.

9. Clonar o repositório do Bitbucket e configurar a chave SSH

Volte ao terminal do Google Cloud Shell e configure uma nova chave SSH.

Atualize seu e-mail antes de executar os comandos.

ssh-keygen -t ed25519 -C "your-email-address"
eval "$(ssh-agent -s)"
ssh
-add ~/.ssh/id_ed25519

cat
~/.ssh/id_ed25519.pub

Adicione uma chave de acesso ao repositório do Bitbucket.

Abra "Repository settings / SECURITY / Access keys" e clique em "Adicionar chave".

Para o valor da chave, copie e cole a saída do último comando.

bac102fd433bb388.png

Na seção "Source", clique em "Clone" e copie o URL.

571f4f775bcbd1f7.png

46c163d7e5356c67.png

Volte ao terminal e clone o repositório.

cd ~
mkdir bitbucket
cd bitbucket

Substitua pelo URL do projeto e do repositório do Bitbucket.

git clone git@bitbucket.org:YOUR_PROJECT/genai-for-developers.git

Mude de diretório e abra o arquivo bitbucket-pipelines.yml. Se você mudou o nome do repositório durante a importação, atualize o nome da pasta antes de executar os comandos a seguir.

cd genai-for-developers

cloudshell edit bitbucket
-pipelines.yml

10. Explicar o código com o Gemini Code Assist

Clique com o botão direito do mouse em qualquer lugar do arquivo bitbucket-pipelines.yml e selecione Gemini Code Assist > Explain este.

29ef71c136d173a2.png

Explicação da revisão:

a183a2df0b6cc668.png

11. Desenvolvimento da CLI do DevAI

Nesta seção, você vai fazer mudanças no devai cli.

Para começar, configure o virtualenv do Python, instale os requisitos e execute o comando de exemplo.

cd ~/bitbucket/genai-for-developers/devai-cli
python3
-m venv venv
. venv/bin/activate
pip3 install
-r src/requirements.txt
pip3 install
--editable ./src
devai echo

Defina as variáveis de ambiente necessárias.

export PROJECT_ID=$(gcloud config get-value project)
export LOCATION=us-central1

Execute o comando de análise de código para conferir se tudo está funcionando corretamente:

devai review code -c ~/bitbucket/genai-for-developers/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader > code-review.md

cloudshell edit code
-review.md

Analise os resultados usando a visualização Markdown no editor do Cloud Shell.

Em seguida, use a paleta de comandos e selecione "Markdown: Open Preview".

9587123b62f12a55.png

9999e7fbb20cf251.png

9a12ba6ee8b3eedd.png

Comando de análise da cobertura de teste

devai review testcoverage -c ~/bitbucket/genai-for-developers/sample-app/src > testcoverage.md

cloudshell edit testcoverage
.md

Comando de análise de compliance

devai review compliance --context ~/bitbucket/genai-for-developers/sample-app/k8s --config ~/genai-for-developers/devai-cli/.gemini/styleguide.md > k8s-review.md

cloudshell edit k8s
-review.md

Comando de análise de performance

devai review performance -c ~/bitbucket/genai-for-developers/sample-app/src/main/java > performance-review.md

cloudshell edit performance
-review.md

Comando de análise de segurança

devai review security -c ~/bitbucket/genai-for-developers/sample-app/src/main/java > security-review.md

cloudshell edit security
-review.md

Comandos de análise de bloqueadores

devai review blockers -c ~/bitbucket/genai-for-developers/sample-app/pom.xml
devai review blockers -c ~/bitbucket/genai-for-developers/sample-app/setup.md

Análise e resumo de imagens/diagramas

Diagrama de entrada[~/bitbucket/genai-for-developers/images/extension-diagram.png]:

4b109a74e1aa3fb6.png

Revisar comando:

devai review image \
 
-f ~/bitbucket/genai-for-developers/images/extension-diagram.png \
 
-p "Review and summarize this diagram" > image-review.md

cloudshell edit image
-review.md

Saída:

The diagram outlines a process for conducting local code reviews using a VS Code extension or CLI, leveraging Google Cloud's Vertex AI (Gemini Pro) for generating review prompts. 

**Process Flow:**

1. **Code Style Check:** Developers initiate the process by checking their code for adherence to pre-defined style guidelines.
2. **Prompt Generation:** The VS Code extension/CLI sends the code to Vertex AI (Gemini Pro) on Google Cloud. 
3. **Vertex AI Review:**  Vertex AI analyzes the code and generates relevant review prompts.
4. **Local Review:** The prompts are sent back to the developer's IDE for their consideration.
5. **Optional Actions:** Developers can optionally: 
    - Create new JIRA issues directly from the IDE based on the review prompts.
    - Generate new issues in a GitLab repository.

**Key Components:**

* **VS Code Extension/CLI:** Tools facilitating the interaction with Vertex AI and potential integrations with JIRA and GitLab.
* **Vertex AI (Gemini Pro):**  Google Cloud's generative AI service responsible for understanding the code and generating meaningful review prompts.
* **Google Cloud Secret Manager:** Securely stores API keys and access tokens required to authenticate and interact with Google Cloud services.
* **JIRA/GitLab (Optional):** Issue tracking and project management tools that can be integrated for a streamlined workflow.

**Benefits:**

* **Automated Review Assistance:**  Leveraging AI to generate review prompts saves time and improves the consistency and quality of code reviews. 
* **Local Development:** The process empowers developers to conduct reviews locally within their familiar IDE.
* **Integration Options:** The flexibility to integrate with project management tools like JIRA and GitLab streamlines workflow and issue tracking.

Análise de diferença de imagem

devai review imgdiff \
 
-c ~/bitbucket/genai-for-developers/images/devai-api.png \
 
-t ~/bitbucket/genai-for-developers/images/devai-api-slack.png > image-diff-review.md

cloudshell edit image
-diff-review.md

Saída:

The following UI elements are missing in the "AFTER UPGRADE STATE" image compared to the "BEFORE UPGRADE STATE" image:

1. **Slack:** The entire Slack element, including the icon, "Team channel" label, and the arrow indicating interaction, is absent in the AFTER UPGRADE image. 
2. **Storage Bucket:**  The "Storage Bucket" element with its icon and "PDFs" label is missing in the AFTER UPGRADE image. 
3. **"GenAI Agents" label in Vertex AI block:** The BEFORE UPGRADE image has "Vertex AI Agents" and "GenAI Agent" labels within the Vertex AI block, while the AFTER UPGRADE image only has "Vertex AI."
4. **"Open JIRA Issue" and "Team Project" labels:** In the BEFORE UPGRADE image, these labels are connected to the JIRA block with an arrow. These are missing in the AFTER UPGRADE image.

**Decision Explanation:**

The analysis is based on a direct visual comparison of the two provided images, noting the presence and absence of specific UI elements and their associated labels. The elements listed above are present in the BEFORE UPGRADE image but absent in the AFTER UPGRADE image.

Análise de arquivos de vídeo:

devai review video \
 
-f "/tmp/video.mp4" \
 
-p "Review user journey video and create unit tests using jest framework"

Comando de geração de documentação

devai document readme -c ~/bitbucket/genai-for-developers/sample-app/src/main/

Saída:

# Bank of Anthos - Balance Reader Service

## Description

The Balance Reader service is a component of the Bank of Anthos sample application. It provides a REST endpoint for retrieving the current balance of a user account. This service demonstrates key concepts for building microservices with Spring Boot and deploying them to a Kubernetes cluster.

## Features
...

Confira os comandos decli devai disponíveis no editor do Cloud Shell:

cloudshell edit ~/bitbucket/genai-for-developers/devai-cli/README.md

Ou consulte o README.md no repositório do GitHub.

12. Parabéns!

Parabéns, você concluiu o codelab.

O que aprendemos:

  • Como adicionar etapas de automação de revisão de código da GenAI no Bitbucket
  • Como executar a CLI devai localmente

O que vem em seguida:

  • Mais sessões práticas estão chegando!

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto ou mantenha o projeto e exclua cada um dos recursos.

Excluir o projeto

O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para este tutorial.

©2024 Google LLC Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de empresas e produtos podem ser marcas registradas das empresas a que estão associados.