Configurando varreduras do SonarQube
O SonarQube fornece uma visão geral do funcionamento geral e da qualidade do seu código-fonte e destaca os problemas encontrados no novo código. Os analisadores de código detectam erros difíceis, como desreferência de ponteiro nulo, erros lógicos e fugas de recursos, em mais de 20 linguagens de codificação.
Configure o SonarQube para continuamente analisar e medir a qualidade de seu código-fonte:
-
No console IBM Cloud, clique no ícone do menu Ícone
> Automação da plataforma > Cadeias de ferramentas. Na página Cadeias de ferramentas, clique na cadeia de ferramentas para abrir a sua página de Visão geral. Como alternativa, na página Visão Geral do seu app, no cartão Entrega contínua, clique em Visualizar a cadeia de ferramentas. Em seguida, clique em Visão geral.
a. Clique em Incluir uma ferramenta.
b. Na seção Integrações de ferramentas, clique em SonarQube.
-
Digite um nome para essa instância da integração de ferramenta SonarQube.
-
Digite a URL para a instância SonarQube que você deseja abrir ao clicar no cartão SonarQube de sua cadeia de ferramentas.
-
Opcional: Digite o nome de usuário que você usa para se conectar ao servidor SonarQube.
É necessário especificar um nome de usuário somente se você usar uma senha para se conectar ao servidor SonarQube. Se você usar um token de autenticação para se conectar, deixe esse campo vazio.
-
Digite a senha ou o token de autenticação que deseja usar para se conectar ao servidor SonarQube.
-
Se o servidor não puder estar na Internet pública, selecione Advanced (Avançado ). O site IBM Cloud não pode validar os detalhes da conexão que você fornece e determinadas funções que exigem acesso à API desse servidor são desativadas. O pipeline de entrega funciona apenas usando um trabalhador privado que tem acesso de rede a este servidor.
-
Clique em Criar integração.
-
Na página de visão geral da sua cadeia de ferramentas, na placa Ferramentas de terceiros, clique em SonarQube para visualizar o painel para a instância do SonarQube à qual você se conectou.
Incluindo Sonarqube no pipeline de integração contínua
Instância padrão do SonarQube
- Se
sonarqube-configfor configurado comodefault, SonarQube será usado por padrão para varredura. Essa varredura é executada como Docker-Docker.
A instância usada está disponível apenas durante a execução Portanto, não é possível acessar o painel..
-
Por padrão, o pipeline usa a edição da comunidade SonarQube que tem apenas verificações limitadas checks.Many e problemas do ponto de host não são cobertos sob Community Edition.
-
Para verificar se uma vulnerabilidade é verificada na edição da comunidade, consulte encadeamento na pergunta da comunidade Sonarqube
-
A implementação padrão que é a instância do SonarQube community Edition registrada com CISO não é uma edição edition.SonarQube Enterprise Edition é a única edição aprovada pelo ITSS.
Para fazer o download do SonarQube, consulte DownloadsSonarQube
Instância SonarQube no cluster de desenvolvimento
Se sonarqube-config for configurado como cluster, o pipeline criará uma instância do SonarQube durante a execução do pipeline no cluster de desenvolvimento É possível acessar essa instância após o estágio de varredura
estática ser executado com êxito runs.You acessar o painel SonarQube localmente por encaminhamento de porta.
Instância existente do SonarQube
Defina sonarqube-config como custom, para adicionar sua própria instância de SonarQube ao pipeline existente, adicione a integração da ferramenta à cadeia de ferramentas e, em seguida, adicione o parâmetro de integração
da ferramenta SonarQube ao pipeline. Para obter mais informações, consulte Configurando o SonarQube
Servidor Sonarqube com certificado autoassinado
Se sonarqube-config estiver definido como custom para usar um servidor sonarqube existente e o servidor tiver um certificado autoassinado,
para que o scanner sonar se conecte com êxito ao servidor sonarqube, o certificado autoassinado precisará ser adicionado aos certificados CA confiáveis.
Ao fornecer o certificado em um formato PEM (valor secreto codificado em base64 ou texto simples formatado em PEM) como o valor da propriedade pipeline/trigger sonarqube-root-certificate, a configuração será adicionada de acordo
com o uso do SonarScanner para maven, SonarScanner para gradle sonar ou SonarScanner invocado com Docker.
Parâmetros
Para executar a varredura do SonarQube, o pipeline precisa dos parâmetros de integração contínua a seguir:
| Nome | Tipo | Descrição | Obrigatório ou opcional |
|---|---|---|---|
| nome do cluster | Texto | O nome do cluster de construção do Docker. | Obrigatório |
| dev-region | Texto | A região do IBM Cloud que hospeda o cluster. | Obrigatório |
| opt-in-sonar | Texto | A opção para ativar a varredura do sonarQube. | Obrigatório |
| sonarqube | Integração de ferramentas | A integração da ferramenta Sonarqube. | Opcional |
| sonarqube-config | Texto | Executa uma varredura do SonarQube em um contêiner DockernoDocker isolado (configuração padrão) ou em um cluster Kubernetes de desenvolvimento existente (configuração de cluster). Como alternativa, é possível trazer sua própria instância
SonarQube e configurar a integração de ferramenta SonarQube (configuração customizada). Opções: default, cluster ou custom.. O padrão é default. Para obter mais informações, consulte
(Incluindo SonarQube no pipeline de integração contínua). |
Obrigatório |
| opt-in-sonar-pontos de acesso | Texto | A varredura Sonarqube para detectar pontos de acesso. | Opcional |
| opt-in-sonar-quality-gates | Texto | Permitindo que a varredura do Sonarqube detecte falhas no portão de qualidade. | Opcional |
| opt-in-sonar-pr-analysis | Texto | Permitir que a varredura do Sonarqube faça a análise do pull request (essa opção funcionará somente se o PR não for contribuído de um repositório bifurcado). Esse parâmetro é válido somente para App-preview PR pipeline. |
Opcional |
| sonarqube-user-token | Segredo | Passe o token de usuário usado para acesso à API no caso de sonarqube-config definido como custom |
Opcional |
| sonarqube-root-certificate | Texto ou mensagem | No caso de sonarqube-config definido como custom, passe o certificado autoassinado como um texto formatado em PEM ou um segredo codificado em base64 |
Opcional |
Para obter mais informações sobre parâmetros de pipelines, consulte Parâmetros de pipeline.
Se você incluir várias integrações da ferramenta SonarQube em seu pipeline, poderá alternar entre elas mudando o valor do parâmetro sonarqube pipeline, que é um parâmetro de integração de ferramentas.
Plug-ins instalados em SonarQube
DevSecOps Pipelines usa SonarQube versão 10.0 por padrão.
Para saber mais sobre a lista de plug-ins pré-instalados, consulte plug-ins
Problemas relatados em SonarQube
DevSecOps Pipelines filtra os problemas relatados durante a verificação SonarQube. Os pipelines criam exclusivamente incidentes de conformidade para problemas que não são do tipo CODE_SMELL ou BUG. O pipeline também
ignora problemas cujo status é CLOSED.
Ativação da análise de Pull Request no pipeline de PR da visualização do aplicativo
A opção de análise de PR é fornecida no site App Preview PR pipeline se o PR for proveniente do mesmo repositório que o repositório de destino (e não de uma bifurcação). A instância do Sonarqube também deve dar suporte à análise
de RP. As instâncias padrão do sonarqube usadas nos modos cluster e dind não oferecem suporte a esse recurso, pois a análise de solicitação pull está disponível a partir da sonarqube Developer Edition. A variável
de ambiente opt-in-sonar-pr-analysis deve ser adicionada ao pipeline e seu valor não deve estar vazio.
Ativação do processamento de resultados do Quality Gate para um projeto SonarQube
Um Quality Gate em SonarQube é um conjunto de condições que determinam se um projeto atende aos padrões de qualidade de código exigidos. Para saber mais sobre Quality Gates, consulte SonarQube Documentation.
SonarQube o analisador de problemas oferece suporte ao processamento dos resultados do SonarQube Quality Gate e cria problemas se ocorrer uma falha devido a ele. Para permitir o processamento do resultado do Quality Gates, defina a propriedade
de ambiente opt-in-sonar-quality-gates como 1.
Se opt-in-sonar-quality-gates estiver definido como 1 e você estiver usando sua própria instância SonarQube como uma integração
(com sonarqube-config definido como custom), para obter o nome do Quality Gate, você poderá gerar um token de usuário SonarQube com a permissão necessária para acessar a API da Web SonarQube e definir
a propriedade de ambiente do pipeline sonarqube-user-token com o token como um valor secreto. Para obter detalhes sobre a permissão de token necessária, consulte SonarQube token permission.
Se você usar a instância SonarQube que o pipeline criou ou uma integração personalizada da ferramenta SonarQube, siga as etapas abaixo para navegar pelo painel SonarQube:
-
Acesse o painel do SonarQube que foi criado pela URL nos logs de pipeline na tarefa
static-scan.
' PainéisSonarQube -
Por padrão, o portão de qualidade
Sonar wayé associado a qualquer projeto que não esteja explicitamente associado a um portão de qualidade específico. Também podem ser criadas novas portas de qualidade com condições métricas personalizadas.-
Para procurar a lista de Quality Gates no painel, clique em Quality Gate na barra de navegação superior.
SonarQube -
Para criar um novo Quality Gate, clique em Quality Gate na barra de navegação superior e, em seguida, clique em Create (Criar ). Você pode adicionar um nome ao Quality Gate e adicionar/excluir/atualizar as métricas de condição.
-
Para procurar o Quality Gate associado ao projeto, selecione o projeto e clique em Project Settings > Quality Gate.
SonarQube -
Para associar um Quality Gate (que não seja o padrão) a um projeto específico, selecione o projeto e clique em Project Settings > Quality Gate > Always use a specific Quality Gate > Selecione o Quality Gate desejado no menu suspenso > Save
caption-side=bottom"
-
-
Novas varreduras são avaliadas por esta porta de qualidade e evidências são criadas pelos resultados da porta de qualidade. Os problemas são criados com base nas condições que causaram a falha do Quality Gate.
Um exemplo do formato do resultado do status do portão de qualidade que é a resposta da API do Sonarqube:
${SONAR_HOST_URL}/api/qualitygates/project_status?projectKey=${SONAR_PROJECT_KEY}:{ "projectStatus": { "status": "ERROR", "conditions": [ { "status": "ERROR", "metricKey": "new_coverage", "comparator": "LT", "errorThreshold": "80", "actualValue": "0.0" }, { "status": "OK", "metricKey": "new_duplicated_lines_density", "comparator": "GT", "errorThreshold": "3", "actualValue": "0.0" }, { "status": "ERROR", "metricKey": "new_security_hotspots_reviewed", "comparator": "LT", "errorThreshold": "100", "actualValue": "0.0" }, { "status": "ERROR", "metricKey": "new_violations", "comparator": "GT", "errorThreshold": "0", "actualValue": "14" } ], "ignoredConditions": false, "period": { "mode": "PREVIOUS_VERSION", "date": "2025-03-18T09:43:25+0000" }, "caycStatus": "compliant", "additional": { "qualityGateName": "Sonar way", "projectKey": "hello-compliance-app-compliance-check", "dashboardUrl": "http://localhost:9001/dashboard?id=hello-compliance-app-compliance-check" } } }Para saber mais sobre as APIs do SonarQube, consulte a documentação do Sonarqube WebAPI
Um problema é criado para cada chave de métrica com status ERROR, garantindo que cada métrica com falha seja rastreada e tratada individualmente.
Exemplo de problema:
caption-side=bottom"
Exemplo SonarQube evidência reprovada devido à falha do Quality Gate:
{ "id": "abc", "evidence_type_id": "com.ibm.static_scan", "evidence_type_version": "1.0.0", "date": "2025-03-18T11:22:35.086Z", "origin": { }, "details": { "result": "failure", "tool": "sonarqube", "failure_reason": "tool_detected_vulnerabilities" }, "issues": [ "https://github.ibm.com/abcd/compliance-issues-20250310111628285/issues/14", "https://github.ibm.com/abcd/compliance-issues-20250310111628285/issues/15" ], "findings": [ { "id": "Metric: new_coverage", "due_date": "n/a", "severity": "high", "first_found": "2025-03-18", "url": "https://github.ibm.com/abcd/compliance-issues-repo/issues/14", "found_status": "existing", "has_exempt": false, "cvss": "n/a", "package": [] }, { "id": "Metric: new_security_hotspots_reviewed", "due_date": "n/a", "severity": "high", "first_found": "2025-03-18", "url": "https://github.ibm.com/abcd/compliance-issues-repo/issues/15", "found_status": "existing", "has_exempt": false, "cvss": "n/a", "package": [] } ], "attachments": [ { "hash": "d10a1e5d727b4f778a1d70c2ebaa2060251d56dd79", "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/d10a1e5d727b4f778a1d70c2e/content", "label": "app_issues" }, { "hash": "d76d356cc4da1afc942a6259c1222a7b079607ea7e0d64", "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/d76d356cc4da1afc942a6259c1222a7b0/content", "label": "app_hotspots" }, { "hash": "f0f84a2c2210a9c65c8430d577dafdd71bee6df5da", "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/f0f84a2c2210a9c65c8430d577dafdd71bee6e/content", "label": "app_quality_status_updated" } ], "assets": [ { "hash": "1812f77dfc646c93320794810460acd3e53", "uri": "https://github.ibm.com/abcd/compliance-app-20250310111628285.git#7a06e70001a59032d1", "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/assets/1812f77dfc646c93320794810460acd3e/index.json" } ] }
Certifique-se de ativar o opt-in-sonar-quality-gates no CC, caso ele esteja ativado no pipeline de CI. Caso contrário, os problemas do Quality Gate encontrados pelo CC serão autoclavados. No momento, estamos exibindo mensagens
de aviso nos registros referentes a essa inconsistência.
Para saber mais sobre SonarQube,, consulte SonarQube Documentation.
Ativação do processamento do SonarQube Hotspot
Um ponto de acesso do site SonarQube destaca o código sensível à segurança que requer revisão manual para determinar se ele representa um risco real. Ele ajuda os desenvolvedores a se concentrarem em possíveis vulnerabilidades sem gerar falsos positivos. Para saber mais sobre o gerenciamento de Hotspots, consulte SonarQube Documentation.
Para ativar o processamento dos pontos de acesso SonarQube, defina a propriedade de ambiente opt-in-sonar-hotspots como 1.
Se opt-in-sonar-hotspots estiver definido como 1 e você estiver usando sua própria instância SonarQube como uma integração (com
sonarqube-config definido como custom), para buscar os pontos de acesso detectados pelo Sonarqube usando a API da Web, você poderá gerar um token de usuário SonarQube com a permissão necessária
para acessar a API da Web SonarQube e definir a propriedade de ambiente do pipeline sonarqube-user-token com o token como um valor secreto. Para obter detalhes sobre a permissão de token necessária, consulte SonarQube token permission.
-
Para ver os pontos de acesso de segurança detectados pelo SonarQube em um projeto, selecione o projeto e clique em Security Hotspots (Pontos de acesso de segurança ).
SonarQube -
Para revisar os hotspots detectados, selecione o hotspot e clique em Review (Revisar ). Uma janela modal será exibida, permitindo que você defina o Status da revisão como um dos seguintes:
To Review,Acknowledged,FixedeSafe.
SonarQube
Ao ativar o sinalizador opt-in-sonar-hotspots, serão criados problemas quando um Hotspot for detectado por SonarQube e o status de revisão não estiver definido como: Acknowledged, Fixed e Safe.
Um exemplo do formato de resultado de hotspots que é a resposta da API SonarQube:${SONAR_HOST_URL}/api/hotspots/search?projectKey=${SONAR_PROJECT_KEY}&p=$page&status=TO_REVIEW"
{
"hotspots": [
{
"key": "AYLD_a1_Hqacjdg4wbDR",
"component": "hello-compliance-app-compliance-check:index.js",
"project": "hello-compliance-app-compliance-check",
"securityCategory": "others",
"vulnerabilityProbability": "LOW",
"status": "TO_REVIEW",
"line": 74,
"message": "Make sure disabling content security policy frame-ancestors directive is safe here.",
"author": "abc@1.com",
"creationDate": "2022-04-01T06:29:13+0000",
"updateDate": "2022-08-22T05:18:31+0000",
"textRange": {
"startLine": 74,
"endLine": 84,
"startOffset": 0,
"endOffset": 1
},
"flows": [
{
"locations": [
{
"component": "hello-compliance-app-compliance-check:app.js",
"textRange": {
"startLine": 76,
"endLine": 82,
"startOffset": 4,
"endOffset": 5
}
}
]
}
],
"rule": {
"key": "javascript:S5732"
}
}
]
}
Caso um hotspot de status To Review seja encontrado no resultado da API acima, uma evidência de falha é coletada, incluindo informações sobre o hotspot na seção findings.
Exemplo SonarQube falha na evidência devido à detecção de Hotspot:
{
"id": "62fc60140b2a761a969c6ad4f64d93d9c0f8f2301b1",
"evidence_type_id": "com.ibm.static_scan",
"evidence_type_version": "1.0.0",
"date": "2025-03-18T10:29:00.896Z",
"origin": {
},
"details": {
"result": "failure",
"tool": "sonarqube",
"failure_reason": "tool_detected_vulnerabilities"
},
"issues": [
"https://github.ibm.com/abcd/compliance-issues-20250310111628285/issues/13"
],
"findings": [
{
"id": "javascript:S4426",
"due_date": "n/a",
"severity": "high",
"first_found": "2025-03-18",
"url": "https://github.ibm.com/abcd/compliance-issues-20250310111628285/issues/12",
"found_status": "new",
"has_exempt": false,
"cvss": "n/a",
"package": []
},
{
"id": "Hotspot: javascript:S2068",
"due_date": "n/a",
"severity": "high",
"first_found": "2025-03-18",
"url": "https://github.ibm.com/abcd/compliance-issues-20250310111628285/issues/13",
"found_status": "new",
"has_exempt": false,
"cvss": "n/a",
"package": []
},
],
"attachments": [
{
"hash": "e579a1ab8025d280d5870eb8d4464d6d6a41a22",
"url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/e579a1ab8025d280d5870eb8d4464d6d6a41a/content",
"label": "app_issues"
},
{
"hash": "6defa891c320ae2b80ae76d03e168edc2379",
"url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/6defa891c320ae2b80ae76d03e168edc2379748d9/content",
"label": "app_hotspots"
},
{
"hash": "060a60e2d693427cde6064f72743ebb9e1d6",
"url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/060a60e2d693427cde6064f72743ebb9e1d/content",
"label": "app_quality_status_updated"
}
],
"assets": [
{
"hash": "d7391b3273e5e52852f293031d62b9",
"uri": "https://github.ibm.com/abcd/compliance-app-20250310111628285.git#4eadaaf7454b8cb0edad927",
"url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/assets/d7391b3273e5e52852f293031d62b9bf0/index.json"
}
]
}
Certifique-se de ativar o opt-in-sonar-hotspots no CC, caso ele esteja ativado no pipeline de CI. Caso contrário, os problemas de hotspot encontrados pela CC serão autoclavados. No momento, estamos exibindo mensagens de aviso
nos registros referentes a essa inconsistência.
Permissões para o token SonarQube
No caso de usar a instância existente do SonarQube e para publicar com êxito o registro de teste no Devops Insights e obter o nome do Quality Gate para um projeto, precisamos criar um token de usuário com as permissões necessárias
e defini-lo como um valor secreto na propriedade env sonarqube-user-token para fornecer permissão para acessar os pontos de acesso Sonarqube necessários.
Para criar o token de usuário, abra o SonarQube Dashboard > clique na imagem do seu perfil no canto superior direito > selecione My Account > selecione Security > no menu suspenso Type, selecione User Token > clique em Generate
-
O plug-in Devops Insights faz as seguintes chamadas de API para o servidor Sonarqube, conforme indicado abaixo:
-
GET api/qualitygates/project_status
Requer uma das seguintes permissões:
- 'Administrar sistema'
- direitos de "administrador" no projeto especificado
- "Procurar" no projeto especificado
- "Executar análise" no projeto especificado
-
Requer a permissão "Browse" no(s) projeto(s) especificado(s). componente.
-
Requer a permissão "Browse" no(s) projeto(s) especificado(s).
-
Requer uma das seguintes permissões:
- "Administrar" em nível global ou de projeto
- "Executar análise" em nível global ou de projeto
-
-
Para obter o nome do Quality Gate, o ponto de extremidade SonarQube abaixo é acessado:
-
GET api/qualitygates/get_by_project
Requer uma das seguintes permissões:
- 'Administrar sistema'
- direitos de "administrador" no projeto especificado
- "Procurar" no projeto especificado
-
-
Para obter os pontos de acesso detectados pelo SonarQube, o ponto de extremidade SonarQube abaixo é acessado:
-
Requer a permissão "Browse" no(s) projeto(s) especificado(s).
-
Para obter mais informações sobre as permissões de acesso à API da Web SonarQube, consulte a documentação da API da Web SonarQube
Usando o seu próprio arquivo de configuração
É possível modificar a configuração padrão sem usar a sua própria instância do SonarQube. Crie um arquivo sonar-project.properties no repositório em que você deseja criar o arquivo de configuração. Se o nosso script detectar um
arquivo de configuração configuration sonar-project.properties existente no repositório, ele usará esse arquivo em vez do arquivo padrão. Para obter mais informações sobre os possíveis parâmetros de análise no arquivo de configuração,
consulte Parâmetros de análise aqui.
Se sonar.branch.name for adicionado ao arquivo sonarqube-project.properties, ele será definido como a propriedade de ambiente sonar-branch-name como valor padrão; caso contrário, o nome do ramo disponível
em load_repo <app-name> branch será levado em consideração. Para obter mais informações, consulte a documentação do Branch Analysis.
Certifique-se de incluir as credenciais de login e a URL do host corretas no arquivo de configuração.
Usando outra implementação de varredura estática
É possível modificar seu arquivo .pipeline-config.yaml para incluir seu próprio script customizado no estágio static-scan para usar a sua própria implementação de varredura estática.
Saiba mais sobre o SonarQube
Para saber mais sobre o SonarQube,, consulte Integrar a análise do SonarQube em sua cadeia de ferramentas.