Nos últimos dias, venho estudando sobre entrega contínua, e, durante esse processo acabei criando um pipeline no Qual eu vou compartilhar nesse post com Vocês:)
SE Você ainda não sabe o que é enga contínua clique Акми
O Que Será Abordado Nesse Post?
- Análise Código (Bugs, Segurança e ulnerabilidades) utilizando sonarqube
- Яички Unitários e de Integração rodando em paralelo para otimizar o Pipeline
- Строитель
- Развернуть Automático da aplicação no heroku
- Teste de api após o развертывать
Ferramenta que eu estou utilizando como cd (entrega contínua) é o Circleci , Sendo Assim, Ela Que Eu Irei Mostrar os.
Circleci
É Uma plataforma de Integração e Entrega contínua (CICD) para sistemas operacionais como linux, macos e android e и т. Д., Totalmente em nuvem.
Разговор дешево, покажи мне код
Nosso Primeiro Passo é Criar как задачи № Градл para o teste UnitArio E Teste de Integração, Esso nos ajudara a separar o jass na execução do pipeline.
O Código Das Tasks ficará assim no arquivo build.gradle.kts:
tasks { create("unitTest", Test::class) { filter { includeTestsMatching("br.com.projeto.core.*") } testLogging { events(TestLogEvent.PASSED) events(TestLogEvent.FAILED) } } create("integrationTest", Test::class) { filter { includeTestsMatching("integration.*") } testLogging { events(TestLogEvent.PASSED) events(TestLogEvent.FAILED) } } } Basicamente a task unitTest roda todos os testes que estão dentro do pacote `br.com.projeto.core.*`, já a task integrationTest como o próprio nome já diz, executa os testes de integração do pacote `integration.*`, as duas tasks tem como configuração o test logging mostrando os testes que passaram e que falharam.
Нет Meu Caso, эстратура Dos Pacotes de Testes do meu projeto essim:
test > kotlin > br.com.projeto.core (testes unitários) test > kotlin > integration
Certo, Agora Que Temos Essas Duas Задачи, Podemos inclui-las no nosso arquivo config.yml Do Circleci que está no projeto:
unit-test: working_directory: ~/ docker: - image: circleci/openjdk:11-jdk-stretch-node-browsers steps: - checkout - run: name: Unit tests command: ./gradlew unitTest integration-test: working_directory: ~/ machine: true environment: JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64 JAVA_TOOL_OPTIONS: "-Xmx4G" GRADLE_OPTS: "-Xmx4G -Dorg.gradle.daemon=false -DdisablePreDex" steps: - run: name: Download Java 11 command: | sudo apt update sudo apt install openjdk-11-jdk - checkout - run: name: Integration tests command: ./gradlew integrationTest workflows: 'Test, Build and Deploy Workflow': jobs: - unit-test - integration-test
Nosso segundo passo, é configurar o Сонаркубе Нет projeto, para Que o Pipeline Foca O Загрузить DA ANálise Automaticamente No SonarCloud.
Сонаркубе
É Uma Ferramente Para Análise de Código, Sendo Osfory Analisar Qualidade de Código, Bugs e Ossíveis falhas de Segurança.
Dentro do arquivo build.gradle.kts éseyrio inserir o código abaixo:
plugins { id("org.sonarqube") version "3.0" } sonarqube { properties { property("sonar.projectKey", "chave do seu projeto") property("sonar.organization", "sua organizacao") property("sonar.host.url", "https://sonarcloud.io") } }
Feito Esso, Agora precisamos adicionar o Иоваря без трубопровода, adicionando no arquivo config.yml:
Não se preocupe com o arquivo config.yml agora, vou deixar ele Нет финального пост: D
code_analysis: docker: - image: circleci/openjdk:11-jdk-stretch-node-browsers steps: - checkout - run: name: Sonarqube analysis command: ./gradlew sonarqube workflows: 'Test, Build and Deploy Workflow': jobs: - unit-test - integration-test - code_analysis: requires: - unit-test - integration-test context: sonarqube
REPARE QUE NO JOB DE code_analysis Foi adicionado Тэг требует Que indica Que esse Job Sou Deve Ser Aressado Após OS JOBS-Test Entegration Test Test Terem Sido executos com sucesso, тег (контекст) [ https://circleci.com/docs/2.0/contexts/ ] indica Que o Работа девелотизар o контекст criado no circleci (Нет Caso sonarqube) utilizando как variaveis que foram defineidas nesse contexto.
CERTO, Agora Que adicionamos os яичет e a análise de código precisamos receart o build do projeto para que seja gerado o para para o развернуть da aplicação.
Vamos adicionar o Job Que Que Execure o Build:
build: working_directory: ~/ docker: - image: circleci/openjdk:11-jdk-stretch-node-browsers steps: - checkout - restore_cache: keys: - v1-dependencies-{{ checksum "build.gradle.kts" }} - v1-dependencies- - run: name: Run assemble command: ./gradlew clean assemble - save_cache: paths: - ~/.gradle key: v1-dependencies-{{ checksum "build.gradle.kts" }}
Agora que conseguimos fazer o build da nossa aplicação de forma Automatizada, Vamos para a proxima etapa, нет Caso o развертывание.
O Circleci Disponibiliza Орбы que de forma resumida, sãao pacotes с открытым исходным кодом Que reduzem Комплексное изображение de configururação para jobs criar, команды E Executors. Vamos utilizar a orb do Хероку PARA EXERATAR O развертывание.
version: 2.1 orbs: heroku: circleci/heroku@1.2.2 jobs: \* lista de jobs *\ workflows: 'Test, Build and Deploy Workflow': jobs: - unit-test: - integration-test: - code_analysis: requires: - unit-test - integration-test context: sonarqube - build: requires: - unit-test - integration-test - heroku/deploy-via-git: requires: - build filters: branches: only: master
Não se esqueca de configurar o seu arquivo procfile do heroku:) нет meu caso ficou assim:
web: java -jar build/libs/projeto.jar -port=${PORT}
Com O Deploy Configurado, Temos A última etapa Que Seria o teste de api após o развертывание Para verificar se os endpoints da aplicação continuam funcionando corretamente (nesse amemplo, temos apenas ammiente, mase seria exempare os osemesestese demembente desemevom OU Petsing Antes развертывает Ser Areceadado Em Produção).
Para essa etapa, используйте orb do circleci chamada postman newman Нет Qual Lê Uma Collection.json de UM Deginado Path E Execure.
Como é Uma orb, Devemos adiciona-lá no arquivo config.yml
version: 2.1 orbs: heroku: circleci/heroku@1.2.2 newman: postman/newman@0.0.2 jobs: \* lista de jobs *\
Агора Вамос Адиционар О.
api-test: working_directory: ~/ executor: newman/postman-newman-docker steps: - checkout - newman/newman-run: collection: postman/projeto-collection.json environment: postman/projeto-environment.json
Профридадская среда Contém A Url que foi gerada no heroku durante o развернут.
Нет финального o Pipeline Deve Ficar Dessa Forma нет Circleci:
Arquivo config.yml Завершите:
version: 2.1 orbs: newman: postman/newman@0.0.2 heroku: circleci/heroku@1.2.2 jobs: unit-test: working_directory: ~/ docker: - image: circleci/openjdk:11-jdk-stretch-node-browsers steps: - checkout - run: name: Unit tests command: ./gradlew unitTest integration-test: working_directory: ~/ machine: true environment: JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64 JAVA_TOOL_OPTIONS: "-Xmx4G" GRADLE_OPTS: "-Xmx4G -Dorg.gradle.daemon=false -DdisablePreDex" steps: - run: name: Download Java 11 command: | sudo apt update sudo apt install openjdk-11-jdk - checkout - run: name: Integration tests command: ./gradlew integrationTest code_analysis: docker: - image: circleci/openjdk:11-jdk-stretch-node-browsers steps: - checkout - run: name: Sonarqube analysis command: ./gradlew sonarqube build: working_directory: ~/ machine: true steps: - checkout - restore_cache: keys: - v1-dependencies-{{ checksum "build.gradle.kts" }} - v1-dependencies- - run: name: Run assemble command: ./gradlew clean assemble - save_cache: paths: - ~/.gradle key: v1-dependencies-{{ checksum "build.gradle.kts" }} api-test: working_directory: ~/ executor: newman/postman-newman-docker steps: - checkout - newman/newman-run: collection: postman/collection.json environment: postman/environment.json workflows: 'Test, Build and Deploy Workflow': jobs: - unit-test - integration-test - code_analysis: requires: - unit-test - integration-test context: sonarqube - build: requires: - unit-test - integration-test - heroku/deploy-via-git: requires: - build filters: branches: only: master - api-test: requires: - heroku/deploy-via-git
Arquivo build.gradle.kts opplo:
plugins { kotlin("jvm") version "1.3.61" id("org.sonarqube") version "3.0" } sonarqube { properties { property("sonar.projectKey", "chave do projeto" property("sonar.organization", "organization") property("sonar.host.url", "https://sonarcloud.io") } } tasks { create("stage", Task::class) { dependsOn("installDist") } create("unitTest", Test::class) { filter { includeTestsMatching("br.com.projeto.core.*") } testLogging { events(TestLogEvent.PASSED) events(TestLogEvent.FAILED) } } create("integrationTest", Test::class) { filter { includeTestsMatching("integration.*") } testLogging { events(TestLogEvent.PASSED) events(TestLogEvent.FAILED) } } }
Esse foi apenas emembero do que é ous of -of fazer com o seu pipeline, exceedem vários wootros jobs que podem ser adicionados como lint, gerar documentação, яички для дыма, автоматическая
Espero Que esse post tenha te ajudado de alguma forma.
Muito obrigado por ler esse post, caso tenha ficado com alguma dúvida ou tenha alguma suestão, sinta-se livre para deixar um comentário 😀
Оригинал: «https://dev.to/vinigmoraes/entrega-continua-analise-de-codigo-testes-build-e-deploy-automatizado-com-circleci-gradle-4fl4»