Find the Best Cosmetic Hospitals

Explore trusted cosmetic hospitals and make a confident choice for your transformation.

“Invest in yourself — your confidence is always worth it.”

Explore Cosmetic Hospitals

Start your journey today — compare options in one place.

Develocity: The Complete Beginner-to-Advanced Tutorial

A practical self-study course covering Developer Productivity Engineering, Build Scan, Build Cache, build acceleration, test optimization, architecture, deployment, integrations, security, and enterprise operations.

28 chapters | Beginner to advanced | Hands-on labs

About this course

This tutorial teaches Develocity from the ground up. You do not need prior experience with Develocity, Gradle, build optimization, or Developer Productivity Engineering.

You will learn how software builds work, why they become slow and unreliable, how Develocity observes and accelerates them, and how to apply its capabilities in real development and Continuous Integration/Continuous Delivery (CI/CD) environments.

Technical verification: October 28, 2026.

The official sources confirm:

ComponentVerified version or status
Develocity platform2026.3 release family
Latest documented server patch2026.3.3
Develocity Gradle plugin4.6.1
Develocity Maven extension2.6.1
Free learning optionPublic Build Scan service
Private enterprise deploymentManaged service or licensed self-hosted installation
Supported build integrationsGradle, Maven, sbt, Bazel, npm, Python, and Docker, with integration-specific capabilities

Develocity 2026.3 was released on September 24, 2026. The Gradle plugin and Maven extension versions above were released on October 20, 2026.

Important distinction: The free public Build Scan service is excellent for learning, but it is not a free self-hosted Develocity server. The main labs use a local computer and a public sample project. Enterprise deployment exercises require access to a licensed or trial instance.

Part I — Understand the World Before the Tool

Chapter 1. The Big Picture

1.1 The problem: Why does software take so long to build?

Imagine a software development team building an Android application.

The application contains hundreds of thousands of lines of code. Developers regularly change source files, add libraries, fix defects, and run automated tests.

Before they can verify the application, several activities must happen:

  1. Source code must be compiled into executable form.
  2. External libraries must be downloaded or located.
  3. Application resources must be processed.
  4. Automated tests must execute.
  5. Application packages must be assembled.
  6. Build results must be reported.

These activities collectively form a software build process.

A small application might build in seconds. A large application can take many minutes, especially when it includes multiple modules, extensive tests, or expensive toolchains.

The problem becomes significant when builds run hundreds or thousands of times per day.

1.2 A relatable analogy

Imagine a restaurant preparing the same meal for 100 customers.

Without an efficient process, the kitchen repeatedly washes, cuts, and prepares identical ingredients for every order.

A smarter kitchen would prepare reusable ingredients once, organize cooking steps, and identify where delays occur.

Software development has similar opportunities.

Restaurant activitySoftware equivalent
IngredientsSource code, libraries, configuration
RecipeBuild configuration
Cooking stepsCompilation, testing, packaging
ChefBuild tool
Prepared ingredientsCached build outputs
Kitchen performance reportBuild Scan
Kitchen manager improving the processDeveloper Productivity Engineer

The analogy has limits: unlike cooking, software build outputs can often be reused exactly when the relevant inputs and execution conditions match.

1.3 What happens in a typical software development environment?

YesNoDeveloper changes codeBuild tool startsResolve dependenciesCompile source codeRun automated testsTests pass?Package applicationBuild succeedsBuild failsDeveloper investigates

The developer must investigate when something fails. Traditional console logs help, but they often make it difficult to understand the underlying cause.

The build might fail because of a missing dependency, incompatible compiler, incorrect configuration, test failure, network problem, or resource exhaustion.

Without detailed observability, engineers may spend significant time trying to reproduce failures.

1.4 Why traditional solutions are insufficient

Historically, developers relied on:

  • Terminal output and log files.
  • Local build reports.
  • Manual comparisons between successful and failed builds.
  • CI job histories.
  • Scripted performance measurements.
  • Build tools’ built-in caching mechanisms.

These mechanisms remain useful.

However, they do not always provide a centralized, searchable history of build behavior across developers, machines, and CI environments.

A developer might discover that a build takes 12 minutes on their laptop but only 4 minutes in CI, without knowing which tasks, dependencies, or environmental differences explain the gap.

1.5 Where Develocity fits

Develocity is designed to make software build and test execution more observable, efficient, and reliable.

It can help engineering teams:

  • Investigate build and test failures.
  • Understand where build time is spent.
  • Share build diagnostic information.
  • Reuse previous build outputs.
  • Analyze historical build performance.
  • Identify flaky tests.
  • Optimize test execution.
  • Improve build infrastructure efficiency.

This engineering discipline is commonly called Developer Productivity Engineering (DPE).

DPE treats developer productivity as an engineering problem that can be investigated and improved using evidence rather than assumptions.

What You Should Understand Before Moving On

A build is a sequence of activities that transforms source code into tested software artifacts. Problems arise when those activities are slow, repetitive, unreliable, or difficult to diagnose.

Develocity helps teams understand and improve this process, but it does not replace the build tools performing the work.

Chapter 2. Prerequisite Concepts

Before learning Develocity, you must understand the following concepts.

ConceptSimple meaningAnalogyImportance
Source codeHuman-written application instructionsRecipeEssential
CompilerConverts source code into another executable representationCooking equipmentEssential
Build toolAutomates build activitiesKitchen workflow managerEssential
DependencyExternal software required by a projectIngredients purchased from suppliersEssential
Build taskOne defined unit of build workChop vegetablesEssential
Build artifactOutput produced by the buildFinished mealEssential
Automated testSoftware that checks expected behaviorQuality inspectionEssential
CacheStores reusable resultsPrepared ingredientsEssential
Build ScanDiagnostic record of a buildKitchen activity reportEssential
CI/CDAutomated integration and software delivery workflowsAutomated production lineHelpful
Build agentComputer executing build jobsKitchen workstationHelpful
ObservabilityAbility to understand system behavior from evidenceKitchen monitoringEssential
Deterministic executionSame relevant inputs produce the same outputsRepeatable recipeEssential for caching
Distributed executionWork runs across multiple computersSeveral kitchens sharing workAdvanced

2.1 What is a build tool?

A build tool automates activities needed to produce a working application.

Common examples include:

  • Gradle — widely used for Java, Kotlin, Android, and other software projects.
  • Apache Maven — widely used for Java projects.
  • Bazel — used for builds involving large, frequently changing codebases.
  • sbt — commonly used with Scala projects.

For example, running the following command in a suitable Gradle project asks Gradle to execute the tasks associated with building the project.

./gradlew build

Here:

  • ./ means run the file in the current directory on Unix-like systems.
  • gradlew is the Gradle Wrapper script.
  • build is the requested task.

The Gradle Wrapper allows projects to specify and download a particular Gradle version instead of relying on whatever version happens to be installed globally.

2.2 What is a software dependency?

Suppose your application uses an external library to process JSON.

Rather than implementing JSON processing yourself, your application declares a dependency on that library.

The build tool resolves the dependency, normally by downloading it from a repository.

A repository is a storage service containing published software packages.

Examples include Maven Central and private artifact repositories.

2.3 What is caching?

Consider a task that compiles 100 source files.

If none of its relevant inputs has changed, compiling them again may be unnecessary.

A build cache stores previously generated outputs so they can be reused.

YesNoBuild task requestedCalculate cache keyMatching cache entry?Restore outputsExecute taskStore eligible outputsContinue build

A cache key is an identifier calculated from information relevant to the result of a task, such as its implementation and declared inputs.

If the information matches a previous execution, eligible outputs may be reused.

But not every task is cacheable. A task that depends on undeclared files, current time, external state, or nondeterministic behavior may produce incorrect cached results.

2.4 Four concepts beginners commonly confuse

ConceptWhat it doesWhen useful
Incremental buildProcesses only the inputs that need updatingSmall source-code changes
Up-to-date checkingSkips a task when existing local outputs are still validRepeated build in the same workspace
Build CacheRestores outputs produced by a previous compatible executionClean builds, other workspaces, CI
Configuration CacheReuses Gradle’s configuration result where compatibleReducing repeated build setup time

These features are related but not interchangeable.

Develocity adds diagnostic visibility and distributed acceleration around supported build systems. Many of the underlying caching principles already exist in the build tools themselves.

2.5 Why is observability important?

A build log might tell you that a task took 45 seconds.

A more detailed analysis could help determine whether the delay came from compilation, configuration, dependency resolution, waiting for resources, or cache operations.

This distinction matters because each cause requires a different solution.

Making a task cacheable will not necessarily solve a slow dependency download. Adding CPU may not solve a network bottleneck.

The objective is to find the actual problem before changing the system.

Chapter 3. Essential Terminology and Glossary

TermFull form, if applicableSimple meaningExampleWhy it matters
DPEDeveloper Productivity EngineeringEngineering practices for improving development efficiencyReducing CI delaysCore domain
Build ScanProduct nameDetailed diagnostic record of one buildA failed build reportTroubleshooting
Build Cache—Reusable build outputsCached Java compilationPerformance
Local Cache—Cache stored on one computerGradle user-home cacheLocal acceleration
Remote Cache—Cache shared over a networkEnterprise build cacheCross-machine reuse
Task—Unit of build workcompileJavaPerformance analysis
Goal—Maven execution unitcompiler:compileMaven analysis
Cache Hit—Requested cached result existsOutput restoredPerformance
Cache Miss—Requested result is unavailable or unsuitableTask executesOptimization
Cacheability—Whether a task can safely reuse outputsCacheable compiler taskCorrectness
CIContinuous IntegrationAutomated building and testing of changesGitHub ActionsAutomation
CDContinuous Delivery or DeploymentAutomated software release preparation or deploymentRelease workflowDelivery
Flaky Test—Test with inconsistent results under apparently equivalent conditionsSometimes passes, sometimes failsReliability
Test Distribution—Runs supported tests across multiple agentsParallel test executionAcceleration
PTSPredictive Test SelectionChooses tests likely to be relevant to code changesTesting modified componentsAcceleration
JVMJava Virtual MachineRuntime environment used by Java and many JVM languagesRunning GradleCompatibility
JDKJava Development KitTools for compiling and running Java softwareJDK 21Installation
HTTPSHypertext Transfer Protocol SecureEncrypted web communicationSecure Develocity URLSecurity
TLSTransport Layer SecurityProtocol protecting network communicationServer certificateSecurity
APIApplication Programming InterfaceInterface used by software to communicate with softwareQuerying build dataIntegration
RBACRole-Based Access ControlPermissions assigned through rolesDeveloper vs administratorSecurity
SSOSingle Sign-OnCentralized user sign-inEnterprise identity providerAuthentication
Kubernetes—Platform for operating containerized applicationsHosting DevelocityDeployment
Helm—Kubernetes application package managerInstalling Develocity chartOperations
EdgeProduct componentDistributed caching component near build agentsRegional cache deploymentPerformance

The terminology will appear throughout the course. Learn the first ten concepts before moving to advanced deployment topics.

Chapter 4. How Software Builds Work Without Develocity

4.1 A traditional development workflow

Consider a team using GitHub, Gradle, and a CI platform.

A developer changes application code and pushes it to a repository.

The CI system downloads the project, starts a build, downloads necessary dependencies, compiles the application, runs tests, and packages the output.

DeveloperGit repositoryCI workflowBuild agentGradle or MavenDependency repositoryCompilationTestsApplication artifactConsole logsManual troubleshooting

The arrows describe the following sequence:

  1. The developer submits code.
  2. The repository triggers the CI workflow.
  3. The CI platform allocates a build agent.
  4. The build tool resolves dependencies.
  5. Compilation and tests run.
  6. The build produces artifacts and logs.
  7. Engineers investigate the logs when something goes wrong.

4.2 What makes builds slow?

Build duration depends on multiple factors.

Source of delayExampleTypical investigation
CompilationLarge Java moduleTask duration
Dependency resolutionSlow artifact repositoryNetwork and dependency timing
TestingThousands of automated testsTest-duration breakdown
ConfigurationExpensive Gradle pluginsConfiguration-phase timing
HardwareCPU or memory contentionResource utilization
CachingRepeated execution of reusable workCache hits and misses
NetworkHigh-latency remote servicesRequest timing
CI environmentEvery build starts on a clean runnerCache availability

4.3 Why faster hardware is not always the answer

Suppose a build takes ten minutes:

  • Two minutes resolving dependencies.
  • Four minutes compiling.
  • Three minutes testing.
  • One minute packaging and other work.

Buying a larger machine might accelerate compilation, but it may not substantially improve slow dependency downloads.

Likewise, caching a compilation task might reduce execution time without eliminating expensive test execution.

The correct optimization depends on knowing where time is spent and which work can safely be avoided.

4.4 The measurement principle

Build optimization should follow a continuous engineering loop:

YesNoMeasureIdentify bottleneckForm hypothesisMake one changeMeasure againImproved?Keep and monitorReconsider

This cycle is important independently of Develocity.

A performance optimization is meaningful only if its effect can be measured, validated, and maintained.

Part I outcome: You now understand the underlying problem. The next step is to learn how Develocity helps engineers investigate and improve build execution.

Part II — Understand Develocity

Chapter 5. What Is Develocity?

5.1 The simplest definition

Develocity is a software build and test observability and acceleration platform.

It helps software engineering teams understand build execution, troubleshoot failures, analyze performance, and avoid unnecessary work.

Develocity is developed commercially by Gradle, Inc., which now also uses the Develocity brand.

5.2 Beginner-friendly explanation

Suppose you have a CI pipeline that frequently takes 20 minutes.

You want to know:

  • Why does it take 20 minutes?
  • Which parts are slow?
  • Are the same tasks unnecessarily executed repeatedly?
  • Why did yesterday’s build fail?
  • Why does the build succeed locally but fail in CI?
  • Can some tests be avoided or distributed?
  • Are developers experiencing the same problems?

