Automação da revisão de código com a IA generativa

1. Visão geral

Neste laboratório, você vai configurar o pipeline CICD e integrar com o Gemini para automatizar as etapas de revisão de código.

9dde56ad139b9553.png

O que você vai aprender

Você vai aprender a:

  • Como adicionar etapas de automação de revisão de código do GenAI no GitHub, GitLab e CircleCI
  • Como usar agentes e kits de ferramentas do LangChain ReAct para automatizar tarefas, como comentar em problemas do GitLab e abrir tickets do JIRA

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 "Pergunte ao Gemini" na barra de pesquisa.

e1e9ad314691368a.png

Ative a API Cloud AI Companion:

66cb6e561e384bbf.png

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

5482c153eef23126.png

Sugestões de comandos:

  • Explique 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-chave.
  • 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 códigos que você recebe do Gemini são chamados 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 as solicitações de cli devai, você tem 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. Inscreva-se no Gemini 1.5 Pro com janela de contexto de 1 milhão ou saiba mais.

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.

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 preciso 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"

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. Bifurcar o repositório do GitHub para o repositório pessoal do GitHub

Acesse https://github.com/GoogleCloudPlatform/genai-for-developers/fork e selecione seu ID de usuário do GitHub como proprietário.

Desmarque a opção para copiar apenas a ramificação "main".

Clique em "Create fork".

6. Ativar fluxos de trabalho do GitHub Actions

Abra o repositório do GitHub bifurcado no navegador e mude para a guia "Actions" para ativar os fluxos de trabalho.

1cd04db9b37af7cf.png

7. Adicionar segredos de repositório

Crie um segredo de repositório em "Settings / Secrets and variables / Actions" no repositório do GitHub bifurcado.

Adicione o secret do repositório com o nome "GOOGLE_API_CREDENTIALS".

94cbe2778bef25eb.png

Mude para a janela/guia do Google Cloud Shell e execute o comando abaixo no terminal do Cloud Shell.

cat ~/vertex-client-key.json

Copie o conteúdo do arquivo e cole como um valor para o secret.

915579a97f8f2ced.png

Adicione o segredo PROJECT_ID com o ID do projeto do Qwiklabs como um valor 4fa92833ce615a36.png

8. Executar o fluxo de trabalho do GitHub Actions

Acesse o repositório do GitHub no navegador e execute o fluxo de trabalho.

O fluxo de trabalho está configurado para ser executado em envio de código ou execução manual.

Selecione "GenAI For Developers" em "Todos os fluxos de trabalho" e clique em "Run workflow" usando a ramificação "main".

da11273b4b54f7b6.png

Analisar resultados:

cf49aa41980aacc5.png

Resultados do comando de cobertura de teste:

devai review testcoverage -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

3b21bd4639524763.png

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

devai review code -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

4876dbc2e0042943.png

Resultados do comando de análise de desempenho:

devai review performance -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

98dd2472b2e819bf.png

Resultados do comando de análise de segurança:

devai review security -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

7d180a763db92d56.png

Resultados do comando "Blockers review":

devai review blockers -c ${{ github.workspace }}/sample-app/pom.xml

726175e874aefcf.png

9. Clonar o repositório

Volte ao terminal do Cloud Shell e clone o repositório.

Crie uma pasta para o repositório do GitHub.

mkdir github
cd github

Mude YOUR-GITHUB-USERID para o ID do usuário do GitHub antes de executar os comandos.

Defina o nome de usuário e o e-mail do Git no terminal.

Atualize os valores antes de executar os comandos.

git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
git clone https://github.com/YOUR-GITHUB-USERID/genai-for-developers.git 

Mude a pasta e abra o arquivo de fluxo de trabalho no editor do Cloud Shell.

cd genai-for-developers

cloudshell edit .github/workflows/devai-review.yml 

Aguarde até que o arquivo de configuração seja exibido no ambiente de desenvolvimento integrado.

9e81e5a79d421eac.png

10. Ativar o Gemini Code Assist

Clique no ícone Gemini no canto inferior direito 7c891e32c055c0e4.png.

Clique em "Login to Google Cloud" e "Select a Google Cloud Project".

f5318f22c91ecaa8.png

6b7203ffdd8485fa.png

fb8d42a6bc8a260f.png

