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

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

Neste laboratório, você vai aprender a:

  • Como adicionar etapas de automação de revisão de código de IA generativa no Bitbucket
  • Como executar a CLI devai localmente para automatizar 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 a conversa no 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:

  • Explique o Cloud Run em cinco pontos principais.
  • Você é gerente de produtos do Google Cloud Run. Explique o Cloud Run para um estudante em cinco pontos principais.
  • Você é gerente de produtos do Google Cloud Run. Explique o Cloud Run para um desenvolvedor certificado do Kubernetes em cinco pontos principais curtos.
  • Você é gerente de produtos do Google Cloud Run. Explique quando usar o Cloud Run em vez do GKE para um desenvolvedor sênior em cinco pontos principais curtos.

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

Como o Gemini para 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 nossa convicção de 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 ou código de entrada que você envia ao Gemini para analisar ou concluir, são chamadas de comandos. As respostas ou geraçõ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 comandos

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

Dados de programação gerados pelo Gemini

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

Saiba mais sobre como o Google processa seus comandos.

3. Opções para testar comandos

Se você quiser mudar/estender os comandos da CLI devai, há várias opções.

O Vertex AI Studio faz parte da plataforma Vertex AI do Google Cloud e foi projetado 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 testes com engenharia de comandos e a API Gemini.

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

4. Criar a conta de serviço

Clique no ícone à direita da barra de pesquisa para ativar o Cloud Shell.

3e0c761ca41f315e.png

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

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

Se for preciso autorizar, clique em "Autorizar" para continuar.

6356559df3eccdda.png

Execute os comandos a seguir para criar uma 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 em pipelines de CI/CD.

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"

Conceda 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 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 dê um nome ao 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 de CI/CD do Bitbucket para executar a revisão de código quando as mudanças forem enviadas ao 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/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 nessa análise, ele faz recomendações para melhorar a cobertura de testes, sugerindo testes específicos para adicionar e oferecendo conselhos gerais sobre práticas recomendadas de teste. Por fim, ele gera a resposta do modelo do Gemini, que inclui detalhes como arquivos sem cobertura e sugestões para melhorar os testes atuais ao usuário pela linha de comando.

Resultados do comando de revisão de código:

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

O comando devai review code realiza uma revisão de código abrangente de um snippet de código fornecido usando um modelo de IA generativa. Ele usa o código a ser revisado 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 relação à correção, eficiência, capacidade de manutenção, segurança e adesão às práticas recomendadas. O comando cria um comando detalhado instruindo o Gemini sobre como realizar a revisão e o envia ao 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 revisão 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 do Gemini para analisar o código fornecido (context) e compará-lo com os padrões especificados definidos em um arquivo de configuração separado (config). O comando usa um comando para instruir o modelo do Gemini a agir como um engenheiro especialista em Kubernetes e fornecer um relatório de conformidade. Em seguida, ele 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 revisão de compliance do Gemini no console. Isso permite que um usuário audite facilmente o código para 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 seu 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 o 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 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.

29ef71c136d173a2.png

Explicação da revisão:

a183a2df0b6cc668.png

11. Desenvolvimento da CLI da DevAI

Nesta seção, você vai fazer mudanças na CLI devai.

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 revisão de código para verificar se tudo está funcionando bem:

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

Revise os resultados usando a prévia em 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 revisão da cobertura de teste

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

cloudshell edit testcoverage.md

Comando de revisão 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 revisão 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 revisão 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

Revisão e resumo de imagens/diagramas

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

4b109a74e1aa3fb6.png

Comando de revisão:

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
...

Revise os comandos da CLI devai disponíveis no editor do Cloud Shell:

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

Ou revise o arquivo README.md no repositório do GitHub.

12. Parabéns!

Parabéns, você concluiu o codelab.

O que aprendemos:

  • Adicionar etapas de automação de revisão de código de IA generativa no Bitbucket
  • Executar a CLI devai localmente

Qual é a próxima etapa?

  • 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.