Develocity helps answer these questions by collecting and analyzing information from supported build tools.

5.3 Technical definition

Develocity is an integrated platform for ingesting, storing, analyzing, and presenting build and test execution telemetry, with associated services for build caching, test acceleration, and developer productivity optimization.

The platform interacts with supported build tools through plugins, extensions, and agents.

5.4 Is Develocity the same as Gradle?

No. This distinction is fundamental.

Gradle Build ToolDevelocity
Executes build tasksObserves and analyzes build executions
Compiles and packages applicationsCollects and presents diagnostic information
Runs supported test tasksAnalyzes results and execution behavior
Provides built-in local cachingProvides centralized and distributed caching capabilities
Open-source build automation toolCommercial platform with a free public Build Scan service
Can work independentlyRequires compatible build integrations for build telemetry

You can use Gradle without Develocity.

You can also use Develocity with other supported build systems without using Gradle as your build tool.

5.5 Where does Develocity run?

Develocity has two important sides.

Client side: A plugin, extension, or agent integrates with the build process. The developer or CI runner may be using Windows, macOS, or Linux, subject to the requirements of the particular build integration.

Server side: Develocity operates as a service that collects and analyzes build data. Supported deployment options include managed cloud services and self-hosted Linux/Kubernetes infrastructure.

Its self-hosted server is not a conventional desktop application installed with Homebrew, apt, or a Windows installer.

5.6 What Develocity does not replace

Develocity is not:

  • A source-code management system like Git.
  • A CI orchestrator like Jenkins.
  • A general-purpose compiler.
  • A replacement for Gradle, Maven, or Bazel.
  • A source-code vulnerability scanner.
  • A complete monitoring replacement for Prometheus.
  • A guarantee that all builds are reproducible.
  • A guarantee that every build or test will become faster.

It complements existing tools instead of replacing their core responsibilities.

Chapter 6. Why Does Develocity Exist?

6.1 The cost of slow feedback

Consider a team of 40 developers. Each developer runs 12 builds per working day.

If every build takes 8 minutes: [ 40\times12\times8=3{,}840\text{ build-minutes/day} ]

That represents 64 hours of combined build execution per day.

These are illustrative numbers, not measured Develocity performance data. Builds can run in parallel, and not every minute of build execution is a minute of developer waiting.

But the calculation demonstrates why repeated build work matters.

6.2 Three realistic scenarios

ScenarioWithout DevelocityWith Develocity
CI builds becoming slowerEngineers manually inspect logs and timingsBuild Scan and historical performance data help locate regressions
Different builds of identical codeTeams investigate machine differences manuallyBuild comparison highlights configuration, dependency, input, and environment differences
Repeated compilation across runnersMultiple agents repeat compatible workRemote Build Cache can reuse eligible outputs

6.3 What benefits are realistic?

Develocity can reduce investigation time by making detailed execution data available.

Caching can reduce computation when compatible outputs already exist.

Test Distribution can reduce the elapsed time of suitable test workloads by running work across multiple agents.

Predictive Test Selection can shorten a feedback cycle by executing tests selected as relevant to the change.

However, actual gains depend on workload characteristics, task cacheability, network performance, available agents, and organizational configuration.

6.4 Trade-offs

Develocity also introduces costs and responsibilities:

  • Commercial licensing.
  • Server or managed-service operating costs.
  • Integration and onboarding effort.
  • Storage consumption from build telemetry.
  • Network traffic for Build Scan uploads and cache transfers.
  • Security and access-control responsibilities.
  • Configuration and compatibility management.

An organization should compare these costs against the improvements it actually measures.

6.5 When Develocity is unnecessary

A single developer working on a tiny project might already have fast and reliable builds.

In that environment, Gradle’s built-in diagnostics and local cache may be sufficient.

Similarly, if a project primarily needs source-code quality analysis or application runtime monitoring, Develocity does not directly solve those needs.

Practical rule: Start with a measurable build or test problem, then select the smallest intervention capable of solving it.

Chapter 7. How Develocity Works

7.1 Fundamental operating model

A Develocity integration operates alongside the build tool.

The build still executes through Gradle, Maven, or another supported system.

The integration collects supported diagnostic information and sends it to a Develocity service, where it can be viewed and analyzed.

When caching is configured, supported tasks can also retrieve or store reusable outputs.

YesYesNoNoDeveloper or CIGradle buildDevelocity Gradle pluginExecute build tasksCacheable task?Cached output available?Restore task outputExecute taskStore eligible outputBuild resultCapture build informationDevelocity serverBuild ScanHistorical analyticsTroubleshooting

This is a simplified conceptual diagram. In actual execution, task observation and cache activity happen throughout the build, rather than only after it finishes.

7.2 The main components

ComponentResponsibility
Build toolExecutes build work
Develocity integrationCollects supported build data and integrates acceleration capabilities
Develocity serverReceives, processes, and exposes build information
Build ScanDisplays an individual execution record
Build CacheStores reusable outputs
Develocity EdgeProvides distributed caching close to build clients
DatabaseStores persistent application data
Object storageStores supported persistent build and operational data
Browser interfaceLets users investigate builds
API and MCP servicesEnable supported programmatic and AI-agent access

MCP means Model Context Protocol, a protocol used to expose tools and information to compatible AI applications.

7.3 Understanding a Build Scan

A Build Scan is a record associated with a particular build execution.

It can contain information such as:

  • Build outcome.
  • Build start time and duration.
  • Invoked tasks.
  • Task execution timing.
  • Test results.
  • Build environment information.
  • Dependency details.
  • Build configuration.
  • Console output.
  • Cache activity.
  • Captured performance data.

The amount and type of information depend on the build system, integration version, configuration, and available features.

7.4 Understanding Build Cache

A Build Cache operates differently.

Instead of providing a diagnostic report, it stores outputs that can be reused when a compatible task execution is requested.

For example, imagine two CI runners compiling the same source files with equivalent task inputs.

If the first runner produces a valid cacheable output and stores it in a shared cache, the second runner may restore that output instead of recompiling.

This works only when the relevant inputs, implementation, environment constraints, and cache rules permit safe reuse.

7.5 What happens when Develocity is unavailable?

A Build Scan upload failure is different from a build failure.

A properly configured build can continue executing when telemetry publication cannot reach the server.

Remote-cache availability is another concern. If remote-cache data cannot be retrieved, work may need to execute instead, increasing build duration.

Engineers should monitor both situations, test failure behavior, and ensure that outages do not create unacceptable delays or deployment risks.

7.6 Where state lives

There are different types of state:

  • Source code and project configuration live in the project and its repositories.
  • Local build state and local cache data live on the build machine.
  • Shared cached outputs live in configured remote caching services.
  • Build telemetry and platform configuration are persisted by Develocity.
  • Application data and cache objects may use PostgreSQL, persistent volumes, and object storage.

The important principle is to distinguish the data used to build software from the telemetry describing that build and the reusable outputs produced by it.

Chapter 8. Core Features Explained Simply

Develocity is more than a build-report viewer, but capabilities differ by integration and license.

8.1 Essential and everyday features

FeatureWhat it doesProblem solvedLevel
Build ScanRecords and presents build activityDifficult troubleshootingBeginner
Build timelineVisualizes execution steps and durationsUnknown bottlenecksBeginner
Test resultsDisplays supported test outcomesInvestigating test failuresBeginner
Performance analysisBreaks down build activitySlow buildsBeginner
Build comparisonCompares execution detailsUnexpected differencesIntermediate
Dependency analysisShows resolved dependency informationDependency-related issuesIntermediate
Custom tags and valuesAdds searchable build contextDifficult build identificationIntermediate
Build historyHelps investigate repeated patternsPerformance regressionsIntermediate

8.2 Acceleration features

FeatureWhat it doesExample
Build CacheReuses outputs of compatible workAvoid compiling unchanged inputs
Artifact CacheAccelerates supported artifact retrieval workflowsReduce repeated dependency fetching
Setup CacheReuses eligible build setup stateSpeed up ephemeral CI initialization
Test DistributionDistributes suitable test executionUse additional test agents
Predictive Test SelectionSelects tests likely relevant to a changeFaster pre-merge feedback
Develocity EdgeBrings caching services closer to build clientsRegional CI caching

These features address different types of work. Reusing a compiled output is not the same as caching a downloaded dependency or selecting fewer tests.

8.3 Advanced and enterprise features

FeaturePurpose
Flaky-test analysisInvestigate tests with inconsistent outcomes
Failure analyticsFind recurring build and test failure patterns
Reporting and dashboardsAnalyze execution trends across projects
API integrationRetrieve supported build data programmatically
MCP integrationGive authorized AI agents controlled access to build information
Build Caching OptimizerAnalyze caching problems with AI-assisted workflows
Supply-chain and provenance integrationsSupport artifact traceability and governance
Trusted artifact isolationSeparate trusted and untrusted cached content
SSO and access controlManage enterprise identities and permissions

8.4 Newer integration capabilities and limitations

The modern Develocity ecosystem has extended beyond its original JVM-oriented integrations.

For example:

  • Docker: Develocity 2026.3 introduced Docker Build Scan support through an agent that observes compatible BuildKit image builds. It requires enablement and has specific Docker, Buildx, BuildKit, and Java prerequisites.
  • Python: The Python agent provides Build Scan support for selected Python tool invocations, including pytest results. This integration is in beta and requires enablement.
  • npm: An npm agent captures supported npm build activity and dependency information.
  • AI integration: The Develocity MCP Server exposes supported diagnostic and analytical functionality to authorized AI agents.

The Python and Docker integrations should not be assumed to provide feature parity with Gradle or Maven.

8.5 Licensing and feature availability

Develocity is commercially licensed. Its pricing is organized around commercial packages and deployment models, so not every feature described here is automatically available in every installation.

The platform offers managed and self-hosted options, and its publicly advertised licensing model is based on committers. Specific commercial terms and optional feature entitlements should be confirmed before procurement.

Chapter 9. Similar Tools and Alternatives

Not every build performance tool competes directly with Develocity.

Some provide caching, some provide diagnostic information, and others provide remote execution.

9.1 Comparison

ToolPrimary purposeMain strengthMain limitation relative to DevelocityBest use caseRelationship
DevelocityCross-build observability and accelerationIntegrated build data, caching, and analysisCommercial cost and operational complexityMedium-to-large engineering teamsReference platform
Gradle built-in diagnostics and cacheGradle build optimizationAlready part of GradleLess centralized historical analysisIndividual Gradle projectsComplementary
Gradle ProfilerBuild benchmarkingControlled measurement of Gradle performanceNot a full shared telemetry platformBuild performance experimentsComplementary
BuildBuddyBazel-focused productivity platformBuild results, remote cache, remote executionPrimarily centered on BazelBazel teamsPartial competitor
EngFlowRemote build execution and accelerationDistributed build infrastructureDifferent product emphasis and ecosystem considerationsLarge Bazel-oriented workloadsPartial competitor
Nx CloudJavaScript/TypeScript monorepo CI accelerationRemote task caching and distributed executionDifferent primary build ecosystemNx workspacesEcosystem alternative
Maven-native tools and reportsMaven build and test diagnosticsSimple integration with Maven workflowsNo equivalent unified Develocity experience by defaultSmall Maven projectsComplementary
Public Build Scan serviceFree individual build diagnosticsVery low barrier to entryNo privately owned Develocity server or full enterprise platformLearning and public sample projectsFree entry point

BuildBuddy provides a Bazel-oriented results interface and remote execution capabilities. Nx Cloud provides remote caching and distributed task execution for Nx workflows. Those are useful comparisons, but neither should be described as a drop-in replacement for every Develocity integration.

9.2 Which tool should you choose and why?

For learning: Start with the free public Build Scan service and Gradle’s built-in caching.

For a small Gradle project: First evaluate Gradle’s native –profile, –info, task reports, and Build Cache. Add more sophisticated tooling only when it solves a demonstrated need.

For a large Gradle or Maven organization: Develocity becomes more attractive when teams need central historical analysis, shared acceleration, and engineering-wide visibility.

For a Bazel-centric organization: Evaluate Develocity alongside Bazel-focused alternatives such as BuildBuddy and EngFlow, considering remote execution, observability, security, pricing, and operational requirements.

For an Nx monorepo: Nx Cloud is a relevant alternative because it directly integrates with Nx tasks and their caching model.

The best choice depends on your existing build system and the problem you are trying to solve, not a universal product ranking.

Part III — Architecture and Workflows

Chapter 10. Architecture Explained from Simple to Advanced

10.1 Architecture level 1: A single developer

The simplest learning setup is a local project that publishes a Build Scan to the free public service.

HTTPSDeveloper laptopGradle WrapperGradle buildBuild Scan integrationPublic Build Scan serviceBrowser report

What happens:

  1. The developer runs a Gradle build.
  2. The Build Scan integration captures supported information.
  3. The information is uploaded over HTTPS.
  4. The service provides a URL.
  5. The developer opens the diagnostic report.

This setup requires no private Develocity server.

10.2 Architecture level 2: Small-team deployment

Now imagine a team where every developer and CI runner sends build data to one private Develocity installation.

Private DevelocityBuild clientsDeveloper ADeveloper BCI runnerBuild Scan serviceBuild Cache serviceWeb interfacePersistent data

The diagram is simplified: an actual deployment separates database storage, cache content, application services, authentication, and related components.

Advantages: Build records are centralized, teams can investigate one another’s builds according to permissions, and compatible build outputs can be shared.

Responsibilities: The organization must manage authentication, network access, backups, storage, upgrades, and security controls.

10.3 Architecture level 3: Production Kubernetes environment

Develocity’s self-hosted deployment is Kubernetes-based and distributed through Helm charts.