Na janela pop-up, selecione seu projeto do Qwiklabs.

f661047956a6d6f9.png

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

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

41fb7da002bdf43.png

Explicação da revisão:

7724d52e54918c00.png

12. Executar a CLI do DEVAI localmente

Volte ao editor do Cloud Shell e abra um novo terminal.

149218baaf30865f.png

Volte ao terminal do Cloud Shell e execute os comandos abaixo para instalar o devai localmente.

pip3 install devai-cli

A CLI foi instalada, mas não está no PATH.

WARNING: The script devai is installed in '/home/student_00_478dfeb8df15/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

Execute o comando abaixo para atualizar a variável de ambiente PATH. Substitua pelo nome da pasta pessoal do usuário. Por exemplo: student_00_478dfeb8df15

export PATH=$PATH:/home/YOUR-USER-HOME-FOLDER/.local/bin

Execute o comando devai cli para realizar a revisão de código localmente. Analise a saída da CLI.

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

cd ~/github/genai-for-developers

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

Abra o script de análise executando o comando abaixo:

cloudshell edit devai-cli/src/devai/commands/review.py

Clique com o botão direito do mouse em qualquer lugar do arquivo review.py e selecione Gemini Code Assist > Explain este.

Leia a explicação.

30e3baf4c272c8ab.png

13. 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 ~/github/genai-for-developers/devai-cli
python3 -m venv venv
. venv/bin/activate
pip3 install -r src/requirements.txt
pip3 install --editable ./src
devai echo

Execute o comando de análise da cobertura de teste para verificar se tudo está funcionando bem:

devai review testcoverage -c ~/github/genai-for-developers/sample-app/src

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

Crie um novo arquivo e cole a resposta do Gemini.

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

ec6fedf4b6d3fb73.png

9999e7fbb20cf251.png

76858be03d73abd0.png

14. Conheça os comandos da CLI deva

Comando de revisão de código

devai review code -c ~/github/genai-for-developers/sample-app/src/main/java

Comando de análise de performance

devai review performance -c ~/github/genai-for-developers/sample-app/src/main/java

Comando de análise de segurança

devai review security -c ~/github/genai-for-developers/sample-app/src/main/java

Comando de análise da cobertura de teste

devai review testcoverage -c ~/github/genai-for-developers/sample-app/src

Comandos de análise de bloqueadores

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

Revisão e resumo de imagens/diagramas:

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

4b109a74e1aa3fb6.png

Revisar comando:

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

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 ~/github/genai-for-developers/images/devai-api.png \
  -t ~/github/genai-for-developers/images/devai-api-slack.png

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.

Comando de geração de documentação:

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

Saída:

# Bank of Anthos - Balance Reader Service

