如何将Jenkins种子Job中的COMMIT_SHA变量传递到其生成的下游Job
Jenkins种子Job传递COMMIT_SHA参数问题修复方案
问题根因
- Groovy字符串插值规则冲突:种子Job代码中使用三重单引号
'''包裹的字符串不会解析${}占位符,同时你需要让${COMMIT_SHA}在下游Job运行时才读取参数,而非种子Job生成任务时就解析。 cpsScm配置逻辑错误:同时配置scriptText和scriptPath会产生冲突,cpsScm本身就支持直接配置代码仓库信息,不需要将scm块写在scriptText中,错误的嵌套写法导致了未知属性报错。
修复后完整代码
configuration.k8sBuildJobsTest.keySet().eachWithIndex { service, index -> pipelineJob("test-build-k8s-") { def jobIndex = "0${(index + 1).toString().padLeft(2, "0")}" def serviceName = "${configuration.resolveServiceName(service)}" displayName("${jobIndex} - Test Build ${serviceName}") logRotator { numToKeep(20) daysToKeep(30) artifactDaysToKeep(7) artifactNumToKeep(1) } parameters { stringParam("COMMIT_SHA", "", "[Required] Short SHA of the commit used to build the image") } definition { cpsScm { scm { git { remote { url("https://github.myrepo") credentials("access-token") } branches('\${COMMIT_SHA}') } } scriptPath("cicd-azure/pipelines/test_build_k8s_service.jenkins") } } }
核心修改说明
- 移除了错误嵌套的
scriptText配置:cpsScm会自动根据你配置的仓库地址、分支拉取代码,然后执行指定路径的Jenkinsfile,不需要额外定义scm逻辑。 - 分支参数增加转义符:
branches('\${COMMIT_SHA}')中的反斜杠会在种子Job生成任务配置时转义$符号,保证最终生成的下游Job配置中保留${COMMIT_SHA}占位符,下游Job运行时会自动读取入参中COMMIT_SHA的实际值。 - 原有参数定义无需调整:你之前配置的
COMMIT_SHA字符串参数已经可以正常被下游任务识别读取。
内容的提问来源于stack exchange,提问作者prabhakar Reddy G
相关产品推荐
相关产品推荐