A production architecture may look like this:

Kubernetes environmentEngineering systemsDeveloper laptopsGitHub Actions or JenkinsRegional build agentsDNS and HTTPS ingressDevelocity applicationAuthentication servicesDevelocity EdgeTelemetry and monitoringPostgreSQLObject storageIdentity provider

Not every connection or service shown represents a mandatory direct network path. The diagram illustrates the roles of the major subsystems.

Component responsibilities
ComponentResponsibilityOperational consideration
KubernetesRuns Develocity componentsCluster capacity and availability
HelmManages the installed releaseVersioned, reviewed configuration
IngressRoutes external requestsHTTPS, hostname, access restrictions
PostgreSQLPersists application dataBackups, storage performance
Object storageHolds supported durable dataRetention and access policy
EdgeServes distributed cache workloadsNetwork locality and cache health
Identity providerAuthenticates usersSSO and account lifecycle
MonitoringTracks operational statusAlerts and incident response

10.4 A major architecture consideration: Edge versus legacy Build Cache nodes

Develocity’s documentation states that support for the older standalone Build Cache node component will end after 2026. Versions starting with Develocity 2027.1 will no longer support that component.

Develocity Edge is the recommended migration target.

This matters if you are designing a new enterprise deployment. Rather than introducing legacy components, use the architecture supported by the current Edge documentation.

10.5 How architecture changes as usage grows

An organization might begin with a single installation, then add:

  • Additional caching capacity near CI runners.
  • Managed database services.
  • Object storage.
  • Enterprise authentication.
  • Network segmentation.
  • Monitoring and alerting.
  • Backup and recovery procedures.
  • Project-level access control.

Scaling should follow observed workload and supported vendor architecture, not simply the number of developers.

For example, a cache located far from build agents might create enough network latency to reduce the value of reuse.

Chapter 11. The Complete Workflow

11.1 A normal build

A Gradle build connected to Develocity commonly follows this logical sequence:

  1. A developer or CI runner invokes Gradle.
  2. Gradle loads project configuration.
  3. The Develocity plugin configures its integration.
  4. Gradle determines the tasks needed.
  5. Gradle evaluates task inputs and available cached results.
  6. Eligible cached outputs are restored; remaining tasks execute.
  7. Test results and other supported information are captured.
  8. The build completes successfully or unsuccessfully.
  9. The integration publishes a Build Scan according to its publishing policy.
  10. Engineers inspect the resulting data.

11.2 A typical sequence diagram

BrowserDevelocityBuild CacheGradleBrowserDevelocityBuild CacheGradlealt[Cache hit][Cache miss]DeveloperRun buildConfigure and select tasksLook up eligible task outputReturn cached outputExecute taskStore output if permittedRun remaining tasks and testsPublish Build ScanReturn Build Scan URLShow build result and URLOpen URLRequest Build ScanDisplay diagnosticsDeveloper

This example assumes the cache and Build Scan services are configured and reachable.

A cache hit is not guaranteed merely because a previous build has executed. Task cacheability, input equality, cache permissions, eviction, and the current environment all matter.

11.3 Failure handling

SuccessFailureNoYesYesNoStart buildExecute tasksBuild resultCapture successful buildCapture failure detailsPublish allowed?Finish without Build Scan uploadServer reachable?Publish Build ScanReport upload problemShare report URLInspect local output

A failed build can still produce a useful Build Scan.

That is one of the important advantages of capturing execution data in both successful and unsuccessful builds.

11.4 How to verify workflow success

Check three independent results:

VerificationSuccess condition
Build executionExpected tasks or tests finish with the expected outcome
Build Scan publicationA report URL is produced and the record opens
Cache operationAn eligible task shows the expected cache behavior

These checks prevent a common mistake: assuming that a successful build proves telemetry publication and remote caching are also working.

Chapter 12. Where Develocity Fits into a Larger System

Consider a modern development environment with source control, CI, dependency repositories, artifact registries, and deployment infrastructure.

DeveloperGit repositoryCI pipelineGradle or MavenDependency repositoryBuild and test executionApplication artifactsArtifact registryDeployment platformDevelocity integrationDevelocityShared Build CacheEngineering team

Solid arrows represent build and delivery activity. The dotted line represents the relationship between Develocity and its associated caching infrastructure, rather than an unconditional data transfer.

12.1 Upstream and downstream relationships

Upstream systems provide inputs to the build: Git repositories, source code, build configuration, dependencies, and toolchains.

Downstream systems receive build outputs: artifact registries, container registries, release pipelines, and deployment environments.

Develocity observes and accelerates the supported build process between these systems.

12.2 Integration examples

Develocity can be useful alongside:

  • GitHub Actions, Jenkins, GitLab CI, and other CI platforms.
  • Gradle, Maven, Bazel, and supported build ecosystems.
  • Internal artifact repositories.
  • IntelliJ-based integrated development environments.
  • Enterprise identity providers.
  • Reporting platforms and dashboards.
  • Authorized AI agents using the supported APIs and MCP services.

An integration does not automatically mean that Develocity configures or operates those other systems.

12.3 Responsibility boundaries

A useful operational model is:

TeamTypical responsibility
DevelopersCode, tests, correct task inputs
Build engineersBuild logic, dependencies, cacheability
Platform engineersCI runners, cache topology, deployment
Security engineersCredentials, access policies, data governance
Operations/SREService reliability, monitoring, recovery
Engineering leadershipPerformance objectives and adoption metrics

Develocity provides shared evidence to these teams, but the teams still own the work required to improve their systems.

Part IV — Installation and First Success

Chapter 13. Prerequisites and Environment Preparation

There are two different ways to begin using Develocity, and they have very different requirements.

Path A — Learn locally

Recommended for beginners

Run a Gradle project on your computer and publish Build Scans to the public service.

No Develocity server or commercial license required.

Path B — Enterprise deployment

Advanced

Deploy a licensed Develocity server on supported infrastructure and connect development and CI environments.

Requires a license, infrastructure, and administration.

13.1 Minimum requirements for the local labs

RequirementPurposeMandatory?
Windows, Ubuntu, macOS, or suitable LinuxRuns the development environmentYes
Java Development Kit (JDK)Executes Gradle and compiles JavaYes
GitDownloads the sample repositoryYes for the official quickstart
Internet connectivityDownloads dependencies and publishes Build ScansYes
Terminal or PowerShellExecutes commandsYes
BrowserOpens Build Scan reportsYes
Gradle WrapperRuns the project’s Gradle versionProvided by quickstart
Global Gradle installationCreates entirely new projectsOnly for the later custom-project lab
Develocity commercial licensePrivate server accessNo for public Build Scan labs

Recommended training environment: JDK 21, a modern desktop operating system, Git, and a project-supplied Gradle Wrapper.

Gradle currently requires Java 17 or later to run. JDK 21 is a convenient training choice rather than a universal requirement for every project. Project-specific builds may require another JDK version.

13.2 Local hardware

For a small Java demonstration, a conventional developer laptop with several gigabytes of free memory and storage is generally adequate. A practical recommendation is 8 GB of system RAM or more, although this is a training recommendation, not a Develocity platform minimum.

The local lab does not run a Develocity server.

13.3 Private server requirements

A self-hosted Develocity deployment is a different infrastructure project.

The official standalone installation guidance lists at least 10 CPUs and 24 GiB of memory. For a production Kubernetes installation, the published sizing guidance recommends a larger multi-node environment and additional persistent storage.

Self-hosted Develocity is deployed on supported Linux-based Kubernetes infrastructure using Helm; it is not installed as a native macOS or Windows desktop application.

Production prerequisites include:

  • A valid Develocity license.
  • Compatible Kubernetes and Helm versions.
  • A supported CPU architecture.
  • Working cluster DNS and networking.
  • A hostname and properly configured HTTPS.
  • Database and persistent storage.
  • Sufficient CPU, memory, and storage capacity.
  • Access to required container registries.
  • Administrative access to the intended cluster.
  • Backup, monitoring, and access-control plans.

For cloud infrastructure, use the current compatibility matrix before choosing Kubernetes, PostgreSQL, ingress, or storage versions.

13.4 Network considerations

For the public learning path, your machine needs outbound HTTPS access to download Gradle dependencies and publish Build Scans.

For an enterprise deployment, consider separate connections for:

  1. Developer-to-Develocity traffic.
  2. CI runner-to-Develocity traffic.
  3. Build-cache uploads and downloads.
  4. Server-to-database traffic.
  5. Server-to-object-storage traffic.
  6. Authentication and monitoring integrations.

A Build Scan may contain project and environment information. Do not publish confidential company builds to a public service without authorization.

13.5 Pre-installation checklist

Local lab readiness
  • [ ] I have permission to install developer tools
  • [ ] I know which operating system I am using
  • [ ] I can open a terminal or PowerShell
  • [ ] My Java installation works
  • [ ] Git is available
  • [ ] My network can reach public Gradle services
  • [ ] I will use only non-sensitive example source code

Chapter 14. Installation on Windows, Ubuntu, macOS, and Linux

We will install the development prerequisites first. Afterward, the same official sample project will work across the supported environments.

14.1 Windows

Recommended method: Native Windows PowerShell with a JDK and Git. Windows Subsystem for Linux (WSL) is an alternative when your project requires Linux build behavior.

Step 1 — Open PowerShell

Open Windows Terminal or PowerShell with the permissions needed to install software.

Check whether Java and Git are already installed:

java -version
javac -version
git --version

java runs Java programs; javac compiles Java source files.

If either Java command is not recognized, install a JDK.

Step 2 — Install JDK 21

On Windows systems with Windows Package Manager (winget), run:

winget install EclipseAdoptium.Temurin.21.JDK
Code language: CSS (css)

Temurin is a distribution of OpenJDK.

Close and reopen PowerShell after installation, then verify:

java -version
javac -version

Expected result: both commands display version information for the installed JDK.

If Windows still cannot find Java, check whether the installer added Java to PATH and whether JAVA_HOME points to the JDK installation.

Step 3 — Install Git
winget install Git.Git
Code language: CSS (css)

Open a new PowerShell window and verify:

git --version
Step 4 — Download the sample project
git clone https://github.com/gradle/gradle-build-scan-quickstart.git
cd gradle-build-scan-quickstart
Code language: PHP (php)
Step 5 — Verify Gradle
.\gradlew.bat --version
Code language: CSS (css)

The repository contains a Windows Gradle Wrapper, so a global Gradle installation is not required.

Expected result: Gradle displays its version and runtime information. The first execution might download the project-selected Gradle distribution.

Common Windows issues
ProblemLikely causeSolution
java not recognizedJava missing from PATHReopen PowerShell and inspect JDK installation
JAVA_HOME invalidIncorrect JDK directorySet JAVA_HOME to the actual JDK root
git not recognizedGit not installed or terminal not refreshedInstall Git and reopen PowerShell
Wrapper download failsProxy, TLS, or DNS issueVerify network and proxy configuration
Build fails on an incompatible JDKProject requires another versionFollow the project’s JDK compatibility requirements

The commands above use PowerShell syntax, not Unix shell syntax.

14.2 Ubuntu

The following example assumes an Ubuntu release that provides OpenJDK 21 packages, such as Ubuntu 24.04.

Step 1 — Update package metadata
sudo apt update

This refreshes the package lists.

Step 2 — Install prerequisites
sudo apt install -y openjdk-21-jdk git curl unzip

The packages provide the JDK, Git, HTTP download tooling, and ZIP extraction support.

Step 3 — Verify
java -version
javac -version
git --version
Step 4 — Clone and inspect the quickstart
git clone https://github.com/gradle/gradle-build-scan-quickstart.git
cd gradle-build-scan-quickstart
./gradlew --version
Code language: PHP (php)

The ./gradlew file is the Unix Gradle Wrapper.

If your shell reports permission denied, inspect the file permissions and make sure you obtained the repository normally through Git. The Gradle Wrapper script should have executable permission in the official repository.

For corporate environments, ask your administrator to approve the project and distribution URLs rather than disabling certificate validation.

14.3 macOS

The procedure works on compatible Intel and Apple Silicon Macs, provided the selected JDK distribution supports your hardware.

Step 1 — Check installed tools
java -version
git --version

macOS may prompt you to install the Apple command-line developer tools when Git is not available.

Step 2 — Install a JDK with Homebrew

If Homebrew is already installed:

brew install --cask temurin@21
Code language: CSS (css)

Verify the installed JDK:

/usr/libexec/java_home -V
java -version
javac -version

java_home lists the JDK installations macOS knows about.

If you do not use Homebrew, install Temurin using the official macOS installer from Eclipse Adoptium.

Step 3 — Install Git if needed
brew install git
Step 4 — Clone the example
git clone https://github.com/gradle/gradle-build-scan-quickstart.git
cd gradle-build-scan-quickstart
./gradlew --version
Code language: PHP (php)

Expected result: Gradle version details appear without a Java compatibility error.

14.4 Debian, Fedora, RHEL, Rocky Linux, and AlmaLinux

Use the package system supported by your distribution and release.

For example, on a Fedora release providing OpenJDK 21:

sudo dnf install -y java-21-openjdk-devel git

On Debian-based systems where OpenJDK 21 is available through an approved repository:

sudo apt install -y openjdk-21-jdk git

Do not assume that every Debian or enterprise Linux release includes this exact package version. Confirm package availability first, and use an approved vendor JDK when necessary.

Verify with:

java -version
javac -version
git --version

For Alpine Linux, check the current project and JDK compatibility requirements before choosing a musl-based environment. The beginner labs do not require Alpine.

14.5 Operating-system comparison

