ワンクリックで
e2e-deploy-rhdh
// Deploy RHDH to an OpenShift cluster using local-run.sh for E2E test execution, with autonomous error recovery for deployment failures
// Deploy RHDH to an OpenShift cluster using local-run.sh for E2E test execution, with autonomous error recovery for deployment failures
Workflow to backport Backstage changes into RHDH by syncing a downstream maintenance branch and generating yarn patches.
Workflow to backport Backstage changes into RHDH by syncing a downstream maintenance branch and generating yarn patches.
Analyze a failing E2E test, determine root cause, and fix it using Playwright Test Agents and RHDH project conventions
Parse a Prow CI job URL or Jira ticket to extract E2E test failure details including test name, spec file, release branch, platform, and error messages
Run a specific failing E2E test against a deployed RHDH instance to confirm the failure and determine if it is consistent or flaky
Create a PR for an E2E test fix, trigger Qodo agentic review, address review comments, and monitor CI results
| name | e2e-deploy-rhdh |
| description | Deploy RHDH to an OpenShift cluster using local-run.sh for E2E test execution, with autonomous error recovery for deployment failures |
Deploy Red Hat Developer Hub to a cluster for E2E test execution using the existing local-run.sh workflow.
Use this skill when you need a running RHDH instance to reproduce and fix a test failure.
Before running the deployment, verify these tools are installed:
# Required tools (local-run.sh checks these automatically)
podman --version # Container runtime
oc version # OpenShift CLI
kubectl version --client # Kubernetes CLI
vault --version # HashiCorp Vault (for secrets)
jq --version # JSON processor
curl --version # HTTP client
rsync --version # File sync
bc --version # Calculator (for resource checks)
The podman machine must be running with adequate resources:
podman machine inspect | jq '.Resources'
# Requires: >= 8GB RAM, >= 4 CPUs
If resources are insufficient:
podman machine stop
podman machine set --memory 8192 --cpus 4
podman machine start
The primary deployment method uses e2e-tests/local-run.sh, which handles everything:
Vault authentication, cluster service account setup, RHDH deployment, and test execution.
CRITICAL — deployment is a long-running operation:
local-run.sh in the background. Operator installations can take 20-30 minutes. Use the Bash tool with timeout: 600000 (10 minutes) and if it times out, check the container log — do NOT assume failure.podman ps --format "{{.Names}} {{.Status}}" | grep -i rhdh-e2e-runner
If a deployment container is already running, wait for it to finish instead of starting a new one. Monitor via the container log:
tail -f e2e-tests/.local-test/container.log
podman ps shows no running container)CRITICAL: CLI mode requires all three flags (-j, -r, -t). If -r is omitted, the script falls into interactive mode and will hang in automated contexts.
cd e2e-tests
./local-run.sh -j <full-prow-job-name> -r <image-repo> -t <image-tag> [-s]
Example — OCP job (deploy-only with -s):
cd e2e-tests
./local-run.sh -j periodic-ci-redhat-developer-rhdh-main-e2e-ocp-v4-20-helm-nightly -r rhdh-community/rhdh -t next -s
Example — K8s job (AKS/EKS/GKE) (full execution, no -s):
cd e2e-tests
./local-run.sh -j periodic-ci-redhat-developer-rhdh-main-e2e-eks-helm-nightly -r rhdh-community/rhdh -t next
Parameters:
-j / --job: The full Prow CI job name extracted from the Prow URL. The openshift-ci-tests.sh handler uses bash glob patterns (like *ocp*helm*nightly*) to match, so the full name works correctly. Example: periodic-ci-redhat-developer-rhdh-main-e2e-ocp-v4-20-helm-nightly-r / --repo: Image repository (required for CLI mode — without it the script enters interactive mode)-t / --tag: Image tag (e.g., 1.9, next)-s / --skip-tests: Deploy only, skip test execution. OCP jobs only — K8s jobs (AKS, EKS, GKE) do not support this flag and require the full execution pipelineWARNING: Do NOT use shortened job names like nightly-ocp-helm for -j — these do not match the glob patterns in openshift-ci-tests.sh.
Refer to the e2e-fix-workflow rule for the release branch to image repo/tag mapping table.
For OCP jobs, deploy without running tests so you can run specific tests manually:
./local-run.sh -j <full-prow-job-name> -r <image-repo> -t <tag> -s
Note: K8s jobs (AKS, EKS, GKE) do not support deploy-only mode. They require the full execution pipeline — run without -s.
quay.io/rhdh-community/rhdh-e2e-runner:mainrhdh-local-tester service account with cluster-admin, generates 48h token.local-test/rhdh/ (excludes node_modules)container-init.sh inside the runner image, which:
/tmp/secrets/.ci/pipelines/openshift-ci-tests.sh for deploymentAfter local-run.sh completes (with -s for OCP jobs, or after full execution for K8s jobs), set up the environment for headed Playwright testing:
# Source the test setup (choose 'showcase' or 'rbac')
source e2e-tests/local-test-setup.sh showcase
# or
source e2e-tests/local-test-setup.sh rbac
This exports:
BASE_URL — The RHDH instance URLK8S_CLUSTER_URL — Cluster API server URLK8S_CLUSTER_TOKEN — Fresh service account tokenVerify RHDH is accessible:
curl -sSk "$BASE_URL" -o /dev/null -w "%{http_code}"
# Should return 200
Symptoms: Pod repeatedly crashes and restarts.
Investigation:
# Check pod status
oc get pods -n <namespace>
# Check pod logs
oc logs -n <namespace> <pod-name> --previous
# Check events
oc get events -n <namespace> --sort-by=.lastTimestamp
Common causes and fixes:
.ci/pipelines/resources/config_map/ for the correct templatedynamic-plugins-config ConfigMap against .ci/pipelines/resources/config_map/dynamic-plugins-config.yamlInvestigation:
oc describe pod -n <namespace> <pod-name> | grep -A5 "Events"
Common causes:
curl -s 'https://quay.io/api/v1/repository/rhdh/rhdh-hub-rhel9/tag/?filter_tag_name=like:<tag>'namespace::setup_image_pull_secret in .ci/pipelines/lib/namespace.shInvestigation:
helm list -n <namespace>
helm status <release-name> -n <namespace>
Common causes:
.ci/pipelines/value_files/values_showcase.yamlhelm::get_chart_version from .ci/pipelines/lib/helm.shInvestigation:
oc get backstage -n <namespace>
oc describe backstage <name> -n <namespace>
oc get csv -n <namespace> # Check operator subscription status
Common causes:
.ci/pipelines/resources/rhdh-operator/rhdh-start.yamlk8s_wait::crd pattern from .ci/pipelines/lib/k8s-wait.shWhen deployment issues stem from the operator or chart, search the relevant repos using whichever tool is available. Try them in this order and use the first one that works:
rhdh-operator and rhdh-chart repos for specific error patterns or configuration keysredhat-developer/rhdh-operator or redhat-developer/rhdh-chart for docs and code snippetsgh search code: gh search code '<pattern>' --repo redhat-developer/rhdh-operator or redhat-developer/rhdh-chartKey areas to look for:
.ci/pipelines/openshift-ci-tests.sh, .ci/pipelines/utils.sh.ci/pipelines/lib/helm.sh, .ci/pipelines/lib/operators.sh, .ci/pipelines/lib/k8s-wait.sh, .ci/pipelines/lib/testing.sh.ci/pipelines/value_files/.ci/pipelines/resources/config_map/.ci/pipelines/resources/rhdh-operator/.ci/pipelines/env_variables.sh