Configuration
Central knobs that shape every build: paths, defaults, validation, RBAC, limits, timeouts. All of them live in src/com/qa/config/QAConfig.groovy and the majority can be overridden via Jenkins global environment variables without changing code.
Where to set globals
Manage Jenkins → System → Global properties → Environment variables. Adding or changing a variable there takes effect on the next build — no Jenkins restart required.
Overrides applied via Jenkins env vars:
-
QA_MASTER_SHARED_LIB,QA_MASTER_ENVS_DIR,QA_MASTER_SERVICES_DIR,QA_MASTER_META_DIR,QA_MASTER_SCHEMAS_DIR,QA_MASTER_BACKUPS_DIR,QA_MASTER_EXPORTS_DIR,QA_MASTER_ENV_TEMPLATES_DIR,QA_MASTER_SNAPSHOTS_DIR,QA_AGENT_ENVS_DIR -
QA_DEFAULT_RUNNER,QA_DEFAULT_TTL,QA_DEFAULT_DATABASE -
QA_RBAC_ENABLED,QA_ADMIN_USERS,QA_ADMIN_GROUP -
QA_MAX_ENVS_PER_USER,QA_MAX_ENVS_PER_AGENT,QA_MAX_SERVICES_PER_ENV,QA_MAX_OWNERS_PER_ENV,QA_MAX_DISK_MB -
QA_DEPLOYMENT_TIMEOUT,QA_HEALTH_CHECK_TIMEOUT -
QA_LOG_VERBOSE(see Logging DSL) -
HARBOR_URL,HARBOR_CREDENTIAL_ID
QAConfig.Paths.AGENT_ENVS_DIR defaults to /opt/qa-envs — not the /home/jenkins/agent/qa-envs value mentioned in some older notes. If your agents already have envs under the old path, set QA_AGENT_ENVS_DIR=/home/jenkins/agent/qa-envs to keep them working.
|
QAConfig reference
| Field | Default | Env override |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(derived) |
|
|
(derived) |
|
|
|
|
|
|
|
|
(derived) |
|
|
(derived; legacy) |
|
String constants used for |
|
Allowed values for |
| Field | Default | Env override |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
(compile-time) |
| Field | Default | Env override |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Field | Default | Env override |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Field | Default | Env override |
|---|---|---|
|
|
|
|
|
|
|
|
|
| Field | Default | Env override |
|---|---|---|
|
|
|
|
|
|
|
|
(compile-time) |
|
|
(compile-time) |
Environment variable precedence
The resolver in utils.substituteVariables walks binding sources in this order — the first match wins:
-
Service-specific file:
resources/services/<service>/.envor.env.<db>. -
Global file:
resources/services/.env.<db>. -
Template default inside the Compose block:
${VAR:-default}.
See Variable Substitution for edge cases (:- vs :?, escaping, nested substitution).
meta.json at a glance
Persisted per env under MASTER_ENVS_DIR/<env>/meta.json. Rewritten atomically by utils.atomicWriteMeta. Full schema and field-level notes are in lifecycle.
Registry authentication
-
Private registry: Harbor at
{HARBOR_URL}(defaulthub.friendly-tech.com). -
Credential ID:
{HARBOR_CREDENTIAL_ID}(defaultharbor-cred) — Jenkins username/password credential used bydocker loginand tag-listing API calls. -
Tag listing has an embedded fallback credential inside
createEnvStep.groovyto survive short Harbor outages during parameter render; the actual deploy always uses the Jenkins credential.
Agent selection (Deploy-Environment)
-
No label requirement. Any online agent other than
master/built-inis eligible. -
meta.runneris re-proposed as the default on subsequent deploys. -
Offline agents are filtered out of the dropdown; choosing one is not possible through the UI.
ft-qoe-web — layered .env
Since the layered .env refactor (commit 908c88f), application-level variables for ft-qoe-web live in resources/services/ft-qoe-web/.env under their native, unprefixed names (SERVER_PORT, MAIL_HOST, FTACS_IP_ADDRESS, …) exactly as Spring Boot reads them. A small set of host-side tunables stays in the root .env.<db> under the FT_QOE_WEB_ prefix to avoid port collisions between co-located stacks (commit 7ac5f73).
Host port / JVM mappings — root .env.<db>
| Variable | Default | Description |
|---|---|---|
|
|
Host port for the main listener. HTTP when SSL is off, HTTPS when on. |
|
|
Host port for the plain-HTTP fallback, relevant only when |
|
|
Host port for JDWP. The mapping line is commented out by default — uncomment to enable. |
|
|
Optional JVM heap override injected into |
Application variables — resources/services/ft-qoe-web/.env
| Variable | Default | Description |
|---|---|---|
|
|
Spring profile; selects DB dialect. |
|
|
Container listener port. |
|
|
Secondary plain-HTTP port inside the container (SSL-only). |
|
|
Enable HTTPS on |
|
|
HikariCP — max pool size. |
|
|
HikariCP — min idle. |
|
|
HikariCP — timeout waiting for a free connection (ms). |
|
|
HikariCP — idle retirement (ms). |
|
|
HikariCP — max lifetime per connection (ms). |
|
|
DB user for the Quartz schema. |
|
|
DB user for the QoE UI schema. |
|
|
Hostname of the ACS for API calls (matches the Compose service name). |
|
|
Hazelcast client config dir inside the container. |
|
|
ISP display mode ( |
|
(empty) / |
SMTP settings — commented out by default. |
|
(empty) |
PKCS12 keystore / truststore paths and passwords. |
The historical FT_QOE_WEB_MAIL_*, FT_QOE_WEB_SERVER_SSL_*, and FT_QOE_WEB_ACS_HOST variables no longer exist anywhere in the codebase since the per-service .env split. Any documentation or pipeline still referencing them should be updated to the native names above.
|
ClickHouse connection
CLICKHOUSE_DB_URL is not part of the per-service .env. Compose assembles it for
ft-qoe-web out of the shared CLICKHOUSE_HOST, CLICKHOUSE_HTTP_PORT and
CLICKHOUSE_DATABASE, and appends socket_timeout=120000 so a stalled ClickHouse cannot
pin the connection indefinitely.
the URL resolves the HTTP port (CLICKHOUSE_HTTP_PORT, default 8123), not
the native TCP one (CLICKHOUSE_PORT, default 9000). ft-qoe-web replaced the retired
com.github.housepower native JDBC driver with the official com.clickhouse one, which
speaks HTTP; ftacs reads the same variable after making that move earlier. Both ports stay
published by the clickhouse service, so pointing the URL back at 9000 fails at connect
time rather than being ignored (DEV-2736).
|