PlatformJava installation exampleGradle executionNative private server
WindowsTemurin installer or winget.\gradlew.batNo
UbuntuOpenJDK packages./gradlewOn supported Linux/Kubernetes infrastructure
macOSTemurin installer or Homebrew./gradlewNo
Fedora/RHEL familySupported OpenJDK packages./gradlewOn compatible Linux/Kubernetes infrastructure
Debian familySupported OpenJDK distribution./gradlewOn compatible Linux/Kubernetes infrastructure

The operating system of a developer laptop does not need to match the operating system of the private Develocity server.

14.6 Advanced installation: A private Develocity server

This is an enterprise-only procedure. It is not required for any free learning lab.

Before proceeding, obtain the appropriate Develocity license, select a supported Kubernetes platform, configure DNS and HTTPS, and follow the official sizing and storage guidance.

A minimal illustrative Helm values file has this structure:

<em># values.yaml</em>
global:
  hostname: develocity.example.com

database:
  location: embedded

ingress:
  enabled: true
Code language: PHP (php)

Replace develocity.example.com with a hostname you control.

This file is not a production configuration. In particular, enabling ingress does not automatically create a trusted TLS certificate or establish all necessary networking and security settings.

On a workstation authenticated to the intended Kubernetes cluster, add the official Helm repository:

helm repo add gradle https://helm.gradle.com/
helm repo update gradle
helm search repo gradle/gradle-enterprise
Code language: JavaScript (javascript)

Confirm your current Kubernetes context:

kubectl config current-context
kubectl get nodes
Code language: JavaScript (javascript)

The first command identifies the selected cluster. Never run a Helm installation without checking the context.

After preparing the license file and all required infrastructure, the documented installation pattern is:

helm install \
  --create-namespace \
  --namespace develocity \
  ge gradle/gradle-enterprise \
  --values values.yaml \
  --set-file global.license.file=./develocity.license
Code language: JavaScript (javascript)

The license filename is an example placeholder for the actual file received from the vendor.

This command modifies the Kubernetes cluster, creates resources, and may incur infrastructure charges. It must be run only with appropriate authorization.

Check the deployment:

helm --namespace develocity list
kubectl --namespace develocity get pods
Code language: JavaScript (javascript)

Expected result: The release is listed and the application pods eventually report healthy or ready status.

If the pods remain unready, investigate the deployment, database, storage, image pulls, and application logs before attempting a reinstall.

The chart and installation guidance are maintained in the official Develocity documentation. Self-hosted deployments should pin and review compatible versions instead of blindly adopting the latest chart.

Chapter 15. Your First Working Build Scan

Lab 1 · Beginner · Local computer · No private server required

15.1 Objective

Build a sample Java application and publish your first Build Scan.

You will use the official Gradle Build Scan quickstart repository, which already contains the necessary Gradle integration.

15.2 What you will produce

At the end of the exercise, you should have:

  • A successful local Java build.
  • A terminal message containing a Build Scan URL.
  • A browser report showing that build.
  • A basic understanding of the report sections.

15.3 Step 1 — Download the project

macOS/Linux:

git clone https://github.com/gradle/gradle-build-scan-quickstart.git
cd gradle-build-scan-quickstart
Code language: PHP (php)

Windows PowerShell:

git clone https://github.com/gradle/gradle-build-scan-quickstart.git
cd gradle-build-scan-quickstart
Code language: PHP (php)

15.4 Step 2 — Run the build with Build Scan enabled

macOS/Linux:

./gradlew build --scan

Windows PowerShell:

.\gradlew.bat build --scan
Code language: CSS (css)

The command has three important parts:

PartMeaning
gradlewRuns the project-selected Gradle version
buildExecutes the project’s build lifecycle
‘–scanRequests publication of a Build Scan

On first use, Gradle may download its distribution, plugins, and project dependencies.

When asked, review and accept the public Build Scan service’s terms only if you agree to them.

15.5 Step 3 — Identify the output

Successful output will resemble:

BUILD SUCCESSFUL

Publishing build scan...
https://gradle.com/s/EXAMPLE_BUILD_SCAN_ID
Code language: JavaScript (javascript)

The URL shown above is illustrative. Your build generates its own unique URL, possibly using a newer service domain or redirect.

The public service may require email-based activation or verification before you can view the report.

15.6 Step 4 — Open the Build Scan

Open the generated URL in a browser.

Explore the information available for the build:

  1. Summary: Did the build succeed? How long did it take?
  2. Timeline: Which stages consumed time?
  3. Tasks: Which tasks executed, were skipped, or reused outputs?
  4. Tests: Which tests ran and what were their outcomes?
  5. Dependencies: What external components did the project resolve?
  6. Environment: Which Gradle, Java, and operating-system details were captured?

Exact navigation labels can vary by the service and integration version.

15.7 Step 5 — Run the build again

macOS/Linux:

./gradlew build --scan

Windows:

.\gradlew.bat build --scan
Code language: CSS (css)

Compare the second Build Scan with the first.

You may notice that tasks are now marked UP-TO-DATE, indicating that Gradle found no reason to repeat their work.

The second build may also avoid downloading dependencies because they are already available locally.

15.8 Step 6 — Observe a failed build

Using a code editor, open:

src/main/java/example/Example.java

Introduce a temporary Java syntax error, for example by removing a required semicolon from an existing valid statement.

Run the same build command again.

Expected result:

BUILD FAILED

The build may still publish a Build Scan with useful failure information.

Open that scan and locate the compilation failure.

15.9 Step 7 — Restore the project

Because the quickstart project was freshly cloned, you can discard your own temporary change to the demonstration file.

git restore src/main/java/example/Example.java

The same Git command works in Windows PowerShell.

Be aware that git restore discards uncommitted changes to the specified file. Do not use it on files containing work you want to preserve.

Run the build again and confirm that it succeeds.

15.10 Verification checklist

  • [ ] The first build succeeded.
  • [ ] The console displayed a Build Scan URL.
  • [ ] The URL opened in a browser.
  • [ ] You identified task execution information.
  • [ ] You observed a failed build and its report.
  • [ ] You restored the code and built successfully again.

Lab success criterion: You can independently create, open, and interpret a Build Scan for both a successful and a failed Gradle build.

Part V — Commands, Configuration, and Daily Usage

Chapter 16. Essential Commands and Operations

Develocity does not have one universal command-line interface for every build ecosystem. Most day-to-day usage happens through the existing build tool and its Develocity integration.

16.1 Gradle command reference

The following commands assume you are in a Gradle project with a compatible wrapper.

CommandWhat it doesWhen to useWarning
./gradlew –versionDisplays Gradle version and runtimeVerify setupNone
./gradlew tasksLists available tasksLearn project operationsSome builds configure extensively
./gradlew buildRuns the build lifecycleNormal developmentDepends on project build logic
./gradlew build –scanBuilds and requests a Build ScanTroubleshootingMay publish project information
./gradlew test –scanExecutes tests with diagnostic captureTest investigationDepends on test task configuration
./gradlew build –infoEnables more detailed loggingDiagnose executionMay reveal sensitive details in logs
./gradlew build –stacktracePrints failure stack tracesDiagnose errorsCan produce extensive output
./gradlew build –build-cacheEnables Gradle Build Cache for the invocationCache experimentsTask behavior still depends on cacheability
./gradlew clean build –build-cacheRemoves build outputs, then rebuilds with cachingCompare cache reuseclean deletes generated build outputs
./gradlew build –no-build-cacheBuilds without Gradle task-output cachingIsolate cache effectsUsually slower
./gradlew build –configuration-cacheRequests configuration cachingDiagnose setup overheadPlugins/build logic must be compatible
./gradlew cleanDeletes generated project build outputsClean-build testCan remove outputs you still need

On Windows PowerShell, substitute .\gradlew.bat for ./gradlew.

16.2 Understand task outcome labels

OutcomeWhat it means
SUCCESSTask executed successfully
FAILEDTask execution failed
UP-TO-DATELocal outputs are considered current
FROM-CACHEGradle restored outputs from a cache
NO-SOURCETask had no relevant source inputs
SKIPPEDTask did not execute due to skip conditions

The task outcomes are particularly useful when deciding whether to optimize compilation, improve incremental execution, or enable caching.

16.3 Using the Develocity user interface

Most interactive investigation happens in the browser.

A practical exploration sequence is:

  1. Open the Build Scan URL.
  2. Read the build outcome and total duration.
  3. Inspect the build timeline.
  4. Open the task execution details.
  5. Inspect test failures and logs.
  6. Review relevant environment and dependency information.
  7. Compare with another build when supported.
  8. Share the Build Scan link with an authorized teammate.

For a private installation, the available navigation depends on permissions, license entitlements, and server version.

16.4 Commands for administrators

These operate on a Kubernetes installation rather than an individual development project.

kubectl --namespace develocity get pods
helm --namespace develocity list
helm --namespace develocity history ge
Code language: JavaScript (javascript)

Their purposes are:

  • get pods: inspect Kubernetes workloads.
  • helm list: display installed Helm releases.
  • helm history: inspect release revisions.

For deeper troubleshooting, you can inspect a selected pod:

kubectl --namespace develocity describe pod POD_NAME
kubectl --namespace develocity logs POD_NAME
Code language: PHP (php)

Replace POD_NAME with a real pod name obtained from kubectl get pods.

Be careful when sharing logs because they may contain operational or sensitive information.

16.5 A newer Gradle capability: Publish without changing the project

For Gradle 9.5.0 and later, the current documentation describes a command-line integration that can publish a Build Scan to a Develocity server without editing the project’s build scripts.

./gradlew assemble --develocity-url https://develocity.example.com
Code language: JavaScript (javascript)

The server URL must be replaced with a real authorized instance. Authentication may also be required.

This feature is version-specific; do not expect the same flag to work with older Gradle Wrappers.

Chapter 17. Configuration Explained

17.1 How Gradle configuration is organized

In a typical Gradle project, several configuration files play different roles. project/ ├── settings.gradle.kts ├── build.gradle.kts ├── gradle.properties ├── gradlew ├── gradlew.bat ├── gradle/ │ └── wrapper/ └── src/

FileMain purpose
settings.gradle.ktsDefines project structure and settings-level plugins
build.gradle.ktsDefines build tasks, dependencies, and plugins
gradle.propertiesSupplies Gradle properties
gradlew / gradlew.batRuns the project-selected Gradle distribution
gradle/wrapper/Contains wrapper configuration

The .kts extension means the file uses the Kotlin domain-specific language (DSL).

17.2 Configure a private Develocity server

For a Gradle 6-or-later project using the current plugin, a minimal configuration in settings.gradle.kts is:

plugins {
    id("com.gradle.develocity") version("4.6.1")
}

rootProject.name = "example-project"

develocity {
    server.set("https://develocity.example.com")

    buildScan {
        publishing.onlyIf { false }
        tag("TRAINING")
    }
}
Code language: JavaScript (javascript)

Explanation:

  • The plugins block applies the Develocity Gradle plugin.
  • server.set(…) points to the Develocity service.
  • publishing.onlyIf { false } disables automatic publication unless explicitly requested with –scan.
  • tag(“TRAINING”) adds a searchable label to published Build Scans.

The server URL is a placeholder. Use the actual hostname of a permitted Develocity instance.

The on-demand publication policy is useful when working with sensitive development projects.

17.3 Enable the Gradle Build Cache

Add this property to gradle.properties:

org.gradle.caching=true
Code language: JavaScript (javascript)

This enables Gradle task-output caching by default for eligible tasks.

You can still override it for a particular invocation with:

./gradlew build --no-build-cache

Enabling caching does not make every task cacheable. Gradle must know the relevant inputs and outputs, and the task must satisfy the requirements for safe reuse.

17.4 Configure a remote Develocity Build Cache

A typical private-server configuration looks like this:

buildCache {
    remote(develocity.buildCache) {
        server = "https://develocity.example.com"
        isPush = System.getenv("CI") == "true"
    }
}
Code language: JavaScript (javascript)

This configuration belongs in settings.gradle.kts, alongside the settings-level Develocity plugin configuration.

Here:

  • remote(…) selects a compatible Develocity remote cache.
  • server identifies the cache endpoint.
  • isPush controls whether this client is allowed to upload outputs.
  • System.getenv(“CI”) checks for a CI environment variable.

This is an example policy, not an appropriate default for every organization. It assumes your CI system sets CI=true, that remote-cache writes are authorized, and that the server supports this integration.

Many teams configure developer laptops to read cached outputs while restricting cache writes to trusted CI workflows.

Do not disable local caching merely because remote caching exists. The local cache frequently avoids network transfers.

17.5 Credentials and secrets

Private Develocity servers may require authentication.

One supported method is to provision a user-specific access key through Gradle:

./gradlew provisionDevelocityAccessKey

Depending on the configuration, this starts an interactive authentication flow and stores the key under the user’s Gradle home.

Another supported approach uses the environment variable DEVELOCITY_ACCESS_KEY, with a value containing the server hostname and key.

For CI environments, secrets should come from an approved secrets manager or CI secret store, not from committed project files.

Modern Develocity integrations also support short-lived access tokens. Where possible, short-lived, narrowly scoped credentials are preferable to persistent administrator credentials.

17.6 Maven integration

Maven projects use a different configuration mechanism.

A typical Maven project can load the Develocity extension through .mvn/extensions.xml.

<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.1.0">
  <extension>
    <groupId>com.gradle</groupId>
    <artifactId>develocity-maven-extension</artifactId>
    <version>2.6.1</version>
  </extension>
</extensions>
Code language: HTML, XML (xml)

A separate .mvn/develocity.xml provides the server connection:

<develocity>
  <server>
    <url>https://develocity.example.com</url>
  </server>
</develocity>
Code language: HTML, XML (xml)

The XML above demonstrates the essential configuration, not a complete enterprise policy. Authentication, cache behavior, and publication rules may require additional settings.

After integration, run a normal Maven lifecycle command:

mvn verify