## Table of Contents
- [Description](#description)
- [Features](#features)
- [Technologies Used](#technologies-used)
- [Installation](#installation)
- [Configuration](#configuration)
- [Usage](#usage)
- [Health Checks](#health-checks)
- [Metrics and Tracing](#metrics-and-tracing)
- [Contributing](#contributing)
- [License](#license)

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

- Securely retrieves account balances using JWT authentication.
- Leverages a local cache for fast balance retrieval.
- Asynchronously processes transactions from a central ledger.
- Provides health check endpoints for Kubernetes liveness and readiness probes.
- Exposes metrics to Stackdriver for monitoring and observability.
- Supports distributed tracing with Zipkin.

## Technologies Used

- Java
- Spring Boot
- Spring Data JPA
- Hibernate
- Google Cloud SQL (PostgreSQL)
- JWT (JSON Web Token)
- Guava Cache
- Micrometer
- Stackdriver
- Zipkin

## Installation

1. **Prerequisites:**
   - Java 17 or later
   - Maven 3.5 or later
   - Docker (for containerization)
   - Kubernetes cluster (for deployment)
   - Google Cloud account (for Stackdriver and other GCP services)

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

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

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

15. Acompanhar todas as variáveis de ambiente em um arquivo

Inicie um novo arquivo para acompanhar todas as variáveis de ambiente (por exemplo, chaves de API, tokens de API etc.) que você vai criar.

Você vai usar esses dados para diferentes sistemas muitas vezes ao longo do laboratório. Por isso, é mais fácil fazer referência a eles em um único lugar.

16. Configuração de rastreamento de LLM do LangSmith

Crie uma conta da LangSmith e gere uma chave da API Service na seção "Configurações". https://docs.smith.langchain.com/

Defina as variáveis de ambiente necessárias para a integração do LangSmith. Substitua a chave da API do serviço antes de executar os comandos.

export LANGCHAIN_API_KEY=langsmith-service-api-key

export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"

Para evitar a exposição de informações sensíveis no terminal, a prática recomendada é usar read -s, uma maneira segura de definir variáveis de ambiente sem que o valor apareça no histórico de comandos do console. Depois de executar, cole o valor e pressione Enter.

17. Configuração do comando JIRA

Crie uma conta do JIRA, caso ainda não tenha uma.

Crie um token da API JIRA para seu projeto. https://id.atlassian.com/manage-profile/security/api-tokens

Defina estas variáveis de ambiente necessárias para a integração com o JIRA (substitua os valores antes de executar os comandos).

export JIRA_API_TOKEN=your-token-value
export JIRA_USERNAME="email that you used to register with JIRA"
export JIRA_INSTANCE_URL="https://YOUR-PROJECT.atlassian.net"
export JIRA_PROJECT_KEY="JIRA project key"
export JIRA_CLOUD=true

Abra o arquivo review.py:

cloudshell edit ~/github/genai-for-developers/devai-cli/src/devai/commands/review.py

Analisar o arquivo review.py:

    source=source.format(format_files_as_string(context))

    code_chat_model = GenerativeModel(model_name)
    code_chat = code_chat_model.start_chat()
    code_chat.send_message(qry)
    response = code_chat.send_message(source)
    ...
    else:
        click.echo(response.text) 

Encontre e remova a marca de comentário da linha abaixo desta:

# Uncomment after configuring JIRA and GitLab env variables - see README.md for details

Importar o comando JIRA na parte de cima do arquivo

# from devai.commands.jira import create_jira_issue

Método para criar um problema do JIRA no método code

#create_jira_issue("Code Review Results", response.text)

Execute novamente o comando de análise do código e verifique a saída do agente:

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

devai review code -c ~/github/genai-for-developers/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

Exemplo de resposta:

(venv) student_00_19a997c157f8@cloudshell:~/genai-for-developers/devai-cli (qwiklabs-gcp-02-71a9948ae110)$ devai review code -c ../sample-app/src/main/java/anthos/samples/bankofanthos/balancereader
/home/student_00_19a997c157f8/genai-for-developers/devai-cli/venv/lib/python3.9/site-packages/langchain_core/_api/deprecation.py:117: LangChainDeprecationWarning: The function `initialize_agent` was deprecated in LangChain 0.1.0 and will be removed in 0.2.0. Use new agent constructor methods like create_react_agent, create_json_agent, create_structured_chat_agent, etc. instead.
  warn_deprecated(
Response from Model: ```java
// Class: TransactionRepository
// Method: findBalance

// Efficiency
- Consider using a native SQL query to improve performance for complex database operations.
- Use prepared statements to avoid SQL injection vulnerabilities.

// Best Practices
- Return a Optional<Long> instead of null to handle the case when no balance is found for the given account.

/home/student_00_19a997c157f8/genai-for-developers/devai-cli/venv/lib/python3.9/site-packages/langchain_core/_api/deprecation.py:117: LangChainDeprecationWarning: a função __call__ foi descontinuada no LangChain 0.1.0 e será removida no 0.2.0. Use "invocar". warn_deprecated(

Entrando na nova cadeia AgentExecutor... Pensamento: a descrição é fornecida na pergunta, então não há nada para pensar Ação:

{
  "action": "create_issue",
  "action_input": {
    "description": "Class: TransactionRepository\nMethod: findBalance\n\nEfficiency\n- Consider using a native SQL query to improve performance for complex database operations.\n- Use prepared statements to avoid SQL injection vulnerabilities.\n\nBest Practices\n- Return a Optional<Long> instead of null to handle the case when no balance is found for the given account."
  }
}

Novo problema criado com a chave: CYMEATS-117

Observação: novo problema criado com a chave: CYMEATS-117 Pensamento:Resposta final: CYMEATS-117

Cadeia concluída.

Open your JIRA project in the browser and review the created issue.

Sample JIRA issue view.

<img src="img/9a93a958c30f0b51.png" alt="9a93a958c30f0b51.png"  width="624.00" />

Open  [LangSmith portal](https://smith.langchain.com/) and review LLM trace for JIRA issue creation call.

Sample LangSmith LLM trace.

<img src="img/6222ee1653a5ea54.png" alt="6222ee1653a5ea54.png"  width="624.00" />


## Import GitHub repo to GitLab repo



Go to  [https://gitlab.com/projects/new](https://gitlab.com/projects/new) and select "`Import project`" / "`Repository by URL`" option:

Git repository url:

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

Or

Your personal GitHub project that you created earlier in this lab.

Under Project URL - select your GitLab userid

Set Visibility to `Public`.

Click - "`Create Project`" to start the import process.

If you see an error about invalid GitHub Repository URL,  [create a new GitHub token](https://github.com/settings/tokens)(fine-grained) with Public repositories read-only access, and retry import again providing your GitHub userid and token.


## Clone GitLab repo and setup SSH key



Return to Google Cloud Shell terminal and set up a new SSH key. 

Update your email before running the commands. Hit enter multiple times to accept defaults.

ssh-keygen -t ed25519 -C "seu-e-mail"

eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519

cat ~/.ssh/id_ed25519.pub

Add a public key to your GitLab account.

Open  [https://gitlab.com/-/profile/keys](https://gitlab.com/-/profile/keys) and click "Add new key".

For the key value copy/paste the output of the last command.

Go back to the terminal and clone the repository. 

cd ~ mkdir gitlab cd gitlab

Replace with your GitLab userid and repository url that was just created.

```console
git clone git@gitlab.com:YOUR_GITLAB_USERID/genai-for-developers.git

Mude de diretório e abra o arquivo .gitlab-ci.yml.

cd genai-for-developers

cloudshell edit .gitlab-ci.yml

Caso ainda não tenha feito isso, ative Gemini no editor do Cloud Shell.

4a7f4640f66037f.png

Clique com o botão direito do mouse em qualquer lugar do arquivo .gitlab-ci.yml e selecione "Gemini Code Assist > Explain this"".

154838a0100389a9.png

18. Configuração do comando do GitLab

Abra o GitLab e crie um token de acesso do projeto em "Settings / Access Tokens" no repositório do GitLab criado nas etapas anteriores.

Copie e armazene o valor do token de acesso para ser usado nas próximas etapas.

Use os seguintes detalhes:

  • Nome do token: devai-cli-qwiklabs
  • Papel: Maintainer
  • Escopo: api

1865de233277f11c.png

Defina as variáveis de ambiente necessárias para a integração do GitLab.

Esse comando exige que você atualize seu token de acesso do GitLab.

export GITLAB_PERSONAL_ACCESS_TOKEN=gitlab-access-token

Esse comando exige que você atualize o ID de usuário e o nome do repositório do GitLab.

export GITLAB_REPOSITORY="USERID/REPOSITORY"

Defina o restante das variáveis de ambiente:

export GITLAB_URL="https://gitlab.com"
export GITLAB_BRANCH="devai"
export GITLAB_BASE_BRANCH="main"

Abra o site do GitLab e crie um novo problema no GitLab no seu projeto com o título "CICD AI Insights".

63a13948f6864074.png

Outra opção é usar o comando curl abaixo. Você vai precisar de um ID de projeto do GitLab. Você pode pesquisar na seção "Settings / General".

export GITLAB_PROJECT_ID=56390153 # replace

curl --request POST \
  --header "PRIVATE-TOKEN: $GITLAB_PERSONAL_ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{"title":"CICD AI Insights"}' \
  https://gitlab.com/api/v4/projects/$GITLAB_PROJECT_ID/issues

Volte para o Cloud Shell e abra o arquivo review.py:

cloudshell edit ~/gitlab/genai-for-developers/devai-cli/src/devai/commands/review.py

Encontre e descomente o código abaixo

Linha para importar o comando do GitLab

# from devai.commands.gitlab import create_gitlab_issue_comment

Método para comentar sobre o problema do GitLab

# create_gitlab_issue_comment(response.text)

19. Desenvolvimento da CLI do DevAI

Desde que você mudou para o repositório/diretório do GitLab. Será necessário executar novamente as etapas de configuração abaixo.

No terminal, configure o virtualenv do Python, instale os requisitos e execute o comando de exemplo.

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

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

É possível confirmar o local do cli. Dessa vez, ele precisa estar localizado na pasta do GitLab.

 which devai

Execute novamente o comando de análise de código no terminal:

devai review code -c ~/gitlab/genai-for-developers/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

Exemplo de saída, com algumas seções abreviadas:

(venv) student_00_19a997c157f8@cloudshell:~/genai-for-developers/devai-cli (qwiklabs-gcp-02-71a9948ae110)$ devai review code -c ../sample-app/src/main/java/anthos/samples/bankofanthos/balancereader
.
.
Response from Model: **Class: Transaction**

**Method: toString**

**Maintainability:**

* The formatting of the string representation could be more clear and concise. Consider using a dedicated method for formatting the amount, e.g., `formatAmount()`.
.
.

> Entering new AgentExecutor chain...
Thought: I need to first get the issue ID using the Get Issues tool, then I can comment on the issue using the Comment on Issue tool.
Action: Get Issues
Action Input: 
Observation: Found 1 issues:
[{'title': 'CICD AI Insights', 'number': 1}]
Thought:Thought: I found the issue ID, so now I can add the comment to the issue.
Action: Comment on Issue
Action Input: 1


Action: Get Issue
Action Input: 1
Observation: {"title": "CICD AI Insights", "body": "", "comments": "[{'body': '**Transaction.java**\\n\\n\\n**Class:** Transaction\\n\\n\\n* **Security:** Consider using a custom date format like \\\\\"yyyy-MM-dd HH:mm:ss.SSS\\\\\" to handle timestamps more robustly.\\n\\n\\n**JWTVerifierGenerator.java**\\n\\n\\n* .
.
Thought:Now I can use the Comment on Issue tool to add the comment to the issue.

Action: Comment on Issue
Action Input: 
1

**Class: Transaction**

**Method: toString**

**Maintainability:**
.
.
.
Observation: Commented on issue 1
Thought:I have now completed the necessary actions and added the comment to the issue 'CICD AI Insights'.

Final Answer: Comment added to issue 'CICD AI Insights'

> Finished chain.

Abra o site do GitLab e analise o problema atualizado.

9da39bf6070d9447.png

Analise o rastro do LLM no LangSmith.

Exemplo de rastro de LLM.

f32eed34f3a3b040.png

20. Enviar mudanças para o repositório do GitLab

Volte para o editor do Google Cloud Shell.

Mude para a guia "Source Control".

Organize, faça commit e envie as mudanças que você fez para atualizar o arquivo review.py.

b838a11f362454ce.png

21. Configuração do CICD do GitLab

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

Abra o site do GitLab e navegue até a seção "Settings / CICD"".

Abra a seção Variables e clique em Add variable.

Desmarque todas as caixas de seleção ao adicionar as variáveis. Exemplo:

68b3ed732b6a8fe9.png

Usando suas anotações, onde você mantém todas as variáveis de ambiente, adicione variáveis de ambiente para JIRA, GitLab e LangSmith.

PROJECT_ID=qwiklabs-project-id
LOCATION=us-central1
GOOGLE_CLOUD_CREDENTIALS - cat ~/vertex-client-key.json

LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"
LANGCHAIN_API_KEY=your-service-api-key

JIRA_API_TOKEN=your-token
JIRA_USERNAME="email that you used to register with JIRA"
JIRA_INSTANCE_URL="https://YOUR-PROJECT.atlassian.net"
JIRA_PROJECT_KEY="JIRA project key"
JIRA_CLOUD=true

GITLAB_PERSONAL_ACCESS_TOKEN=your-gitlab-token
GITLAB_URL="https://gitlab.com"
GITLAB_REPOSITORY="USERID/REPOSITORY"
GITLAB_BRANCH="devai"
GITLAB_BASE_BRANCH="main"

Para o valor da variável GOOGLE_CLOUD_CREDENTIALS, use a chave da conta de serviço criada na seção acima.

cat ~/vertex-client-key.json

Visualização "CI/CD Variables":

2f4594ce72be4834.png

22. Executar o pipeline CICD do GitLab

Abra "Build / Pipelines" na interface do GitLab e clique em "Run Pipeline".

a7518e37dde42366.png

23. Analisar a saída do pipeline do GitLab

Abra "Build / Jobs" na interface do GitLab e analise a saída do pipeline.

985e4b322fb73b1c.png

Abra o site do GitLab e analise os comentários atualizados sobre o problema "CICD Insights".

Desativar a execução do fluxo de trabalho do GitLab

Volte para o editor do Google Cloud Shell. Remova a marca de comentário das linhas para desativar a execução do fluxo de trabalho do GitLab em eventos de envio de código. Ainda é possível executar o fluxo de trabalho da IU sob demanda.

# workflow:
#   rules:
#     - if: $CI_PIPELINE_SOURCE == "web"

Abra .gitlab-ci.yml na raiz do projeto e remova a marca de comentário das linhas:

cloudshell edit ~/gitlab/genai-for-developers/.gitlab-ci.yml

Mude para a guia "Source Control": organize, confirme e envie essa mudança.

a9d52beb8c642982.png

24. Integração do CircleCI

O que é o CircleCI?

O CircleCI é uma plataforma de CI/CD baseada na nuvem que permite que as equipes automatizem os processos de desenvolvimento e implantação de software. Ele se integra a sistemas de controle de versões, como GitHub, Bitbucket e GitLab, permitindo que as equipes validem as mudanças de código em tempo real executando testes e builds automatizados. Para a entrega contínua, o CircleCI pode automatizar a implantação de software em vários ambientes de nuvem, como AWS, Google Cloud e Azure.

Configuração

Abra o site do CircleCI e crie um novo projeto. Selecione "GitLab" / "Cloud" para o repositório.

Conceda acesso ao CircleCI à sua conta do GitLab.

Na opção "Mais rápida", selecione a ramificação main. O CircleCI pode detectar um arquivo de configuração e pular esta etapa.

4e9b7cef458d5fba.png

Depois que o projeto for criado, clique na seção "Project Settings" / "Environment Variables".

1499b5f96ac0fe5e.png

Adicione todas as variáveis de ambiente usadas até agora.

f15b7a3e02c649e8.png

Confira um exemplo de lista de variáveis de ambiente a serem adicionadas.

PROJECT_ID=qwiklabs-project-id
LOCATION=us-central1
GOOGLE_CLOUD_CREDENTIALS - cat ~/vertex-client-key.json

LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"
LANGCHAIN_API_KEY=your-service-api-key

JIRA_API_TOKEN=your-token
JIRA_USERNAME="email that you used to register with JIRA"
JIRA_INSTANCE_URL="https://YOUR-PROJECT.atlassian.net"
JIRA_PROJECT_KEY="JIRA project key"
JIRA_CLOUD=true

GITLAB_PERSONAL_ACCESS_TOKEN=your-gitlab-token
GITLAB_URL="https://gitlab.com"
GITLAB_REPOSITORY="USERID/REPOSITORY"
GITLAB_BRANCH="devai"
GITLAB_BASE_BRANCH="main"

25. Ativar os métodos JIRA e GitLab

Abra o editor do Google Cloud Shell e faça uma alteração no arquivo review.py.

Encontre e remova a marca das linhas abaixo.

# from devai.commands.jira import create_jira_issue
create_jira_issue("Performance Review Results", response.text)
create_gitlab_issue_comment(response.text)
.
.
.
create_jira_issue("Security Review Results", response.text)
create_gitlab_issue_comment(response.text)

Mude para a guia "Source Control": organize, confirme e envie essa mudança.

Abra o site do GitLab e acesse "Build" / "Pipelines".

d196ad631be17b88.png

Acesse o link para o CircleCI e analise o fluxo de trabalho.

d4ff287694b82445.png

Analise os comentários sobre o problema do GitLab no seu repositório.

e77ee826488d5299.png

9a51daa2960994e3.png

Analise os novos problemas criados no seu projeto do JIRA.

1e6305a32aaef6a2.png

26. Parabéns!

Parabéns, você concluiu o laboratório!

O que aprendemos:

  • Adição de etapas de automação de revisão de código do GenAI no GitHub, GitLab e CircleCI.
  • Agentes LangChain ReAct para automatizar tarefas, como comentar sobre problemas do GitLab e abrir tickets do JIRA.

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.