Pular para o conteúdo principalCriando um Container Docker
Como o Devin tem acesso a um terminal e pode configurar e executar software em seu próprio servidor, criar um container Docker está totalmente dentro das suas capacidades.
Nossa aplicação de exemplo é um projeto em Go com MongoDB como armazenamento de dados. Esta sessão é a versão do Devin de um pull request que um desenvolvedor real fez para um projeto open source. Acompanhe a execução ao vivo aqui.
Começamos com a issue original do GitHub:
Em seguida, podemos escrever um prompt simples para o Devin com base no que essa issue está pedindo. Pedimos que ele leia a issue do GitHub acima para obter mais contexto, mas também damos nosso próprio resumo da solução proposta e do que queremos que o Devin produza.
Investigando a base de código
Devin começa com uma etapa de investigação em que lê nossa issue vinculada no GitHub e analisa o código e os arquivos de configuração do projeto em busca das dependências necessárias.
Após concluir a análise, Devin procede à instalação do Docker em sua máquina local e, em seguida, cria nosso Dockerfile inicial, docker-compose.yml e .dockerignore para começar a testar a configuração do contêiner. Ele também configura nosso arquivo .env para que a aplicação possa ser executada com o back-end em contêiner recém-configurado.
Devin então passa a testar cada container, começando pelo nosso servidor MongoDB e depois seguindo para o nosso ambiente Go. Assim que os containers estão em execução, Devin passa a testar o próprio aplicativo. Ao ler o Histórico de Comandos do Devin, vejo que ele encontrou nossa definição de API Swagger e a carregou no Browser integrado para entender como a API de backend funciona.
Em seguida, Devin montou uma requisição curl para testar se a API de backend está em execução e retornando resultados conforme sua especificação de design.
Como recebemos um erro de Connection refused, Devin imediatamente inicia a depuração e correção da configuração do Docker. Esse é um padrão comum em que Devin consegue se autocorrigir à medida que avança em uma sessão. Devin corrige rapidamente o problema de configuração, reinicia o contêiner Docker e resume o trabalho concluído para nós.
Quando comparamos o trabalho do Devin com o PR do projeto real, há algumas diferenças e melhorias importantes:
- Devin configura um arquivo docker-compose.yml além do nosso Dockerfile. Isso nos dá configurações de orquestração mais específicas, como definir como nossa rede funciona, como nossos volumes são configurados e de quais serviços outros serviços dependem.
- Devin altera o processo de build de
go mod tidy para um método que nos permite armazenar em cache algumas das dependências no nosso build Docker.
- Devin gera um binário Go estaticamente ligado em vez de dinamicamente ligado, o que deve deixar nosso build Docker mais leve.
- Devin configura nossos certificados de CA para HTTPS e nos permite usar um arquivo .env para configuração em vez de passar variáveis de ambiente diretamente.
- E, principalmente, Devin adiciona um serviço MongoDB na nossa configuração Docker, algo que o PR do projeto não faz. Ele assume que o desenvolvedor já tem uma instância separada de MongoDB em execução.
Em 13 minutos, Devin configurou com sucesso nosso contêiner Docker para o backend deste projeto usando boas práticas, testou-o e escreveu um resumo abrangente do seu trabalho. Experimente hoje o seu próprio prompt de conteinerização na sua base de código se inscrevendo para uma conta Devin para sua equipe.