The extension observes the Maven build and can publish a Build Scan according to its configuration and server permissions.

17.7 Configuration precedence

There is no single universal precedence rule covering Gradle, Maven, Develocity server configuration, and environment variables.

For example, the Gradle plugin documents that an access key specified directly in the settings configuration takes precedence over one supplied through an environment variable or access-key file.

A team should document its chosen configuration sources and verify how command-line flags, settings files, user-level configuration, and CI environment variables interact for the specific integration.

17.8 Validate configuration

For Gradle:

./gradlew help --stacktrace

This verifies that Gradle can load project configuration and initialize the applied plugins.

Then run:

./gradlew build --scan

The first command can succeed even when publication cannot reach the server. The second provides an actual end-to-end publication test.

For Maven:

mvn -version
mvn verify

Check that the extension initializes, the build executes, and any expected Build Scan is published.

Chapter 18. Logs, Status, and Verification

18.1 Installation success is not operational success

Consider these four different states:

StateWhat you have proved
Java installedYour machine can run Java
Gradle startsThe build tool can initialize
Build succeedsThe project builds successfully
Build Scan opensDiagnostic publication and report access work

A complete verification should establish all relevant states.

18.2 Local development troubleshooting commands

java -version
./gradlew --version
./gradlew help --stacktrace
./gradlew build --info --scan

Use one command at a time and identify the first failed stage.

On Windows PowerShell, replace the Wrapper script with .\gradlew.bat.

18.3 How to inspect an individual Build Scan

A useful troubleshooting workflow is to start with the failed task or test, then review the related timeline and configuration information.

Avoid reading every detail from beginning to end. Use the failure to narrow the investigation.

For example, a compileJava failure usually calls for checking compilation diagnostics and source compatibility, not tuning remote-cache performance.

18.4 Check network connectivity

For an authorized private Develocity server, a basic HTTPS connectivity check is:

curl -I https://develocity.example.com/
Code language: JavaScript (javascript)

Replace the placeholder hostname.

The command requests HTTP response headers. A response, even an authentication-related response, may show that the host is reachable and serving HTTP.

A connection timeout, DNS failure, or TLS validation error indicates a different problem.

Do not use curl -k to make a broken certificate setup appear healthy. Fix the certificate trust problem.

18.5 Inspect Kubernetes workloads

For administrators:

kubectl --namespace develocity get pods
kubectl --namespace develocity get events
kubectl --namespace develocity get pvc
Code language: JavaScript (javascript)

These commands help answer:

  • Are the pods scheduled?
  • Are they running and ready?
  • Did image downloads fail?
  • Are persistent volumes bound?
  • Are Kubernetes events reporting resource or configuration problems?

When a specific pod is unhealthy:

kubectl --namespace develocity describe pod POD_NAME
kubectl --namespace develocity logs POD_NAME
Code language: PHP (php)

Replace POD_NAME with the actual pod.

If the container is restarting, inspect the previous container logs where supported:

kubectl --namespace develocity logs POD_NAME --previous
Code language: PHP (php)

18.6 What to monitor in production

SignalWhy it matters
Application health and readinessService availability
Build Scan publication failuresMissing diagnostic data
Cache availabilityBuild acceleration reliability
Cache hit rateCache effectiveness
Cache transfer timeNetwork overhead
Database healthPersistent data availability
Storage utilizationCapacity and retention risk
Authentication failuresAccess and configuration problems
Pod restartsApplication or infrastructure instability
Build duration percentilesEngineering performance trends

Cache hit rate is useful, but it is not sufficient by itself. A high hit rate on tiny tasks may save very little time, while a lower hit rate on expensive compilation tasks may yield substantial benefit.

18.7 A practical diagnosis sequence

NoYesNoYesNoYesNoYesProblem observedDoes the build start?Check Java, Wrapper and configurationDoes build work complete?Inspect failed task and logsBuild Scan published?Check publication policy, auth, DNS and TLSExpected cache reuse?Inspect task inputs, cacheability and cache accessMeasure performance and verify outcomes

Part V outcome: You can now configure a Gradle or Maven integration, understand the important command-line operations, inspect build results, and troubleshoot the major stages independently.

Part VI — Real-World Applications

Chapter 19. Practical Use Cases

The value of Develocity becomes clearer when it is connected to a specific engineering problem.

The following scenarios progress from individual development to large-scale enterprise operations.

Use case 1 — Find out why an Android build is slow

Problem: An Android developer experiences slow local builds after making relatively small code changes.

Environment: A multi-module Android project using the Android Gradle Plugin and Gradle.

Approach: Capture Build Scans for representative clean and incremental builds, then investigate task durations, configuration time, dependency resolution, and cache activity.

Android projectGradle buildBuild ScanTimeline analysisIdentify bottleneckChange build configurationMeasure again

A practical implementation would:

  1. Establish a baseline using repeatable development tasks.
  2. Record several executions rather than trusting a single timing.
  3. Identify the consistently slow stages.
  4. Determine whether the delays come from configuration, compilation, testing, resource processing, or external dependencies.
  5. Change one relevant factor.
  6. Compare the new results against the baseline.

Expected outcome: Better understanding of the build’s dominant costs and evidence for targeted optimization.

Success measures: Median local build time, p90 build time, configuration duration, and time from a small code change to usable feedback.

Risks: Comparing different source revisions or machine states can produce misleading conclusions. Android build behavior is influenced by many project-specific factors, and not every Gradle task is cacheable.

Use case 2 — Reduce repeated work in GitHub Actions

Problem: A team uses ephemeral CI runners. Every job begins in a fresh workspace, creating repeated compilation and test work.

Environment: GitHub Actions, Gradle, a shared cache, and an authorized private Develocity instance.

Approach: Configure eligible tasks to retrieve outputs from a shared Build Cache. Permit carefully controlled cache uploads from trusted CI workflows.

GitHub repositoryCI workflowRunner ARunner BShared Build CacheBuild and testPrivate Develocity

Implementation: Confirm that build tasks declare correct inputs and outputs, enable caching, configure cache authentication, and compare builds with and without shared cache access.

Expected outcome: Less repeated work on runners when equivalent cached outputs are available.

Success measures: CI duration percentiles, cache-hit time savings, cache-download duration, and total compute consumption.

Risks: Untrusted cache uploads, unstable task inputs, network bottlenecks, and accidental publication of sensitive build data.

Use case 3 — Investigate flaky tests across a large Java platform

Problem: A production engineering team encounters intermittent test failures.

Environment: Multiple Java services, Gradle or Maven, and a CI system that regularly executes automated test suites.

Approach: Use Build Scan and test analytics to identify recurring failures, execution patterns, and differences among environments.

A possible workflow is:

  1. Collect test results consistently.
  2. Find tests with inconsistent outcomes across comparable runs.
  3. Identify likely sources such as timing, shared mutable state, environment dependencies, and test-order sensitivity.
  4. Reproduce the failure in a controlled environment.
  5. Fix the test or application behavior.
  6. Continue tracking failure rates.

Expected outcome: More reliable test suites and less time lost to rerunning entire pipelines.

Success measures: Flaky-test rate, test failure investigation time, rerun frequency, and CI pass-rate stability.

Risks: A test that appears flaky may actually expose a real intermittent application defect. Automatically rerunning or ignoring it can hide a production issue.

Use case 4 — Standardize build diagnostics in a mixed Gradle and Maven organization

Problem: Teams use different Java build tools, making troubleshooting practices inconsistent.

Environment: Gradle projects, Maven projects, shared CI, and a central Develocity installation.

Approach: Integrate each build tool through its supported plugin or extension, then adopt common tags, ownership metadata, and troubleshooting procedures.

Implementation: Define a rollout standard covering integration versions, permitted scan content, access control, build identification, and cache policy. Test one Gradle and one Maven project before expanding.

Expected outcome: More consistent diagnostic information and clearer operational ownership.

Success measures: Percentage of supported builds publishing successfully, build-failure investigation time, and adoption across project teams.

Risks: Assuming feature parity between Gradle and Maven, incompatible extension versions, or creating excessive telemetry without a retention policy.

Use case 5 — Accelerate a geographically distributed engineering organization

Problem: Developers and CI workers operate in different regions, and accessing a distant cache can be slow.

Environment: Regional CI infrastructure, a private Develocity deployment, and Develocity Edge caching components.

Approach: Position supported cache infrastructure close to build clients while maintaining centrally managed build observability.

Implementation: Measure network latency, cache transfer times, cache hit rates, and actual build-duration improvement before deploying additional regional infrastructure.

Expected outcome: Reduced cache retrieval latency and more efficient build acceleration for compatible tasks.

Success measures: Time saved per cache hit, p90 build duration, regional cache availability, and network egress cost.

Risks: Cache topology complexity, regional outages, operating costs, and cache-integrity controls.

Use case 6 — Investigate container-image build performance

Problem: An engineering team spends significant time rebuilding container images.

Environment: Supported Docker BuildKit and Buildx versions with Develocity’s Docker integration enabled.

Approach: Use Docker Build Scans to investigate supported image-build behavior.

The Docker integration introduced with Develocity 2026.3 has its own prerequisites and does not imply that Gradle Build Cache settings apply to Docker layer caching.

Expected outcome: Better evidence about container-image build execution.

Success measures: Container-build duration, time spent in expensive build steps, and repeated work.

Risks: Different Docker builder implementations, integration version requirements, and differences between Docker’s caching model and language-build caching.

19.1 Choosing the right improvement

Observed problemInvestigate firstPossible intervention
Slow incremental buildsRe-executed tasks and configuration overheadImprove incremental behavior and configuration caching
Slow clean buildsExpensive cacheable tasksBuild Cache
Long test executionTest distribution and actual test durationsTest Distribution
Flaky CIFailed-test patterns and environmental differencesTest reliability improvements
Slow dependency downloadsRepository latency and dependency resolutionRepository or artifact-cache optimization
Difficult troubleshootingMissing execution contextBuild Scan adoption
Remote cache is slowNetwork and cache-transfer timingsCache topology improvements

The key lesson is that the correct Develocity feature depends on the bottleneck.

Chapter 20. Complete Hands-On Project

Lab 2 · Beginner to intermediate · No commercial license required

20.1 Project objective

You will build a small Java calculator application from source, add automated tests, configure Develocity, experiment with Gradle Build Cache, analyze multiple Build Scans, introduce a deliberate defect, and verify its correction.

This lab combines:

  • Project configuration.
  • Java compilation.
  • Automated testing.
  • Develocity Gradle integration.
  • Build Scan publication.
  • Build Cache behavior.
  • Troubleshooting.
  • Repeatable performance measurement.

20.2 Architecture

Calculator.javaGradle projectCalculatorTest.javasettings.gradle.ktsbuild.gradle.ktsgradle.propertiesGradle WrapperCompile and testLocal Build CacheBuild resultDevelocity pluginPublic Build Scan serviceBrowser diagnostics

20.3 Requirements

Use the environment established in Chapter 14.

We will reuse the official quickstart’s Gradle Wrapper, avoiding the need to install Gradle globally.

Make sure you still have the gradle-build-scan-quickstart repository.

20.4 Create the project directory

From inside the quickstart repository, create the following structure:

gradle-build-scan-quickstart/
├── gradlew
├── gradlew.bat
├── gradle/
└── develocity-lab/
    ├── settings.gradle.kts
    ├── build.gradle.kts
    ├── gradle.properties
    └── src/
        ├── main/
        │   └── java/
        │       └── org/
        │           └── example/
        │               └── Calculator.java
        └── test/
            └── java/
                └── org/
                    └── example/
                        └── CalculatorTest.java

macOS/Linux:

mkdir -p develocity-lab/src/main/java/org/example
mkdir -p develocity-lab/src/test/java/org/example

Windows PowerShell:

New-Item -ItemType Directory -Force develocity-lab\src\main\java\org\example
New-Item -ItemType Directory -Force develocity-lab\src\test\java\org\example
Code language: PHP (php)

Open the develocity-lab directory in your code editor and create the following files.

20.5 Configure Develocity

File: develocity-lab/settings.gradle.kts

plugins {
    id("com.gradle.develocity") version("4.6.1")
}

rootProject.name = "develocity-lab"

develocity {
    buildScan {
        publishing.onlyIf { false }
        uploadInBackground.set(false)
        tag("SELF_STUDY")
    }
}
Code language: JavaScript (javascript)

Important details:

  • The plugin enables Build Scan integration.
  • publishing.onlyIf { false } makes publication opt-in via –scan.
  • uploadInBackground.set(false) makes publication complete before the command terminates, which is useful for this lab.
  • The tag helps identify your training builds.

We intentionally omit a private server URL so the free public service can be used.

20.6 Configure the Java build

File: develocity-lab/build.gradle.kts

plugins {
    java
}

repositories {
    mavenCentral()
}

dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter:5.11.4")
    testRuntimeOnly(
        "org.junit.platform:junit-platform-launcher:1.11.4"
    )
}

tasks.test {
    useJUnitPlatform()
}
Code language: JavaScript (javascript)

The file does the following:

  1. Enables Java compilation and testing.
  2. Uses Maven Central for dependencies.
  3. Adds JUnit Jupiter for automated tests.
  4. Configures Gradle to run tests through the JUnit Platform.

JUnit is a testing framework for Java applications.

The specific JUnit versions are fixed here for reproducibility. In a real project, check the currently supported and security-approved versions before updating dependencies.

20.7 Enable build caching

File: develocity-lab/gradle.properties

org.gradle.caching=true
Code language: JavaScript (javascript)

This enables local Gradle Build Cache behavior for compatible tasks.

No remote cache server is required.

20.8 Write the application

File: develocity-lab/src/main/java/org/example/Calculator.java

package org.example;

public final class Calculator {

    private Calculator() {
    }

    public static int add(int a, int b) {
        return a + b;
    }

