Do not speak Portuguese? Translate this site with Google or Bing Translator
Integração GitLab, Jenkins e SonarQube

Posted on: April 01, 2023 11:45 AM

Posted by: Renato

Views: 1095

Configurando a integração contínua com GitLab, Jenkins e SonarQube

 

Este tutorial é sobre integração contínua entre GitLab, Jenkins e SonarQube. No final deste tutorial, você poderá visualizar os relatórios de qualidade dos códigos do repositório GitLab no SonarQube usando o Jenkins como integrador contínuo e o sonar-scanner como analisador de código.

Configuração de integração contínua com GitLab, Jenkins e SonarQube

Antes de vermos como configurar a integração contínua (CI), vamos primeiro ver os componentes envolvidos e quais funções eles desempenham em nossa configuração aqui.

GitLabGenericName

O GitLab é uma plataforma de hospedagem de código-fonte aberto para colaboração e controle de versão. Ele pode ser instalado em seus servidores para hospedar seus códigos de forma privada. O GitLab fornece funcionalidade de gerenciamento de código-fonte (SCM) semelhante ao GitHub e ao BitBucket .

Jenkins

Jenkins é um servidor de Integração Contínua de código aberto. É uma ferramenta de automação que pode ser usada para testar e compilar seus códigos e implantá-los na produção se a compilação for bem-sucedida.

Jenkins aqui é usado para extrair os códigos do GitLab (em tempo real, quando o código é enviado ou mesclado), criar os códigos do projeto e enviar o resultado para o SonarQube para interpretação visual.

SonarQubeGenericName

O SonarQube é um servidor de inspeção contínua de código aberto. É uma ferramenta usada como um portão de qualidade para revisão de código. Ele fornece relatórios automáticos de análise de códigos, detecta bugs, vulnerabilidades de segurança, códigos duplicados, comentários, cheiros de código e muito mais para variedades de linguagens de programação.

Pré-requisitos

Este tutorial assume que GitLab, Jenkins e SonarQube já foram instalados em seu sistema Linux. A instalação dessas ferramentas não é nosso foco aqui.

Agora que você conhece as ferramentas envolvidas e suas funções, vamos ver como configurar nossa integração contínua

Passo 1. Configurações no Sonarqube

Exigimos o token de autenticação do servidor do SonarQube, que posteriormente passamos para o Jenkins. Este token dá acesso ao Jenkins, para enviar as compilações do Jenkins no SonarQube para análise de código.

  • Vá para Minha conta > Segurança
  • No bloco Tokens , digite qualquer texto para gerar um token.
  • Guarde a cópia do token

Aqui está a revisão do token do usuário gerador do SonarQube:

Gerar token de autenticação do servidor no SonarQube
Gerar token de autenticação do servidor no SonarQube

Agora, vamos criar um projeto onde todos os relatórios de análise de código são publicados.

  • Vá para Administração > Projetos > Gerenciamento
  • Clique em Criar Projeto
  • Crie o projeto com seu Project_name e Project_key. Copie o nome e a chave do projeto. Passaremos essas credenciais na configuração do Jenkins posteriormente.

Visualização da criação de um projeto:

Criando um projeto no SonarQube
Criando um projeto no SonarQube

Etapa 2. Configuração no GitLab

Também precisamos dos tokens de acesso do usuário do GitLab que depois passamos no Jenkins. Isso é usado para autenticar o URL do repositório do usuário do GitLab, de onde o Jenkins extrai os códigos.

  • Vá para o menu Configurações do formulário Configurações do usuário .
  • Ir para tokens de acesso
  • Crie um token de acesso pessoal adicionando qualquer nome exclusivo ( Name ) e data de expiração do token ( Expires at ). Defina também os Scopes como api- Full access.

Visualização da geração de tokens de acesso do usuário:

Gerar token de acesso do usuário no GitLab
Gerar token de acesso do usuário no GitLab

Etapa 3. Configuração no Jenkins

