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 da revisão de código da GenAI no GitHub, no GitLab e no CircleCI.
  • Como usar agentes e kits de ferramentas de ReAct do LangChain para automatizar tarefas como comentar sobre problemas do GitLab e abrir tíquetes do JIRA

Pré-requisitos

  • Para fazer este laboratório, é preciso ter familiaridade com 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 "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

Comandos para testar:

  • Explique o Cloud Run em cinco pontos principais.
  • Você é gerente de produtos do Google Cloud Run. Explique o Cloud Run a 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 produtos do Google Cloud Run. Explique para um desenvolvedor sênior quando você usaria o Cloud Run ou o GKE em cinco pontos-chave.

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 uma das primeiras empresas do setor a publicar um compromisso de privacidade de IA/ML, que destaca nossa convicção de que os clientes devem 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 preenchimentos de código 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 prompts

Quando você envia comandos ao Gemini, seus dados são criptografados em trânsito como entrada para o modelo 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, teste e eficácia do seu código, incluindo qualquer preenchimento, geração ou análise de código oferecido pelo Gemini.

Saiba mais como o Google gerencia seus comandos.

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

Você tem várias opções para alterar/ampliar os prompts atuais de configuração.

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

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 bifurcado do GitHub no navegador e alterne para "Actions". para ativar os fluxos de trabalho.

1cd04db9b37af7cf.png

7. Adicionar secrets do repositório

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

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-o como um valor para o secret.

915579a97f8f2ced.png

Adicionar 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 execução por push 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 revisão 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

Os resultados do comando de análise dos bloqueadores:

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". ícone 7c891e32c055c0e4.png no canto inferior direito,

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 análise:

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

O cli foi instalado, 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 Python virtualenv, 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 avaliação da cobertura de teste para conferir se tudo está funcionando bem:

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

Analise 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. Explorar comandos devai cli

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 desempenho

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

Testar o comando de revisão de cobertura

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 imagens:

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 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. Acompanhe 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 Service 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 executá-lo, cole o valor e pressione Enter.

17. Configuração do comando JIRA

Crie uma conta no JIRA, se ainda não tiver 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 do 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 revisão de 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. Em vez disso, use invocar. warn_deprecated(

Inserindo nova cadeia de AgentExecutor... Pensamento: a descrição é fornecida na pergunta, então não há nada para pensar sobre 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

A cadeia foi 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 o 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 (em inglês) e crie um token de acesso ao projeto em "Settings / Access Tokens" no repositório do GitLab que foi criado nas etapas anteriores.

Copie e armazene o valor do token de acesso para usar 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 (em inglês) e crie um novo problema do 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 remova a marca de comentário do 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 seu Python virtualenv, 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 revisão 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.

Mudar para "Source Control" .

Prepare, confirme e envie por push as mudanças feitas 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 revisão de código quando as alterações forem enviadas ao 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.

Lembre-se de desmarcar 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 de variáveis de CI/CD:

2f4594ce72be4834.png

22. Executar o pipeline CICD do GitLab

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

a7518e37dde42366.png

23. Revisar 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 (em inglês) e analise os comentários atualizados em "CICD Insights". problema.

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

Volte para o editor do Google Cloud Shell. Remova os comentários das linhas para desativar a execução do fluxo de trabalho do GitLab em eventos de push de código. Ainda é possível executar o fluxo de trabalho na interface 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. Assim, as equipes podem validar mudanças no 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. Selecionar "GitLab" / "Cloud" para seu 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 existente e pular esta etapa.

4e9b7cef458d5fba.png

Após a criação do projeto, clique no botão "Project Settings" / "Environment Variables" nesta seção.

1499b5f96ac0fe5e.png

Adicione todas as variáveis de ambiente que você usou 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 de comentário 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

Siga o link do CircleCI para analisar 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 da revisão de código da GenAI no GitHub, no GitLab e no 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 em breve!

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.