    public static int multiply(int a, int b) {
        return a * b;
    }
}
Code language: PHP (php)

This class implements two simple functions: addition and multiplication.

The constructor is private because we will use the class only through its static methods.

20.9 Write automated tests

File: develocity-lab/src/test/java/org/example/CalculatorTest.java

package org.example;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

class CalculatorTest {

    @Test
    void additionWorks() {
        assertEquals(5, Calculator.add(2, 3));
    }

    @Test
    void multiplicationWorks() {
        assertEquals(12, Calculator.multiply(3, 4));
    }

    @Test
    void additionHandlesNegativeNumbers() {
        assertEquals(-2, Calculator.add(-5, 3));
    }
}
Code language: JavaScript (javascript)

The @Test annotation tells JUnit that each method should be executed as an automated test.

assertEquals checks whether the actual output matches the expected value.

20.10 Run the first build

From the parent quickstart directory, not from inside develocity-lab, run:

macOS/Linux:

./gradlew -p develocity-lab clean test --build-cache --scan

Windows PowerShell:

.\gradlew.bat -p develocity-lab clean test --build-cache --scan
Code language: CSS (css)

The -p develocity-lab argument tells Gradle to use the nested directory as the project directory.

The clean task deletes generated outputs for that project.

The test task compiles the application and executes its tests.

The –build-cache argument enables caching for the run.

The –scan argument publishes a Build Scan after you accept the service terms.

Expected result: All three tests pass, the Gradle build succeeds, and a Build Scan URL appears.

20.11 Run the same clean build again

Run the same command a second time.

./gradlew -p develocity-lab clean test --build-cache --scan

Observe the task execution results.

For eligible tasks, you may see output similar to:

> Task :compileJava FROM-CACHE
> Task :test FROM-CACHE

BUILD SUCCESSFUL
Code language: CSS (css)

This is an illustrative expected pattern; the exact task outcomes depend on Gradle’s inputs, cacheability rules, and runtime conditions.

Why does it work?

The first execution generated outputs and stored eligible results. The clean task removed local build-directory outputs but did not clear the Gradle user-home cache.

On the second execution, Gradle can restore matching results from the cache.

20.12 Compare with an up-to-date build

Now run without clean:

./gradlew -p develocity-lab test --build-cache --scan

You may see:

> Task :compileJava UP-TO-DATE
> Task :test UP-TO-DATE

BUILD SUCCESSFUL
Code language: CSS (css)

This demonstrates the distinction:

  • UP-TO-DATE means local outputs remain valid.
  • FROM-CACHE means outputs were restored from a cache.

20.13 Introduce a deliberate application defect

Edit Calculator.java.

Change:

return a + b;
Code language: JavaScript (javascript)

to:

return a + b + 1;
Code language: JavaScript (javascript)

Keep the multiplication method unchanged.

Run:

./gradlew -p develocity-lab test --build-cache --scan

The addition tests should now fail.

This is a useful experiment because the code still compiles. The problem is behavioral rather than syntactic.

Inspect the new Build Scan and answer:

  • Which task failed?
  • Which tests failed?
  • What were the expected values?
  • What actual values did the code produce?
  • How does the failed Build Scan differ from the successful one?

20.14 Fix and verify

Restore the original addition method:

return a + b;
Code language: JavaScript (javascript)

Then run:

./gradlew -p develocity-lab clean test --build-cache --scan

Expected outcome: All tests pass.

Depending on available cache entries, task outcomes may be restored rather than executed again.

20.15 Compare three different executions

Create a small experiment record:

ExperimentSource stateBuild commandExpected investigation
ACorrectClean test with cacheFirst build behavior
BCorrectRepeat clean test with cacheReuse of compatible cached outputs
CDefectiveTest with cacheTest failures and new execution behavior
DCorrect againClean test with cacheRecovery and potential cache reuse

Record the Build Scan URL and total duration for each run.

Do not assume that every performance difference comes from caching. Initial dependency downloads, JIT compilation, operating-system scheduling, and background processes can affect timing.

For meaningful performance experiments, compare several runs under similar conditions.

20.16 Troubleshooting the project

ProblemLikely causeWhat to do
Plugin cannot be resolvedNetwork or repository issueVerify Gradle Plugin Portal access
Java compilation failsFile path, package, or syntax mismatchCheck package org.example and Java syntax
Tests are not discoveredTest class or JUnit configuration errorCheck @Test, dependencies, and source directory
Build Scan does not publishTerms, network, or publication issueCheck console messages and service access
No FROM-CACHE resultTask inputs changed or cache entry unavailableCompare inputs and rerun under identical conditions
‘-p project cannot be foundIncorrect working directoryRun from the quickstart parent directory
TLS or proxy failureCorporate network restrictionsUse approved network and certificate configuration

20.17 Cleanup

You can keep the lab files for later exercises.

If you want to remove the project, close any tools that are using it and delete only the develocity-lab directory you created. Do not delete the entire quickstart repository unless you no longer need it.

The public Build Scans already uploaded are not removed by deleting local files. Review the public service’s privacy and retention controls if you need to manage published records.

20.18 Extend the project

Once the basic experiment works, consider:

  1. Adding more tests and comparing execution durations.
  2. Introducing additional Java source files.
  3. Splitting the project into separate Gradle modules.
  4. Adding custom Build Scan tags.
  5. Enabling configuration caching after checking compatibility.
  6. Running the project in an authorized CI environment.
  7. Connecting a private Develocity instance with approved credentials.
  8. Comparing cache behavior across two different machines.

Project success criterion: You can build and test a new Java project, publish Build Scans, explain UP-TO-DATE versus FROM-CACHE, diagnose an introduced defect, and verify that the corrected application works.

Part VII — Advanced Capabilities and Production Engineering

Chapter 21. Advanced Features

Once you understand Build Scans and caching, the next stage is using Develocity to optimize entire engineering workflows.

Not every advanced capability is included in every license, build integration, or deployment model. Confirm feature availability before designing around it.

21.1 Predictive Test Selection

Predictive Test Selection (PTS) attempts to identify tests that are most relevant to a particular code change.

Imagine a large application with 15,000 automated tests. Running all of them after every small change may create substantial delays.

PTS helps prioritize a subset of tests based on available information about the changes and the test suite.

NoYesCode changeChange and test informationPredictive Test SelectionSelected testsFast feedbackTests pass?Investigate failureContinue delivery workflowFull suite at defined checkpoints

Why it matters: Faster feedback can reduce waiting during code review and development.

Important limitation: Selected tests do not provide the same coverage as executing every test. Keep appropriate full-suite testing at defined checkpoints, particularly for safety-critical, security-sensitive, and release-critical changes.

PTS should supplement a broader testing strategy rather than become a justification for permanently skipping important tests.

21.2 Test Distribution

Test Distribution allows suitable test workloads to be executed across multiple agents.

Without distribution:

Test suiteOne test workerAll tests completed

With distribution:

Test suiteTest coordinatorAgent AAgent BAgent CCollect resultsCombined test outcome

The benefit depends on whether tests can execute independently, how expensive they are, and how much coordination overhead is involved.

Adding more agents does not guarantee proportional speed improvement.

For example, shared database contention could prevent independent execution, and environment provisioning may consume much of the time saved.

Prerequisites: A supported build/test integration, suitable agents, network connectivity, compatible test environments, and the relevant Develocity feature entitlement.

21.3 Develocity Edge

Develocity Edge is designed to improve distributed caching and related artifact-serving workflows.

A common enterprise problem is geographic distance between CI workers and centralized services.

Suppose a CI runner in Asia repeatedly retrieves large outputs from a service located in another region.

Even when the outputs are cached, network latency and transfer costs can reduce the benefit.

Edge deployments can bring caching capabilities closer to the clients that consume them.

For new infrastructure designs, prefer the supported Edge architecture rather than the legacy standalone Build Cache node model. Official documentation states that standalone Build Cache node support ends with the transition to Develocity 2027.1.

21.4 Artifact Cache and Setup Cache

Although they all involve reuse, the acceleration technologies address different stages of work.

TechnologyWhat is reusedExample
Build CacheOutputs of compatible build tasksCompiled Java classes
Artifact CacheSupported dependency or artifact downloadsPreviously retrieved package content
Setup CacheEligible environment setup informationReusable build setup state
Configuration CacheGradle build-configuration stateAvoid repeated configuration work

Do not assume a Build Cache will automatically eliminate all package downloads or repeated machine initialization.

Choose the mechanism that corresponds to the actual work being repeated.

21.5 Build Caching Optimizer

A build may have low cache reuse because tasks are not cacheable, relevant inputs change unnecessarily, or configuration introduces variability.

Develocity’s build-caching analysis capabilities can help identify such problems.

A sensible process is:

  1. Select a frequently executed build.
  2. Capture several representative executions.
  3. Identify expensive work that appears repeatedly.
  4. Determine whether the work is eligible for caching.
  5. Examine task input changes and missed reuse opportunities.
  6. Correct task configuration where necessary.
  7. Measure performance and validate output correctness.

Avoid optimizing only the cache-hit percentage. The more meaningful question is how much useful time and compute have been saved.

21.6 APIs and AI-assisted investigation

Develocity provides APIs and MCP-related capabilities for accessing supported build information programmatically.

Possible enterprise applications include:

  • Creating engineering productivity dashboards.
  • Identifying recurrent CI failures.
  • Comparing historical build patterns.
  • Answering questions about slow builds.
  • Incorporating build diagnostics into authorized AI workflows.

For example, an engineering assistant might help answer: Which Gradle tasks explain the increase in build duration for our main CI workflow?

A safe implementation would grant that assistant narrowly scoped read access to relevant build data, rather than broad administrative permissions.

API integrations must validate authorization, avoid unnecessarily exposing logs or environment information, and treat build output as potentially sensitive data.

21.7 Automation patterns

Advanced teams often automate repetitive diagnostic activities.

AutomationTriggerAction
Build-regression reportDaily or weekly scheduleCompare build-duration trends
Cache-efficiency reviewCache time savings declinesInvestigate reuse patterns
Flaky-test reviewRepeated inconsistent test failuresCreate an investigation work item
Platform health monitoringService degradationNotify platform operations
Integration compatibility reviewVersion changesTest plugins before upgrading
Capacity reviewSustained storage or workload growthReview retention and resources

Automation should notify teams about actionable problems rather than generate large quantities of low-value alerts.

21.8 Advanced learning objective

By the end of this chapter, you should be able to distinguish between reducing repeated computation, reducing test execution, distributing work, and improving diagnostics.

These are different optimization strategies, and a mature engineering team chooses among them based on evidence.

Chapter 22. Security Best Practices

A Develocity installation may receive detailed information about source-code builds, dependencies, environments, test failures, and CI infrastructure.

That makes security and data governance important from the beginning.

22.1 Main security responsibilities

The most important concerns are:

  • Who can publish a Build Scan?
  • Who can view the resulting data?
  • What information is captured?
  • Which builds may upload cache entries?
  • Can untrusted code influence outputs consumed by trusted builds?
  • How are access keys and tokens protected?
  • How is data retained and deleted?
  • How are server components updated?

22.2 Insecure practices versus safer alternatives

Insecure practiceRiskSafer alternative
Publishing confidential projects to a public serviceData disclosureUse an authorized private instance
Committing access keys to GitCredential exposureUse CI secret stores or scoped credentials
Disabling TLS certificate validationInterception riskUse trusted certificates
Allowing all pull-request builds to write trusted cache entriesCache poisoningSeparate trusted and untrusted writes
Using administrator credentials for every integrationExcessive permissionsLeast-privilege accounts and tokens
Giving all users unrestricted scan accessInformation exposureSSO and project-level access control
Retaining all telemetry indefinitelyGrowing security and storage exposureDefined retention policy
Running outdated server versionsKnown defects or vulnerabilitiesControlled patch management
Treating cache hits as proof of correctnessIncorrect output reuseProperly declared inputs and validation
Sending full Build Scan content into unrestricted AI systemsData leakagePermissioned and audited integrations

22.3 Protecting Build Scan information

A Build Scan can include information that developers do not normally intend to publish publicly.

Potential examples include repository names, dependency coordinates, environment details, build arguments, captured console output, and test failure messages.

The precise information captured depends on the integration and configuration.

Before enabling publication for a company project, security and engineering teams should review the data captured, applicable redaction and obfuscation controls, server access policies, and organizational data-handling requirements.

22.4 Credential management

Access keys should be treated as secrets.

For CI environments, prefer:

  1. Approved secret storage.
  2. Credentials restricted to the required server.
  3. Minimum required permissions.
  4. Short validity periods where supported.
  5. Credential rotation and revocation procedures.
  6. Separate identities for different CI trust levels.

Never paste a real access key into a publicly shared troubleshooting log or Build Scan.

22.5 Build Cache trust boundaries

One of the most important security topics is cache poisoning.

Imagine that an untrusted build can upload an output that another trusted build later reuses.

If cache isolation and task identity protections are inadequate, this could affect the integrity of trusted build results.

Develocity 2026.3 introduced trusted-artifact isolation capabilities involving workload identity. These require proper configuration; they are not a substitute for trustworthy build logic and appropriate CI permissions.

A useful trust model is:

Untrusted pull requestRestricted CI identityProtected main branchTrusted CI identityUntrusted cache scopeTrusted cache scopeControlled reuse policyRelease-critical build

The dotted path represents a decision that must be governed by an explicit trust policy, not unconditional cache sharing.

22.6 Secure deployment checklist

Enterprise security assessment
  • [ ] TLS certificates are valid and trusted
  • [ ] SSO and least-privilege access are configured
  • [ ] Build Scan data classification has been reviewed
  • [ ] Credentials are stored outside source control
  • [ ] Cache write permissions follow CI trust boundaries
  • [ ] Server and integration versions are approved
  • [ ] Audit logging and operational monitoring are enabled
  • [ ] Backups and restore procedures are tested
  • [ ] Retention and deletion policies are documented
  • [ ] AI and API integrations use restricted permissions

