Enabling the Built-in Tekton Hub
TOC
OverviewHow the Switch WorksEnabling the Built-in Tekton HubThe Default on UpgradePinning the Catalog to the Pre-Upgrade ImageDisabling the Built-in Tekton HubOverview
Starting from v4.10.2, a fresh installation no longer deploys the built-in Tekton Hub by default. Tekton catalog artifacts are delivered by the platform's standalone ArtifactHub component instead. ArtifactHub has its own lifecycle, so catalog updates — new tools, Task fixes, version upgrades — can be delivered quickly, independently of the operator release cadence.
The operator still fully supports deploying the built-in Tekton Hub as a transitional option. This guide describes how to enable it, how the new default keeps an existing Tekton Hub working across an operator upgrade, and how to disable it.
If you deploy the standalone ArtifactHub component instead, see Configuring Tekton to Use ArtifactHub Shim to connect the Tekton Hub resolver and DevOps Hub endpoint to it.
The other guides in this section (such as
Tekton HubConfiguration and Custom Catalogs) assume the built-inTekton Hubhas been enabled by following this guide.
The default value of the switch changed in v4.10.2. Earlier release-4.10 versions (v4.10.0 / v4.10.1) deploy the built-in Tekton Hub automatically. After upgrading such an environment to v4.10.2, the existing Tekton Hub is kept (see The Default on Upgrade), not removed.
How the Switch Works
Whether the operator deploys the built-in Tekton Hub is controlled by an operator-level switch: the AUTOINSTALL_TEKTONHUB key in the tekton-config-defaults ConfigMap in the tekton-operator namespace. Its default value is "preserve".
The switch is three-state:
An unset, empty, or unrecognized value maps to "preserve", so a typo can never fall through to the destructive "false" behavior.
"false" actively deletes the TektonHub CR and its workloads. Applying a TektonHub manifest manually while the switch is "false" does not help — the operator removes it again. To deploy the built-in Tekton Hub, set the switch to "true" first.
Enabling the Built-in Tekton Hub
Set the switch to "true". The value is injected into the operator's environment, which is not hot-reloaded — the operator pod must be restarted after changing the ConfigMap.
Restart the operator with kubectl delete pod rather than kubectl rollout restart: on OLM-managed clusters, OLM reverts the restart annotation that rollout restart sets on the Deployment, so the operator pod is never recreated. Deleting the pod takes effect everywhere. The ConfigMap value itself is not reverted by OLM.
The Default on Upgrade
With the default "preserve", upgrading an environment that already runs the built-in Tekton Hub (for example v4.10.1 → v4.10.2) requires no action: the existing Tekton Hub is kept and continues to serve its catalog, so Task and Pipeline references keep resolving. Both the keep and the catalog reuse happen automatically:
- The
TektonHubCR and all built-inTekton Hubworkloads are kept, and the operator waits for the hub to becomeReady. - The catalog
ConfigMapsimported into thekube-publicnamespace (the*-latesttool-imageConfigMaps, the overview-templateConfigMaps, the tool-imageConfigMaps, and the mail-templateConfigMaps) are preserved across the operator's internal upgrade, so the catalog served before the upgrade is the catalog served after it. - The catalog image that this environment already runs is captured and pinned automatically, so the upgrade does not switch the catalog to a tool-image set that may not exist in your registry (particularly relevant for air-gapped installations).
You only need the steps in Pinning the Catalog below when you explicitly enable the built-in Tekton Hub with "true" and want to control which catalog image it uses.
Pinning the Catalog to the Pre-Upgrade Image
The operator bundle no longer ships the tool images referenced by the catalog (buildah, golang, maven, and so on). The tool image versions referenced by the new catalog may therefore not exist in your environment. This is especially true for air-gapped installations, where the image synchronization list of the new version no longer contains these tool images. The tool images referenced by your pre-upgrade catalog, on the other hand, are guaranteed to exist, because they were synchronized together with the previous version.
For this reason, when you re-enable the built-in Tekton Hub after an upgrade, it is recommended to pin the catalog to the pre-upgrade catalog image, so that the upgrade has no impact on your existing pipelines.
Step 1 — before the upgrade, record the current catalog image:
Step 2 — after the upgrade, enable the switch as described above, then pin the recorded image through the TektonConfig CR:
Both names must match exactly, and they fail differently: a mismatched deployment name is silently ignored, while a mismatched init container name does not override catalog-sidecar — it adds a new init container to the deployment, which can prevent the pod from starting. Sub-fields other than options are not accepted under spec.hub for this purpose.
Disabling the Built-in Tekton Hub
If this Hub has custom catalogs and you are switching to artifacthub-shim, first migrate the custom catalog sources and credentials and verify them through the Hub resolver. release-4.10 does not migrate this configuration automatically.
To remove a deployed built-in Tekton Hub, set the switch to "false" and restart the operator in the same way:
The operator then removes the deployed built-in Tekton Hub. When the switch is "false":
- The
TektonHubCR and all built-inTekton Hubworkloads are removed. TheTektonConfigCR staysReady. - The overview-template
ConfigMapsimported with the catalog into thekube-publicnamespace are removed together with theTekton Hub. - The tool-image
ConfigMaps(catalog-tool-image-*) and mail-templateConfigMapsin thekube-publicnamespace are kept. They continue to point at the pre-upgrade tool image addresses, which exist in your registry.
"false" is destructive and opt-in. If you only want to stop deploying a new Tekton Hub while keeping any existing one intact, use the default "preserve" instead — do not set "false".