Chapter 32Lesson 01~180 minutes

Artifact Repositories, Nexus/Artifactory Integration, Package Promotion, Build Metadata, and Release Traceability: Concepts, Architecture, and Mental Model

Treat a repository as durable release state: publish one exact build output under explicit coordinates, verify its digest and metadata, then promote the same bytes without silently rebuilding them.

RepositoriesImmutable coordinatesDigestsMetadataPromotionTraceability

Learning objectives

  • Explain why Jenkins archives and an external artifact repository solve different problems.
  • Trace source/build identity into repository coordinates, digest and build metadata.
  • Separate upload success, repository acceptance, verification, promotion and downstream consumption.
  • Define promotion as a lifecycle/location change for already-verified bytes.
  • Identify credential, retention and audit state required for release traceability.

1. The problem: “the build produced a file” is not a release process

Jenkins can archive files with a build, which is valuable evidence. A release organization normally also needs durable package coordinates, repository-level permissions, retention, metadata, promotion state, searchability and a stable endpoint from which downstream systems retrieve the exact bytes that passed CI.

Keep ownership boundaries explicit. Jenkins owns job/build execution and its retained run record. Nexus or Artifactory owns repository objects and repository policy. A deployment or package consumer reads repository state. A green upload step proves only that the client command succeeded according to its exit status; it does not independently prove the repository stored the intended coordinate or that a later consumer retrieved the intended digest.

2. Mental model: build once, identify, publish, verify, promote

Mental model: build once, identify, publish, verify, promote
flowchart TD
  A["Source SHA + Jenkinsfile/library ref"] --> B["Jenkins build on agent"]
  B --> C["Artifact bytes"]
  C --> D["SHA-256 + build metadata"]
  D --> E["Candidate repository coordinate"]
  E --> F["Retrieve + verify digest"]
  F --> G{"Promotion policy"}
  G -->|pass| H["Release repository / release status"]
  G -->|fail| I["Stop + preserve evidence"]
  H --> J["Consumer / deployment"]
  J --> K["Trace to job + build + source"]
  

A source SHA identifies source, a build number identifies one Jenkins execution, coordinates identify repository location, and a digest identifies bytes. Build metadata links those identities. Promotion changes repository or lifecycle state. Consumption and deployment remain separate external states.

3. Repository vocabulary

Term What it means Evidence
Coordinates Repository key/path plus namespace/name/version/classifier or raw path. Exact repository URL/path and version.
Immutable release A coordinate whose bytes are not replaced after acceptance. No-redeploy policy plus retained digest.
Build metadata Machine-readable link from object to producer job/build/source. Job, build URL/number, source SHA, digest, tool/dependency data.
Promotion Copy/move/status transition of already-built bytes after verification. Source/target coordinate, actor, response/status, before/after digest.
Retention Rules controlling object/metadata lifetime. Repository retention/lifecycle policy.
Consumer identity Who retrieved/deployed which release. Environment/deployment ID and consumed digest.

4. Jenkins archive versus external repository

archiveArtifacts is ideal for evidence tied to a Jenkins run. A repository manager is designed for package consumers and release lifecycle.

Concern Jenkins archived artifact External repository
Identity Job + build + archived path/fingerprint Repository coordinates + digest
Consumers People/downstream Jenkins/audit Package managers, deployment tooling, many clients
Retention Jenkins build retention Repository retention policy
Promotion Custom workflow Repository-native copy/move/status/build promotion
Release durability Coupled to Jenkins storage/history Independent release distribution state

5. State ledger

Jenkins

Core/Java/plugin baseline, item full name, build number/URL/cause, source and Jenkinsfile/library revision.

Execution

Agent/node/label/executor/workspace and tool versions.

Artifact

Filename, size, SHA-256, producer source/build and sensitivity.

Repository

Server/repository key, coordinates, acceptance response, retention class.

Promotion

Source/target, policy decision, actor, timestamp and digest continuity.

Consumer

Which system retrieved which digest for which release/environment.

6. Inspect before any repository mutation

Capture local identity first, before changing coordinates or retrying an upload.

set -euo pipefail
printf 'source_sha='; git rev-parse HEAD
printf 'job=%s build=%s\n' "${JOB_NAME:-local-lab}" "${BUILD_NUMBER:-0}"
printf 'node=%s workspace=%s\n' "${NODE_NAME:-local}" "${WORKSPACE:-$PWD}"
ls -lh dist/ 2>/dev/null || true
sha256sum dist/* 2>/dev/null || true

For a real repository, add read-only checks for repository identity, target coordinate and redeploy policy. If a release coordinate already exists, stop and compare evidence rather than overwriting it.

7. Nexus and Artifactory integration boundaries

Nexus raw hosted repositories support direct HTTP PUT to explicit paths; format-aware repositories have package-specific semantics and component APIs. Artifactory can associate files with Build-Info and promote builds by name/number to a target repository. Jenkins plugins can simplify those interactions, but plugins are privileged controller dependencies and require version/advisory/compatibility governance.

8. DevOps connection

Chapter 31 established digest-bound supply-chain evidence and the rule “do not rebuild during promotion.” Chapter 32 turns that rule into release operations: publish the verified candidate, record where it came from, retrieve and check it, promote the same bytes, and retain a trace from release back to Jenkins build and source.

Next

Build the workflow

Lesson 2 publishes a unique candidate into a disposable local repository, verifies retrieval, attaches metadata and promotes the same bytes into a release namespace.

Knowledge check

Answer before revealing the explanation.

1. Why is a successful upload command not enough to prove publication?

2. What should change during promotion?

3. Why is a package version not sufficient release identity?

4. Do external repositories make Jenkins archived artifacts useless?

Official references and version notes

Repository formats, Jenkins plugins, credentials models and promotion APIs evolve; prefer current primary documentation.

Keep the academy open

Support free, practical DevOps education.

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

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