These are learning checks, not a formal certification or proof that a deployment is secure.

Chapter 23. Production-Ready Architecture

The transition from a local lab to a production service requires much more than installing a Helm chart.

23.1 Reference production architecture

Managed Kubernetes clusterEngineering and CI environmentsDeveloper workstationsTrusted CI runnersRestricted CI runnersHTTPS ingress / load balancerDevelocity application servicesCaching services and EdgeMonitoring and alertingManaged PostgreSQLPersistent object storageEnterprise identity providerSecrets managerBackup and recovery system

This is a logical reference architecture, not an exact Helm resource diagram. Specific components and storage connections must follow the supported deployment model.

23.2 Essential, recommended, and optional components

ComponentClassificationWhy
Supported Kubernetes infrastructureEssential for self-hosted installationRuns the application
Valid Develocity licenseEssentialAuthorizes the installation
Trusted HTTPS endpointEssential for secure operationProtects communication
Database and required persistent storageEssentialMaintains state
Supported backup mechanismEssential for production resilienceEnables recovery
Health monitoringEssentialDetects service failures
SSO integrationStrongly recommendedCentralizes identity management
Managed PostgreSQLDeployment-dependent recommendationCan simplify database operations
Object storageRequired where specified by the chosen architectureStores supported durable data
Regional Edge deploymentOptionalImproves applicable distributed workloads
Reporting integrationsOptionalEnables custom analytics
Dedicated performance testingRecommendedValidates scaling decisions

23.3 Capacity planning

Begin with the official deployment requirements, then estimate workloads.

Important variables include:

  • Number of active build clients.
  • Builds per day.
  • Average Build Scan size.
  • Cache upload and download volume.
  • Number and size of projects.
  • Test-result volume.
  • Telemetry retention requirements.
  • Geographic distribution.
  • Expected growth.
  • Availability requirements.

Consider an illustrative storage-planning exercise.

If an organization generates 20,000 Build Scans per day and retains them for 30 days: [ 20{,}000\times30=600{,}000\text{ Build Scans} ]

That gives a record count, not a disk-space estimate. Actual storage depends on scan contents, compression, indexes, application overhead, and retention behavior.

Measure representative data rather than inventing a fixed number of megabytes per scan.

23.4 Reliability and recovery objectives

Two operational concepts are important.

Recovery Time Objective (RTO): The maximum acceptable time to restore service after a significant failure.

Recovery Point Objective (RPO): The maximum acceptable amount of data loss measured in time.

For example, a company could choose an RTO of four hours and an RPO of one hour. These are illustrative business decisions, not Develocity default guarantees.

The architecture and backup schedule must be designed to meet the organization’s actual objectives.

23.5 Monitoring and alerting

Monitor the service at three layers.

LayerExample signalsResponsible team
InfrastructureCPU, memory, disk, network, pod readinessPlatform/SRE
Develocity serviceApplication health, ingestion and cache errors, authentication failuresPlatform/DevEx
Engineering outcomesBuild duration, cache savings, flaky-test trendsBuild engineering

An alert should ideally identify the affected service, impact, recommended investigation, and owning team.

23.6 Upgrade and rollback strategy

Production upgrades require a controlled process.

  1. Review Develocity release notes and compatibility requirements.
  2. Check Kubernetes, Helm, database, and storage dependencies.
  3. Identify deprecated integrations and deployment components.
  4. Test the upgrade against a representative non-production environment.
  5. Confirm that verified backups exist.
  6. Schedule the production change.
  7. Upgrade using the vendor-supported procedure.
  8. Verify application health, publication, authentication, and cache access.
  9. Monitor for regressions.
  10. Execute the documented recovery procedure if necessary.

Helm provides revision history:

helm --namespace develocity history ge
Code language: PHP (php)

Helm also supports rollback commands, but a Helm rollback is not automatically a safe database or application-data rollback. Before using it, verify the vendor’s downgrade compatibility and recovery instructions. Schema migrations and persistent state may not be reversible simply by changing the chart revision.

23.7 Production readiness checklist

Before announcing the service as ready, confirm:

  • [ ] Deployment architecture is supported.
  • [ ] Licensing and capacity are sufficient.
  • [ ] DNS, TLS, ingress, and firewall policies are tested.
  • [ ] Authentication and authorization work.
  • [ ] Build Scan publication succeeds from development and CI.
  • [ ] Cache reads and authorized writes work.
  • [ ] Data retention is configured.
  • [ ] Backups have been restored successfully in a test environment.
  • [ ] Alerts reach the responsible team.
  • [ ] Upgrade and incident-response runbooks exist.
  • [ ] Cost and usage monitoring is in place.
  • [ ] Legacy components and compatibility risks are documented.

A production deployment is ready only when the team can operate and recover it—not merely when every Kubernetes pod reports Running.

Part VIII — Troubleshooting and Mastery

Chapter 24. Common Problems and Solutions

24.1 Troubleshooting reference

Problem or errorLikely causeHow to diagnoseSolutionHow to verify
java: command not foundJDK missing or PATH incorrectRun java -versionInstall supported JDK and update PATHJava version displays
Invalid JAVA_HOMEWrong JDK pathInspect environmentPoint to JDK rootGradle starts
Gradle Wrapper download failsProxy, DNS, TLS, or networkInspect error and download URLConfigure approved network settingsgradlew –version succeeds
Plugin cannot be resolvedRepository or compatibility problemRun with –stacktraceCheck plugin version and repository accessGradle configures
Java compilation failsSource or compiler mismatchRead compiler errorsFix source or toolchainCompile task passes
JUnit tests are not discoveredDependency or configuration issueInspect test setupCorrect JUnit and test task configurationTests execute
Build Scan URL missingPublication disabled or failedCheck policy and logsEnable permitted publication; fix connectivityScan URL appears
Build Scan returns access deniedAuthentication or authorization issueCheck account and permissionsUse authorized identityReport opens
TLS handshake failsCertificate trust or server mismatchCheck certificate chainFix trusted certificate configurationHTTPS works
Remote cache has no hitsInputs differ or cache not populatedInspect task inputs and caching detailsCorrect cacheability or policyEligible output restored
Remote cache is slowerNetwork overhead or poor localityMeasure transfer timeReview cache topologyBuild time improves
CI ends before scan upload finishesBackground upload terminatedInspect publication behaviorDisable background upload for ephemeral CIScan reliably appears
Pod remains pendingInsufficient capacity or scheduling issuekubectl describe podCorrect resources or schedulingPod becomes ready
Persistent volume unboundStorage provisioning issuekubectl get pvcFix supported storage configurationPVC becomes bound
Develocity server unavailableService, ingress, DNS, or dependency problemInspect health and logsRepair failed componentHealth and access recover
Login failsIdentity provider or access-control problemReview auth configuration and logsCorrect federation or permissionsAuthorized login succeeds

The problem descriptions are typical troubleshooting categories. Except for standard command and runtime diagnostics, they should not be interpreted as exact verified Develocity error messages.

24.2 Troubleshooting Build Scan publication

Suppose a build completes successfully but no Build Scan appears.

Investigate in this order:

  1. Was the Develocity integration applied?
  2. Does the project’s publication policy allow this build?
  3. Was –scan supplied when the policy is on-demand?
  4. Did the user agree to the public-service terms where applicable?
  5. Does the computer have network access to the configured service?
  6. Is HTTPS certificate validation successful?
  7. Does the user or CI identity have permission to publish?
  8. Was the build terminated before an asynchronous upload completed?

The Gradle plugin documentation describes a background-upload failure log at: ~/.gradle/build-scan-data/upload-failure.log

Inspect it when an upload fails silently after the build finishes. The file might not exist if no such failures occurred.

24.3 Troubleshooting Build Cache

A missing cache hit does not automatically indicate an error.

Consider these possibilities:

  • The task is not cacheable.
  • The task has never executed with the same relevant inputs.
  • A compiler or build-plugin version changed.
  • A declared input changed.
  • The cache entry has been evicted.
  • Cache access or permissions are incorrect.
  • Local or remote caching is disabled.
  • The task was skipped through up-to-date checking before a cache lookup was necessary.

A practical diagnostic experiment is to run a stable project twice, deliberately cleaning only generated build outputs between runs.

./gradlew clean build --build-cache --scan
./gradlew clean build --build-cache --scan

Then inspect whether eligible tasks were restored and why other tasks executed.

24.4 Troubleshooting systematic performance regressions

Use a structured process.

Step 1: Identify the affected workflow: local, CI, clean, incremental, or test-only.

Step 2: Select comparable successful builds from before and after the regression.

Step 3: Compare total duration and key stages.

Step 4: Examine task execution changes, dependency resolution, cache behavior, and resource conditions.

Step 5: Form a specific hypothesis.

Step 6: Test one change.

Step 7: Measure multiple representative runs.

Step 8: Retain or reverse the change based on evidence.

Do not simultaneously change hardware, Gradle versions, compiler settings, cache policy, and test parallelism during a performance experiment. That makes it difficult to identify which modification caused the result.

24.5 Commands requiring caution

Command or actionPotential impact
./gradlew cleanDeletes generated outputs of the selected Gradle project
git restore FILEDiscards uncommitted changes in that file
kubectl delete …Can remove Kubernetes resources and interrupt service
helm uninstall …Removes a Helm release and may disrupt workloads
helm rollback …Changes deployed resources; does not guarantee data rollback
Clearing a shared cacheCauses expensive cache repopulation
Changing firewall rulesMay interrupt CI or user connectivity
Changing cache permissionsCan alter security and build behavior

Production changes require authorization, impact analysis, and a recovery plan.

Chapter 25. Best Practices and Common Mistakes

25.1 Universal engineering practices

These are good habits regardless of which tool you use.

Measure before optimizing. Avoid fixing a bottleneck that has not been demonstrated.

Make experiments repeatable. Record the source revision, command, Java version, relevant hardware, cache configuration, and environment.

Compare similar workloads. A large clean build should not be compared directly with a small incremental build as though they measured the same thing.

Prefer controlled changes. Change one important factor at a time.

Document configuration. Engineers should know how scans are published, where the cache lives, and who can write to it.

Validate correctness. Faster incorrect builds have no value.

Observe long-term trends. One exceptionally fast execution is less useful than sustained improvement across normal workloads.

25.2 Develocity-specific practices

Recommended practiceWhy it matters
Adopt Build Scans before widespread caching changesEstablishes visibility and a baseline
Use clear build tagsMakes analysis and search easier
Separate local and CI measurementWorkloads behave differently
Keep Build Scan publication policies explicitPrevents unintended data sharing
Protect cache write permissionsPreserves build integrity
Keep integration versions managedReduces compatibility surprises
Track time saved, not only hit countsMeasures actual value
Test cache correctnessPrevents reuse of incorrect outputs
Monitor scan publication reliabilityAvoids gaps in diagnostic history
Review storage and retentionControls operational costs

25.3 Common mistakes

Mistake 1: Enabling caching without understanding task inputs. The result may be disappointing performance or, in poorly implemented tasks, incorrect reuse.

Mistake 2: Treating every slow build as a cache problem. Some delays come from network access, tests, configuration, or machine resource contention.

Mistake 3: Using Build Scan as a replacement for application monitoring. Build diagnostics and runtime monitoring address different systems.

Mistake 4: Assuming selected tests equal complete regression coverage. Test selection is an acceleration technique, not proof that all unselected behavior is correct.

Mistake 5: Enabling remote cache writes for untrusted workflows. Cache trust boundaries are part of software supply-chain security.

Mistake 6: Comparing only successful builds. Failed builds often expose the most important reliability problems.

Mistake 7: Measuring a single build. Build duration can be affected by background activity, downloads, daemon warmup, and resource scheduling.

Mistake 8: Deploying production infrastructure without a restore test. A backup is useful only if the team can recover the service from it.

25.4 A continuous improvement operating model

Collect build dataMeasure trendsPrioritize bottleneckImplement improvementValidate correctnessMeasure business impactDocument and standardize

A mature team repeats this process and adjusts its priorities as build behavior changes.

Chapter 26. Learning Roadmap

The following is a suggested progression, not an official certification syllabus.

StageSuggested effortTopicsPractical activityExpected skill
1. Fundamentals3–5 hoursBuild tools, CI, caching, terminologyExplain a build workflowConceptual understanding
2. First use2–4 hoursJDK, Gradle Wrapper, Build ScanComplete Lab 1Independent basic use
3. Practical use5–8 hoursTasks, cache behavior, diagnosticsComplete Lab 2Working proficiency
4. Team integration6–10 hoursCI, publication policies, remote cacheIntegrate an approved projectTeam-level competence
5. Advanced optimization8–12 hoursTest optimization, caching analysis, APIsInvestigate a real bottleneckApplied competence
6. Production operations10–16 hoursKubernetes, security, storage, observabilityDesign and review deploymentOperational readiness

26.1 Recommended study order

  1. Understand how software builds work.Learn task graphs, dependencies, testing, and caching.
  2. Use Gradle and Build Scan.Run the official quickstart and investigate build results.
  3. Master local cache behavior.Compare clean, incremental, up-to-date, and cached executions.
  4. Improve a real CI workflow.Establish a baseline and test a small change.
  5. Study advanced acceleration and test optimization.Learn when remote caching, test distribution, and PTS are suitable.
  6. Learn enterprise operation.Cover identity, Kubernetes, backups, monitoring, upgrades, and incident response.

26.2 Official documentation and learning resources

The following are the most important resources to bookmark.

