WIP: jenkins: rank the controller above its own build agents #49
Draft
hermes-automation
wants to merge 1 commits from
fix/t_39cf1905-jenkins-controller-priority into main
pull from: fix/t_39cf1905-jenkins-controller-priority
merge into: titan:main
titan:main
titan:feature/hermes-agent-build-mirrors
titan:feature/hermes-agent-multiarch
titan:feature/hermes-next-hux
titan:feature/hermes-hux-contracts
titan:feature/t_39cf1905-webui-build-token
titan:feature/t_26da4c88-titan-capacity-guardrails-v4
titan:feature/t_26da4c88-titan-capacity-guardrails-v3
titan:feature/t_26da4c88-titan-capacity-guardrails-v2
titan:feature/t_26da4c88-titan-capacity-guardrails
titan:feature/t_8cbe6a55-hermes-webui-release-v2
titan:feature/t_8cbe6a55-hermes-webui-release
titan:feature/hermes-domain-rename-agent-worker-v2
titan:hermes/t_65356568-multiuser-capacity-assessment
titan:fix/cli-auto-failover-effort
titan:feature/hermes-pr44-after-pr43
titan:fix/hermes-heartbeat-dead-reclaim-replacement
titan:handoff/t_1a2c627b
titan:feature/hermes-combined-multilingual-voice-v2
titan:fix/hermes-handsfree-stt-webm
titan:fix/hermes-restore-legacy-chat-triage-hosts-v2
titan:feature/hermes-domain-rename-agent-worker-bstein
titan:fix/hermes-restore-legacy-chat-triage-hosts-v3
titan:hermes/tts-voice-multilingual-prerequisite
titan:fix/hermes-restore-legacy-chat-triage-hosts
titan:fix/hermes-oidc-ensure-rerun-hostname-rollout
titan:feature/hermes-direct-cli-lane-concurrency-2-replacement
titan:feature/hermes-domain-rename-chat-bstein-triage
titan:feature/hermes-kanban-profile-concurrency-2
titan:feature/hermes-zombie-lane-heartbeat-reclaim
titan:hermes/repair-pr26-voice-split
titan:feature/hermes-durable-two-worker-cli-concurrency
titan:hermes/chat-voice-conversation-instrument
titan:feature/hermes-domain-rename-chat-triage
titan:hermes/voice-stt-tts-language-routing
titan:hermes/voice-stt-language-routing
titan:hermes/tts-voice-multilingual
titan:fix/hermes-chat-session-continuity-contract
titan:hermes/tts-voice-hfc-female
titan:hermes/fix-grafana-no-data-vm-storage
titan:feature/ci-gitops
titan:fix/jenkins-quality-gate-discovery
titan:feature/hermes-inpod-supervisor
titan:feature/hermes-chat-smoothness
titan:wt/t_1e95ea6d
titan:feature/hermes-full-handoff-acceptance
titan:feature/hermes-distributed-worker-pool
titan:feature/hermes-review-goal-semantics
titan:feature/hermes-cli-auto-quota-routing
titan:fix/hermes-result-decomposition-reliability
titan:feature/hermes-safe-gitea-pr-client
titan:feature/hermes-unprivileged-image-builder
titan:feature/hermes-cli-process-reaping
titan:feature/hermes-three-lane-placement
titan:wt/t_cca008de
titan:codex/cassandra-generator-08105
titan:cassandra-0851-rollout
titan:cassandra-0821-deploy
titan:codex/testing-dashboard-health-20260604
titan:feature/ariadne
titan:feature/pi-usb-scratch-rollout
titan:feature/sso-hardening
titan:codex/titan-iac-work-quality-gate
titan:codex/titan-iac-main-platform-metrics
titan:codex/titan-iac-platform-metrics
titan:feature/atlas-jobs-schedule-observability
titan:lane2/jenkins-cleanup-activate
titan:lane2/jenkins-cleanup-wiring-split
titan:codex-ananke-fixes
titan:feature/atlasbot-ananke-recovery
titan:feature/atlasbot
titan:deploy
titan:feature/vault-consumption
titan:feature/postgres-migration
titan:feature/bstein-dev-home
titan:feature/mailu
titan:feature/sso
titan:feature/atlas-monitoring
titan:restructure/hybrid-clusters
titan:fea/titan24-gpu
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
No description provided.
Delete Branch "fix/t_39cf1905-jenkins-controller-priority"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
The Jenkins controller has been
Pendingsince 12:19:59Z today, which keeps FluxjenkinsatReady=Falseand blockshermesandhermes-chatbehind it. This is aself-deadlock in scheduling priority, not a transient capacity dip, so it does not
clear on its own.
What happened
The controller and the ephemeral build agents it schedules all run at priority 0. The
controller Deployment uses the
Recreatestrategy, so a JCasC change tears the old poddown before the replacement is scheduled.
Merging #48 changed
services/jenkins/configmap-jcasc.yaml, which rolled the hashedjenkins-jcasc-revisionConfigMap (d6m9hfkg68->45ddd9bt2f) and so rolled theDeployment:
12:19:57Zold controller podjenkins-547476b857-gxkdsdeleted, freeing titan-1112:19:59Zbuild agenttyphon-133-1pmgb(pending since11:42:15Z) takes that slot12:19:59Znew controller podjenkins-7cfc78d57-fjrbpcreated, immediately unschedulableIt cannot recover:
"No preemption victims found for incoming pod".jnlpcontainer only loops on"Connection refused"against the controller that cannot start (restarts=0).hardware=rpi5, minus titan-13/15/17/19) leavesexactly three eligible nodes, and all three are at or near CPU saturation:
titan-07 3597/3600m, titan-08 3599/3600m, titan-11 3284/3600m.
Change
jenkins-core(500) andjenkins-agent(50,preemptionPolicy: Never),following the existing
*-core/*-simclasses.priorityClassName: jenkins-coreon the controller so it outranks its agents andcan preempt one when it has nowhere else to go.
priorityClassName: jenkins-agenton the JCasC default agent template so agentsnever preempt anything themselves.
dependsOn: coreto thejenkinsFlux Kustomization, since PriorityClasses shipin
infrastructure/modules/baseviacore(matches cassandra and veles).The controller-side class is the part that actually breaks the deadlock. Agents declared
inline by a Jenkinsfile
podTemplate— liketyphon-133— do not inherit the JCasCdefault template, so only the controller's own priority covers every agent.
Verification
kubectl kustomizerenders clean forservices/jenkins,infrastructure/core, andthe priorityclass module.
mainis exactly: the twopriorityClassNameadditions, theexpected
jenkins-jcasc-revisionhash roll (45ddd9bt2f->9k4gg827b8), and thecontroller class. No image, resource, or affinity drift.
speckeys areaffinity, nodeSelector, priorityClassName, securityContext, topologySpreadConstraints.coreitself has nodependsOn.Repo test suites were not run here — this environment has no
pytest, and the repo'sgate runs on the Jenkins controller this PR is meant to restore.
Note
Merging this rolls the controller again (the JCasC hash changes). That is intended: the
new pod carries
jenkins-coreand can preempt the stuck agent, which is what clears thedeadlock through the Git/Flux path rather than by hand.
This PR is Part A of t_39cf1905 only. No image has been published and no digest pin is
included; the WebUI release lane still needs a healthy controller before it can run.
Checkout
From your project repository, check out a new branch and test the changes.