Chapter 06Lesson 03~120 minutes

Projects, Tokens, Scanners, Analysis Parameters, and First Analysis: Configuration, Design Patterns, and Trade-Offs

Choose where project identity, analysis settings, scanner integration, and credentials should live so analyses remain reproducible without hidden overrides or excess privilege.

PrecedenceToken designScanner familiesStable identityTrade-offs

Learning objectives

  • Compare global/project UI, scanner configuration, environment, and command-line values.
  • Choose token type/scope/lifetime according to least privilege and automation ownership.
  • Select standalone versus build-system scanners based on where project structure lives.
  • Design stable project keys without coupling identity to builds or branches.
  • Explain asynchronous versus scanner-side Quality Gate waiting.

1. Configuration is an ownership design

The right question is not “where can this property be set?” but “who owns it, how long should it persist, what can override it, and how will a reviewer prove the effective value?” SonarQube deliberately spans durable server configuration and per-run scanner inputs.

2. Documented precedence

Source Relative precedence Persistence Best use
Global UI Lowest Server DB Organization defaults
Project UI Above global Server DB Durable project-specific settings
Scanner/project config Above UI Repository/build configuration Reviewable source/build analysis intent
Environment Property-specific Process/job lifetime Host URL and secret injection where supported
Scanner command line Highest for same property Single run Explicit exceptional override; record it

Current docs also identify global source/test exclusion controls that projects cannot override. Therefore a repository alone is not always enough to reconstruct effective scope.

3. Durable intent versus ephemeral execution

Put stable project/source intent in reviewable repository/build configuration when appropriate. Put organization policy in SonarQube profiles/gates/settings. Put secrets in a controlled secret store or process environment. Use command-line overrides sparingly and include them in the run manifest. A hidden wrapper script that injects -D values is configuration drift even if the repository looks correct.

4. Token scope and lifetime

Choice Advantage Risk Use
Project analysis token Small blast radius Many projects require rotation/ownership discipline Default for one pipeline/project
Global analysis token Operational simplicity across many projects Broad impact if leaked Only justified central automation
User token Can invoke APIs according to issuer permissions May inherit powerful/admin rights Use for API/IDE workflows that need user permissions

Do not treat “short-lived” and “least privilege” as synonyms. A short-lived admin token can still be dangerous; a project token with no owner/rotation plan can still be poor governance.

5. Scanner selection is a build-boundary choice

Scanner Strength Trade-off
CLI Explicit and build-neutral You must model paths/build artifacts yourself
Maven/Gradle Uses build model and module context Coupled to JVM build lifecycle/runtime
.NET Understands MSBuild solution flow Requires correct begin/build/end integration
NPM/Python Ecosystem-oriented entry point Behavior/runtime changes with scanner releases

Chapter 07 covers these integrations in depth. Here, remember that scanner family can change how metadata and scope are derived; migrating scanners deserves before/after evidence.

6. Stable project keys

Use a stable key as machine identity and keep branch names, build numbers, timestamps, and workstation paths outside it. If a naming standard genuinely changes, SonarQube supports changing a project key without discarding history; handle that as a governed migration, not a one-off command-line override.

7. Auto-provisioned versus organization-managed JRE

Model Benefit Operational responsibility
JRE auto-provisioning Scanner obtains a compatible engine runtime Allow/download/cache according to policy; record actual runtime
Provisioning disabled Organization controls certified Java Supply current compatible Java (current guidance requires Java 21+ when provisioning is disabled) and update before deprecations

Scanner runtime requirements are separate from the Java version of the code being analyzed and from the server JVM.

8. Asynchronous analysis versus sonar.qualitygate.wait

Default upload returns before the Quality Gate is necessarily known. Enabling sonar.qualitygate.wait=true makes the scanner poll for server processing and changes the analysis-step failure semantics; sonar.qualitygate.timeout bounds the wait. Use it when your CI design needs that coupling, not as a substitute for understanding CE tasks.

9. Worked choices

Scenario Design Reason
Small Python service CLI + project properties + project token secret env Explicit, least privilege
Maven service Maven scanner + governed project identity + project token Build owns modules/binaries
Central analysis service for hundreds of projects Dedicated automation identity; evaluate global-analysis token with strict rotation/audit Scale may justify wider scope but must be governed

10. Precedence lab

  1. In the disposable project, choose a harmless analysis-scope property.
  2. Set one value at project UI level.
  3. Set another value in project/scanner configuration and predict the winner.
  4. Pass a third value on the command line and predict again.
  5. Verify from scanner indexing/log evidence; revert the UI value afterward.
  6. Record which values persisted in the server and which applied only to the run.

Knowledge check

What generally has the highest precedence?

Why is an admin user token a poor replacement for a project token?

When is a build-system scanner preferable?

What is the risk of routine hidden command-line overrides?

Does sonar.qualitygate.wait=true remove asynchronous CE processing?

Next lesson

Diagnose failures without changing the wrong layer

Lesson 4 intentionally breaks project identity/authorization and applies the evidence-first sequence from revision and parameters through CE and policy.

Official references and version notes

Version and compatibility note

Rechecked on 2026-09-07. Mandatory examples target local/private Community Build 26.9.0.129388 and standalone SonarScanner CLI 8.1.0.6389. JRE auto-provisioning is supported by current Scanner CLI and is enabled by default unless deliberately disabled; when disabled, use the current documented scanner Java requirement rather than legacy guidance. No commercial edition, branch/PR analysis, third-party plugin, IDE connected mode, CI provider, managed database, or cloud account is required.

Keep the academy open

Support free, practical DevOps education.

Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0Send only Ethereum/ERC-20 compatible assets to this address.