ResourceWhy to use it
Develocity documentationPlatform releases, installation, integrations, and administration
Develocity Gradle plugin manualGradle integration and configuration
Official Build Scan quickstartFree hands-on sample
Gradle User ManualBuild tool concepts and operation
Gradle Build CacheCache inputs, outputs, and configuration
DPE UniversityStructured developer productivity learning
Develocity product websiteProduct overview and commercial options

The documentation URLs link to current or explicitly identified documentation families. Recheck the version-specific guides when upgrading.

26.3 Skills to demonstrate before production work

A practitioner should be able to:

  • Explain why a task executed.
  • Distinguish cached output reuse from up-to-date checking.
  • Capture and investigate a failed Build Scan.
  • Safely configure Build Scan publication.
  • Analyze CI performance using several representative runs.
  • Explain which workflows may write to a shared cache.
  • Verify that a caching optimization preserves build correctness.
  • Diagnose publication failures independently of build failures.
  • Design a monitoring and backup plan for a private installation.

Chapter 27. Exercises and Knowledge Assessment

Complete these questions before reading the answer key.

27.1 Beginner assessment

Question 1 — Multiple choice

What is the primary purpose of Develocity?

  • A. Replace Git repositories.
  • B. Observe, troubleshoot, and accelerate supported builds and tests.
  • C. Compile Java without a build tool.
  • D. Monitor production website visitors.
Question 2 — Multiple choice

Which component actually executes a normal Gradle project build?

  • A. Gradle.
  • B. The Develocity web interface.
  • C. PostgreSQL.
  • D. Kubernetes.
Question 3 — Multiple choice

What does FROM-CACHE normally indicate?

  • A. A task failed.
  • B. A task has no inputs.
  • C. Compatible outputs were restored from a build cache.
  • D. The application was deployed.
Question 4 — Short answer

Explain the difference between a Build Scan and a Build Cache.

Question 5 — Short answer

Why is it important to understand a software build process before learning Develocity?

27.2 Intermediate assessment

Question 6 — Multiple choice

A developer runs ./gradlew build twice without changing anything. Many tasks show UP-TO-DATE.

What does that mean?

  • A. The tasks were necessarily restored from a remote cache.
  • B. Gradle determined that current local outputs were valid.
  • C. Develocity skipped the build.
  • D. The project had no source code.
Question 7 — Multiple choice

Which command requests a Build Scan for the sample Gradle project?

  • A. ./gradlew build –scan
  • B. ./gradlew deploy –develocity-install
  • C. ./gradlew build –enable-ssh
  • D. ./gradlew scan-only –database
Question 8 — Practical exercise

Run the custom calculator project from Chapter 20 with Build Cache enabled. Execute a clean build twice.

Identify which tasks executed and which were restored from cache.

Question 9 — Practical exercise

Change the addition method so it produces an incorrect result. Capture a Build Scan for the failing tests.

Identify the failed task and test methods, then restore the correct implementation.

Question 10 — Short answer

A CI build succeeds, but no Build Scan URL is produced.

Name four things you would check.

27.3 Advanced assessment

Question 11 — Scenario

Your organization has 200 engineers using ephemeral CI runners. Compilation is expensive and repeated frequently.

Which Develocity capability would you investigate first, and why?

Question 12 — Scenario

Your organization has a 90-minute test suite. Most changes affect only a small portion of the application.

Compare Predictive Test Selection and Test Distribution. Explain how they address the problem differently.

Question 13 — Scenario

A remote cache has a high cache-hit rate, yet build performance barely improves.

What should you measure before modifying the infrastructure?

Question 14 — Security scenario

An external contributor opens an untrusted pull request. The CI system can upload to the same trusted cache used by release builds.

What is the risk, and how would you reduce it?

Question 15 — Architecture scenario

A company wants to deploy Develocity on Kubernetes.

List five production requirements beyond simply creating the application pods.

Question 16 — Practical architecture exercise

Draw a Mermaid diagram with:

  • Developer laptops.
  • CI runners.
  • Private Develocity service.
  • Shared caching infrastructure.
  • Persistent database.
  • Enterprise identity provider.

Label which connections are associated with telemetry and which with cached outputs.

Question 17 — Operational scenario

An upgrade changes database state and the new application release fails. Why might a simple Helm rollback be insufficient?

Question 18 — Decision exercise

A team has a small Java project with reliable 15-second builds.

Would you recommend immediately deploying a private Develocity server? Explain.

27.4 Answer key and explanations

Question 1. B — Develocity observes, analyzes, and accelerates supported build and test workflows. It does not replace the build tool.

Question 2. A — Gradle executes the tasks. Develocity provides integrated observability and acceleration.

Question 3. C — Gradle restored eligible task outputs from a cache rather than performing the same work again.

Question 4. A Build Scan contains diagnostic information about one build execution. A Build Cache stores reusable outputs of compatible tasks.

Question 5. Understanding tasks, dependencies, compilation, and tests lets you interpret diagnostics and select appropriate optimizations rather than treating Develocity as a black box.

Question 6. B — UP-TO-DATE means Gradle determined that local task outputs were valid for the relevant inputs.

Question 7. A — ./gradlew build --scan requests publication of a Build Scan, subject to configuration and publishing conditions.

Question 8. Run the same clean build twice and compare the scans. Eligible tasks may show FROM-CACHE on the second execution; record actual outcomes instead of assuming every task is cacheable.

Question 9. Changing a + b to a + b + 1 should fail the addition assertions. Inspect the test task and report, restore the method, and confirm that tests pass.

Question 10. Check whether the plugin is applied, whether publishing is enabled, whether the server is reachable, and whether authentication works. Also check TLS, public-service terms, and background-upload behavior.

Question 11. Investigate shared Build Cache because compatible compilation outputs may be reused across ephemeral runners. First establish task cacheability and baseline performance.

Question 12. Predictive Test Selection chooses a subset of relevant tests. Test Distribution runs suitable tests in parallel across agents. They address different costs and may be combined where supported.

Question 13. Measure absolute time saved, transfer size and duration, task cost, whether hits affect expensive tasks, and network latency. Hit rate alone is insufficient.

Question 14. Untrusted cache uploads may compromise the integrity of outputs consumed by trusted builds. Apply separated cache trust scopes, limited write permissions, and identity controls.

Question 15. Important requirements include licensing, HTTPS, persistent databases and storage, authentication, monitoring, backups, tested restores, resource capacity, and documented upgrades.

Question 16. A good diagram separates telemetry publication, cache reads and writes, persistent storage, and identity-provider communication, and marks the private trust boundary.

Question 17. Helm rollback may not undo schema migrations or other changes to persistent state. Recovery may require a vendor-supported downgrade or restoring compatible backups.

Question 18. Probably not immediately. Use built-in Gradle diagnostics and the free tools first, then evaluate a commercial platform when a measurable need emerges.

27.5 Final practical assessment

To demonstrate working competence, complete a small independent project where you:

  1. Build and test a Gradle project.
  2. Publish a Build Scan.
  3. Investigate one real or deliberately introduced failure.
  4. Demonstrate local cache reuse.
  5. Measure an optimization using more than one build.
  6. Explain the security implications of publishing telemetry and sharing cache outputs.

Passing this assessment is stronger evidence of skill than merely memorizing the command reference.

Chapter 28. Final Revision and Quick Reference

28.1 Develocity in one paragraph

Develocity is a platform for observing, troubleshooting, and accelerating software builds and tests. It works with supported build tools and integrates with development and CI environments. Its key capabilities include Build Scans, shared caching, historical performance analysis, test diagnostics, and advanced acceleration features. It helps engineers make evidence-based improvements, but it does not replace the underlying build systems or eliminate the need for secure configurations and reliable tests.

28.2 The five most important concepts

  1. Build execution: The build tool performs compilation, testing, and packaging.
  2. Build Scan: Diagnostic information explains what happened during a build.
  3. Build Cache: Compatible task outputs can be reused to avoid repeated work.
  4. Build and test optimization: Different bottlenecks require different acceleration strategies.
  5. Operational governance: Correctness, security, observability, and recovery remain essential at scale.

28.3 One-page Develocity cheat sheet

Develocity Quick Reference

Keep this page for daily development and troubleshooting.

Core terminology
TermRemember
Build ScanWhat happened?
Build CacheCan existing outputs be reused?
UP-TO-DATELocal outputs are still valid
FROM-CACHEOutputs were restored
Test DistributionExecute suitable tests across agents
PTSSelect relevant tests
EdgeDistributed cache infrastructure
Essential Gradle commands — macOS/Linux
<em># Verify Gradle</em>
./gradlew --version

<em># Build with a Build Scan</em>
./gradlew build --scan

<em># Run tests</em>
./gradlew test --scan

<em># Investigate an error</em>
./gradlew build --stacktrace

<em># Experiment with caching</em>
./gradlew clean build --build-cache --scan

<em># Disable cache for comparison</em>
./gradlew build --no-build-cache
Code language: HTML, XML (xml)

On Windows, use .\gradlew.bat in place of ./gradlew.

Gradle configuration essentials
plugins {
    id("com.gradle.develocity") version("4.6.1")
}

develocity {
    buildScan {
        publishing.onlyIf { false }
    }
}
Code language: JavaScript (javascript)

Place this in settings.gradle.kts. For a private instance, configure its server URL and approved authentication separately.

Enable local caching
org.gradle.caching=true
Code language: JavaScript (javascript)
When a build is slow
  1. Open its Build Scan.
  2. Find the expensive stages.
  3. Check task and cache behavior.
  4. Form a specific hypothesis.
  5. Make one change and measure again.
When a Build Scan is missing

Check the integration, publication policy, network, TLS, authentication, and upload behavior.

When cache reuse is missing

Check task cacheability, changed inputs, available entries, permissions, and cache availability.

Security essentials

Never commit tokens, expose confidential scans publicly, disable TLS validation as a permanent workaround, or permit untrusted builds to write trusted cache content without appropriate isolation.

Best first project

Use the official Build Scan quickstart, then complete the calculator project in Chapter 20.

28.4 When Develocity is most useful

Develocity is particularly valuable when engineering teams face repeated build performance regressions, slow CI pipelines, expensive compilation and tests, flaky test behavior, difficult cross-environment debugging, or the need for centralized productivity analysis.

A private installation becomes more compelling as the number of teams, build executions, CI environments, and operational requirements increases.

28.5 When another approach may be better

For small projects, native Gradle or Maven diagnostics may be entirely adequate.

For monorepos built primarily with Bazel or Nx, evaluate the corresponding ecosystem-specific acceleration platforms as well.

For software quality analysis, security scanning, and application runtime monitoring, use tools designed for those purposes rather than treating Develocity as a substitute.

Final course outcome

You have completed the learning path from software-build fundamentals to Develocity’s architecture, integrations, installation, configuration, daily usage, advanced acceleration, security, production deployment, and troubleshooting.

The most important practical progression is:

  1. First: Run the official Build Scan quickstart from Chapter 15.
  2. Second: Complete the Java calculator and Build Cache experiments in Chapter 20.
  3. Third: Apply the same diagnostic method to an authorized real development or CI workload.
  4. Finally: Evaluate commercial Develocity deployment and advanced acceleration only when measurements justify them.

The central principle of Developer Productivity Engineering is simple: measure the actual problem, understand its cause, change the appropriate part of the system, verify correctness, and measure the result. Develocity is useful because it provides evidence and capabilities that help engineers repeat that process at scale.

Documentation and version-sensitive product details verified against official sources as of October 28, 2026. Lab execution results are described as expected outcomes; commands were not executed against the reader’s machine or a licensed Develocity environment.

Official references

The examples include version-sensitive details. Check official documentation before applying them to a production system.

Find Trusted Cardiac Hospitals

Compare heart hospitals by city and services — all in one place.

Explore Hospitals
I'm Rajesh Kumar, a DevOps, SRE, DevSecOps, Cloud, and Platform Engineering expert passionate about sharing practical knowledge, real-world experiences, and industry best practices. I have worked at Cotocus and regularly write about technology, travel, investing, health, product reviews, and digital marketing through my various platforms. I publish technical articles at DevOps School, travel stories at Holiday Landmark, stock market insights at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at TrueReviewNow, and SEO and digital marketing strategies at Wizbrand.

Related Posts

ISO 31000 Explained: A Hands-On Guide to Risk Identification, Analysis, Treatment, and Enterprise Decision-Making

A company wants to adopt a new identity provider. The project could reduce maintenance cost and improve employee access, but it may also introduce supplier dependency, migration…

Read More

COBIT Explained: How to Govern Enterprise Technology, Assess Capability, and Connect IT Decisions to Business Value

Imagine a company that invests heavily in cloud services yet cannot answer three basic questions: Who decides which systems deserve funding? Who accepts the risks of critical…

Read More

ISO/IEC 20000-1: A Complete Practical Guide to Building and Auditing an IT Service Management System

A service provider may have capable engineers, a functioning ticket system, and well-designed monitoring yet still deliver inconsistent service. Customers do not know what to expect, suppliers…

Read More

FitSM: A Beginner-to-Advanced Guide to Lightweight IT Service Management and Practical Capability Assessment

Many teams know they need service management but do not have the budget, headcount, or appetite for a large transformation. A research computing center, startup, university department,…

Read More

ISO 22301: A Complete Tutorial on Business Continuity, Impact Analysis, Recovery Planning, and Resilience Testing

A data center loses power, a cloud provider suffers an extended failure, a major supplier becomes unavailable, or a key office cannot be accessed. In these situations,…

Read More

VeriSM Explained: Designing Flexible, Value-Driven Service Management Across the Enterprise

A new employee joins a company. Human resources must confirm employment, IT must provision an account and laptop, security must apply access controls, finance may need to…

Read More
Subscribe
Notify of
guest
0 Comments
Newest
Oldest Most Voted
0
Would love your thoughts, please comment.x
()
x