Precisamos configurar o GitLab e o SonarQube no painel web do Jenkins. Para isso, precisamos instalar alguns plugins necessários.

  • Entrar no Jenkins
  • Vá para Gerenciar Jenkins > Gerenciar Plugins
  • Na aba Disponível , procure por GitLab e SonarQube e instale os seguintes plugins:
  • Plug-in de gancho do GitLab
  • Plug-in do GitLab
  • git
  • Scanner SonarQube para Jenkins

Exigimos que o SonarQube Scanner seja instalado no “servidor Jenkins”, que realmente inicia a análise de código e publica os relatórios para projetar no SonarQube.

Para instalar o SonarQube Scanner, você pode usar os seguintes comandos:

$ wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip
$ unzip sonar-scanner-cli-3.3.0.1492-linux.zip 
$ cd sonar-scanner-3.3.0.1492-linux $ pwd 

Copie o local. Precisamos adicionar este local (como pasta inicial de instalação do SonarQube Scanner) na configuração do Jenkins.

Também configuraremos o arquivo de propriedades do sonar-scanner em adicionar servidor SonarQube:

$ cd conf 
$ vi sonar-scanner.properties

Descomente “sonar.host.url” e adicione a URL do seu servidor SonarQube

Configurar o servidor SonarQube

Agora vamos configurar o GitLab e o SonarQube no Jenkins.

  • Vá para Gerenciar Jenkins > Configurar Sistema
  • Na guia SonarQube servers , insira a URL do servidor SonarQube e o token de autenticação do servidor gerado no SonarQube antes.

Visualização da adição do SonarQube no Jenkins:

Adicionando SonarQube ao Jenkins para configuração de CI
Adicionando o SonarQube ao Jenkins

Agora, vá para a guia GitLab e adicione o URL do servidor GitLab no URL do host GitLab

Em Credentials , precisamos do token da API do GitLab para acessar o GitLab. Clique em Adicionar e selecione Jenkins: Jenkins Credentials Provider

Em Kind , selecione GitLab API Token na lista suspensa. Digite seu API Token gerado no GitLab antes. Adicione o Token com um ID exclusivo.

Além disso, certifique-se de ter o local correto do Jenkins na guia Localização do Jenkins .

Depois de adicionar o GitLab e o SonarQube com sucesso, também precisamos adicionar as configurações do SonarQube Scanner.

  • Vá para Gerenciar Jenkins > Configuração de ferramenta global
  • Na guia SonarQube Scanner , clique em SonarQube Scanner Installations
  • Desmarque Instalar automaticamente e adicione sua pasta inicial de instalação do SonarQube.
Configuração do scanner SonarQube em Jenkins
A pasta inicial do meu scanner SonarQube era /opt/sonar-scanner

Passo 4: Adicionando um projeto ao Jenkins para integração contínua e inspeção contínua

Feitas todas as configurações, vamos agora criar um projeto no Jenkins.

Vá para Jenkins Dashboard -> New Item > Select Freestyle Project . Criar projeto com um nome de projeto exclusivo

Criando um novo projeto no Jenkins
Criando um novo projeto no Jenkins

No Jenkins Dashboard, selecione seu projeto e clique em Configure .

Role até a guia Geral , selecione a conexão GitLab na lista suspensa. Você verá o nome da conexão do GitLab que adicionamos antes, em Manage Jenkins > Configure System .

Role até a guia Source Code Management , selecione Git . Adicione a URL http do projeto GitLab (usa a mesma sintaxe do comando git clone). Você pode obter o URL na sua página do projeto GitLab.

Obtendo a URL do GitLab
Obtendo a URL do GitLab

Especifique também a autenticação para o URL do GitLab.

  • Em Credentials , clique em Add e selecione Jenkins: Jenkins Credentials Provider
  • em Tipo , selecione Nome de usuário com senha na lista suspensa.
  • Digite seu nome de usuário e senha de login do GitLab.
  • Adicione a chave com um ID exclusivo.
Autenticação para o GitLab em Jenkins
Autenticação para o GitLab em Jenkins

