CI
Review environments
The review environments are automatically uninstalled after 1 hour. If you need the review environment to stay up longer, you can pin the environment
on the Environments page. However, make sure to manually trigger the jobs
in the Cleanup stage when you’re done. This helps to ensure that the clusters have enough resources to run review apps for other merge requests.
See the environments documentation for more information.
Token Management
Read about our IaC managed Project Access Tokens.
OpenShift CI clusters
We manage OpenShift clusters in Google Cloud that are used for acceptance tests, including QA suite.
kubeconfig files for connecting to these clusters are stored in the 1Password cloud-native vault. Search for ocp-ci.
The clusters are orchestrated using the openshift-provisioning
project. CI access is managed using kube-agents .
k3d cluster tests
The k3d trigger job in .gitlab/ci/review-k3d.gitlab-ci.yml holds a parallel:matrix with one row per
tested Kubernetes version. Each row spawns a child pipeline from
.gitlab/ci/k3d-version-pipeline.gitlab-ci.yml whose review_k3d job creates a single-use
k3d cluster inside the job’s Docker-in-Docker environment. The job deploys the
operator and a GitLab custom resource, runs the QA smoke suite against it over a
nip.io domain, and destroys the cluster when the job ends. The jobs have no
GitLab environment or cleanup job because nothing outlives the job.
These jobs run on the privileged e2e runner fleet.
The primary version (matrix row with K3D_PRIMARY: "primary") runs automatically on merge request
and branch pipelines. The other versions are manual there, and all versions run automatically on
nightly (scheduled), stable-branch, and default-branch pipelines.
Chart-version pipelines are already at the maximum descendant-pipeline depth, so they run the same
test as the direct review_k3d_chart_version job with the same matrix instead of the trigger job.
Tested configurations
The review jobs cover these combinations of operator scope and Ingress path:
| Job | Kubernetes | Operator scope | Ingress path |
|---|---|---|---|
k3d: [v133] | 1.33 | Cluster-wide | Chart-bundled NGINX controller, HTTP |
k3d: [v134] | 1.34 | Cluster-wide | Chart-bundled NGINX controller, HTTP |
k3d: [v135] (primary) | 1.35 | Namespaced | Chart-managed Envoy Gateway, HTTP |
review_vcluster135 | 1.35 | Cluster-wide | Chart-bundled NGINX controller, TLS |
review_vcluster_flux | 1.35 | Cluster-wide | Chart-managed Envoy Gateway, TLS |
review_ocp | OpenShift | Cluster-wide | Pre-provisioned external gateway, TLS |
The namespaced operator (CLUSTER_MODE: "false") deploys with nginx-ingress.create=false, so it
does not create the cluster-scoped resources (IngressClass, RBAC) that the chart-bundled NGINX
controller requires to start. Namespaced rows therefore pair with Gateway API instead. The k3d jobs
serve plain HTTP because a single-use cluster has no pre-provisioned wildcard TLS certificate.
Add or remove a Kubernetes version
Edit the parallel:matrix in .gitlab/ci/review-k3d.gitlab-ci.yml. Each row sets:
K3D_K8S_IMAGE: therancher/k3simage tag that pins the Kubernetes version.K3D_K8S_VERSION_SLUG: a short label, for examplev135, used in the child pipeline name.CLUSTER_MODE:"true"for the cluster-wide operator,"false"for the namespaced operator.- Optional.
K3D_PRIMARY: "primary"on exactly one row: the version that runs automatically on merge request pipelines. - Optional.
TEST_CR_FILES_DIRandINSTALL_ENVOY_GATEWAY: "true"for the Gateway API/Envoy variant instead of the default NGINX Ingress overlay.
The shared vcluster environments are also being migrated to k3d. See epic &98 for the migration plan.
QA pipelines
By default, QA pipelines will include Smoke suite - a small subset of fast end-to-end functional tests
to quickly ensure that basic functionality is working. If additional testing is required, it’s possible to trigger manual
QA pipeline with Full suite of end-to-end tests using qa_<cluster>_full_suite_manual_trigger job for the specific cluster.
To debug failures in tests, please follow investigate QA failures guide.
Container builds
The Operator image can be built for multiple architectures, by configuring a Kubernetes buildx driver using the BUILDX_K8S_*
variables. Set the BUILDX_ARCHS to a comma-separated string of the target architectures (for example amd64,arm64).
If BUILDX_K8S_DISABLE is set to true - automatically reduces number of platforms to build for down to amd64.
If no Kubernetes driver is configured you can (cross-) compile only one architecture.
DockerHub rate limits
By default, CI uses images from DockerHub. The shared runners by default use a
mirror to avoid hitting DockerHub rate limits. If you use custom runnners, that
don’t use caching or mirroring, you should enable the dependency proxy
by setting the DOCKERHUB_PREFIX to your proxy, for example
DOCKERHUB_PREFIX: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}, and
DEPENDENCY_PROXY_LOGIN="true".
The container build context by default uses the gcr DockerHub mirror. This
behavior can be changed by overriding the DOCKER_OPTIONS or DOCKER_MIRROR
variables.