Jenkins CASC如何将Groovy脚本定义的作业组织到文件夹中?
Jenkins CASC + Job-DSL 作业文件夹组织配置示例
核心思路
通过CASC创建顶层文件夹,在Job-DSL脚本中使用路径嵌套语法将作业直接指定到目标文件夹内,完全兼容现有CASC和Job-DSL的配置风格。
1. CASC 主配置(jenkins.yaml)
先定义顶层文件夹,再配置Job-DSL加载脚本:
jenkins: systemMessage: "Jenkins configured via CASC" # 创建顶层文件夹(可选,Job-DSL脚本也能自动创建) folders: - name: "ProjectA" description: "ProjectA 所有作业根目录" - name: "ProjectB" description: "ProjectB 所有作业根目录" # 配置Job-DSL插件,加载外部脚本并批准必要语法 unclassified: jobDsl: scriptApproval: approvedScripts: - "folder(String)" - "job(String)" - "scm(git(String, String))" - "steps(shell(String))" # 指向你的Job-DSL脚本文件路径(相对于CASC配置根目录) scripts: - file: "dsl_scripts/project_a_jobs.groovy" - file: "dsl_scripts/project_b_jobs.groovy"
2. Job-DSL 脚本示例(project_a_jobs.groovy)
通过文件夹路径/作业名的格式,直接将作业放入指定文件夹:
// 若CASC未创建顶层文件夹,可在此自动创建 folder('ProjectA') { description 'ProjectA 作业集合' } // 在ProjectA下创建自由风格作业 job('ProjectA/Build_Application') { description '构建ProjectA核心应用' scm { git('https://github.com/your-org/project-a.git', 'main') } steps { shell('./build.sh') } } // 创建多层嵌套文件夹+作业 folder('ProjectA/Automated_Tests') { description 'ProjectA 自动化测试作业目录' } job('ProjectA/Automated_Tests/Unit_Test_Suite') { description '运行ProjectA单元测试' steps { shell('./run_unit_tests.sh') } }
关键注意事项
- Job-DSL中作业路径用斜杠
/分隔,层级会自动创建(无需手动创建所有子文件夹) - CASC的
scriptApproval必须包含脚本中用到的所有DSL语法,否则脚本会被Jenkins拦截 - 若现有Job-DSL脚本是批量生成作业,只需在作业名称前拼接目标文件夹路径即可,无需大幅修改原有逻辑
内容的提问来源于stack exchange,提问作者Traiano Welcome
相关产品推荐
相关产品推荐

