Skip to content

05 JCasC 与工具链配置

全部配置通过 JCasC(Configuration as Code)声明,位于 deploy/jenkins/values.yamlcontroller.JCasC.configScriptsagent.podTemplates,ConfigMap 变更由 k8s-sidecar 自动热加载。

5.1 configScripts 一览

ConfigMap 键内容
systemJenkins 系统消息
sonarcredentials(sonarqube-token,从 secret 文件注入)+ unclassified.sonarGlobalConfiguration(SonarQube 服务器)
jobsjob-dsl 种子任务:toolchain-checkjava-demosonarqube-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)国内加速配置
maven8mavenjenkins/maven:3.9-eclipse-temurin-8/root/.m2/settings.xml 阿里云镜像
maven21mavenjenkins/maven:3.9-eclipse-temurin-21同上
node21nodejenkins/node:21-alpineNPM_CONFIG_REGISTRY=registry.npmmirror.com
golanggolangjenkins/golang:1.24-alpineGOPROXY=goproxy.cn,GOSUMDB=sum.golang.google.cn
pythonpythonjenkins/python:3.12-alpinePIP_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('''...''') 内的 pipeline sh 块必须使用 """(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