Você também precisa especificar as ramificações a serem construídas. Se deixado em branco, todas as ramificações serão examinadas quanto a alterações e construídas.

Adicionar ramificações pode ser feito como: */<branch_name>

Agora, role até Build Triggers , marque a caixa de seleção GitLab webhook URL.

  • Copie a URL do webhook do GitLab. Precisamos configurar o webhook no GitLab novamente, usando este url.
  • Clique em Avançado
  • Gerar como token secreto . Copie este token, ele é usado para definir o webhook no GitLab posteriormente.

Visualização da criação de gatilhos de compilação

Gerando token secreto para GitLab em Jenkins
Gerando token secreto
Token secreto para GitLab em Jenkins
Token secreto

Por fim, role até a guia Build , em Execute SonarQube Scanner , adicione os parâmetros de configuração do SonarQube que são usados ​​pelo scanner SonarQube. Pode incluir SonarQube ProjectName, ProjectKey, local de instalação do SonarQube Scanner, etc.

Scanner SonarQube em Jenkins
Scanner SonarQube em Jenkins

Após todas as configurações serem feitas, precisamos por último configurar o webhook no GitLab.

Webhook é um método para enviar os dados para outros aplicativos em tempo real.
Estamos usando webhook no GitLab para automatizar a entrega de códigos GitLab durante eventos de push ou eventos de mesclagem, conforme especificado.

  • Acesse sua conta Gilab.
  • vá para Seus projetos no menu Projeto .
  • Selecione seu projeto
  • vá para Configurações > Integrações
  • Adicione a URL do webhook e o token secreto que copiamos da guia Jenkins Build Triggers.
  • Selecione os gatilhos desejados e desmarque Verificação SSL .
  • Criar webhook

Visualização da criação do webhook do GitLab:

criando webhook do GitLab
criando webhook do GitLab
desmarque a verificação SSL

Teste o webhook com eventos Push .

Testando os eventos push
Testando os eventos push

Após o teste ser bem-sucedido, o Projeto começa a ser construído em Jenkins. Faça login no Jenkins e verifique as compilações do projeto. Você pode ver os códigos do GitLab em Jenkins Workspaces .

Verifique as compilações do projeto em Jenkins
Verifique as compilações do projeto em Jenkins

Além disso, você pode ver os relatórios de código do projeto no SonarQube.

Relatório de código do projeto no SonarQube
Relatório de código do projeto no SonarQube

É isso! Integramos com sucesso GitLab, Jenkins e SonarQube. Agora, para cada evento push ou mesclar eventos em nosso repositório GitLab, Jenkins criará o projeto e mostrará a qualidade do código no SonarQube.

Espero que este tutorial tenha sido fácil para você seguir. Por favor, deixe-me saber se você tiver alguma dúvida ou sugestão.

 

Autor : Rishi Raj Gautam é um amante do Linux e um ativista de código aberto.

 

Fonte:

- https://linuxhandbook.com/ci-with-gitlab-jenkins-and-sonarqube/


3

Share

Donate to Site


About Author

Renato

Developer

Add a Comment

Blog Search


Categories

OUTROS (16) Variados (109) PHP (133) Laravel (171) Black Hat (3) front-end (29) linux (114) postgresql (39) Docker (28) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (56) devops (25) nodejs (5) npm (3) nvm (1) git (8) firefox (1) react (7) reactnative (5) collections (1) javascript (7) reactjs (8) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (2) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (12) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (5) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (3) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (43) Kubernetes (3) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (2) jwt (5) security (2) translate (1) kube (2) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (3) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (3) Architecture (4) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (2) autorizacao (2) authentication (4) authorization (3) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1) Curisidades (1) Samurai (1) KubeCon (1) GitOps (1) Axios (1) Fetch (1) Deepin (1) vue (4) nuxt (1) PKCE (1) Oauth2 (2) webhook (1) TypeScript (1) tailwind (1) gource (2)

New Articles



Get Latest Updates by Email