主题
05 JCasC 与工具链配置
全部配置通过 JCasC(Configuration as Code)声明,位于 deploy/jenkins/values.yaml 的 controller.JCasC.configScripts 与 agent.podTemplates,ConfigMap 变更由 k8s-sidecar 自动热加载。
5.1 configScripts 一览
| ConfigMap 键 | 内容 |
|---|---|
system | Jenkins 系统消息 |
sonar | credentials(sonarqube-token,从 secret 文件注入)+ unclassified.sonarGlobalConfiguration(SonarQube 服务器) |
jobs | job-dsl 种子任务:toolchain-check、java-demo、sonarqube-demo |
凭据注入(不落盘明文)
yaml
credentials:
system:
domainCredentials:
- credentials:
- string:
scope: GLOBAL
id: "sonarqube-token"
secret: "${readFile:/run/secrets/additional/sonar-token}"sonar-token 来自 K8s Secret sonar-credentials(chart 挂载到 /run/secrets/additional/)。
SonarQube 服务器
yaml
unclassified:
sonarGlobalConfiguration:
buildWrapperEnabled: false
installations:
- name: "sonarqube"
serverUrl: "http://sonarqube.sonarqube.svc.cluster.local:9000"
credentialsId: "sonarqube-token"5.2 工具链 Pod 模板(K8s 弹性 Agent)
通过 chart 的 agent.podTemplates 注入到内置 kubernetes cloud,均 inheritFrom: default (复用 Harbor 的 inbound-agent 作为 jnlp 容器):
| 模板 label | 容器 | 镜像(Harbor) | 国内加速配置 |
|---|---|---|---|
maven8 | maven | jenkins/maven:3.9-eclipse-temurin-8 | /root/.m2/settings.xml 阿里云镜像 |
maven21 | maven | jenkins/maven:3.9-eclipse-temurin-21 | 同上 |
node21 | node | jenkins/node:21-alpine | NPM_CONFIG_REGISTRY=registry.npmmirror.com |
golang | golang | jenkins/golang:1.24-alpine | GOPROXY=goproxy.cn,GOSUMDB=sum.golang.google.cn |
python | python | jenkins/python:3.12-alpine | PIP_INDEX_URL=mirrors.aliyun.com/pypi/simple |
公共卷:jenkins-examples ConfigMap → /examples(示例代码);maven 模板另挂 maven-settings ConfigMap → /root/.m2(settings.xml 指向 https://maven.aliyun.com/repository/public)。
模板示例(maven21):
yaml
- name: maven21
label: maven21
inheritFrom: default
containers:
- name: maven
image: "192.168.122.156:30000/jenkins/maven:3.9-eclipse-temurin-21"
command: "sleep"
args: "99d"
ttyEnabled: true
resourceRequestCpu: "500m"
resourceRequestMemory: "1Gi"
resourceLimitCpu: "2"
resourceLimitMemory: "2Gi"
volumes:
- configMapVolume: { configMapName: jenkins-examples, mountPath: /examples }
- configMapVolume: { configMapName: maven-settings, mountPath: /root/.m2 }5.3 种子任务(job-dsl)
| 任务 | 说明 |
|---|---|
toolchain-check | 并行在 5 个模板上打印版本信息,验证工具链可用 |
java-demo | 从 /examples 复制 Maven 项目,JDK21 构建、单测、归档 jar |
sonarqube-demo | 同一项目执行 mvn verify sonar:sonar 并等待质量门禁 |
嵌套引号注意事项:job-dsl
script('''...''')内的 pipelinesh块必须使用"""(Groovy 三双引号),否则'''会提前终结 DSL 字符串。
5.4 修改配置的方式
bash
# 编辑 values.yaml 后 upgrade;k8s-sidecar 约 1 分钟内自动 reload JCasC
helm upgrade jenkins ./charts/jenkins -n jenkins -f deploy/jenkins/values.yaml