如何在Jenkins种子Job中设置agent none替代指定节点
解决自由风格Job实现Jenkins流水线
agent none的等效设置问题 要让你的自由风格Job实现和流水线agent none一样的效果(在Jenkins控制器/主节点运行,不占用执行器),需要做以下两处修改:
- 清除原来指定的节点标签
- 添加「在控制器上运行」的专属属性
修改后的核心代码片段如下:
def jenkins = Jenkins.getInstance() // 创建文件夹部分保持不变 def projectFolder = new Folder(jenkins, 'system') projectFolder.save() def jobsFolder = new Folder(projectFolder, 'jobs') jobsFolder.save() // DSL构建步骤部分保持不变 def builder = new ExecuteDslScripts() builder.setTargets('jobs/**/*.groovy') // 创建Job部分修改关键配置 def job = jobsFolder.createProject(FreeStyleProject, 'import-build-jobs') job.addProperty( new ParametersDefinitionProperty( [new StringParameterDefinition('Project', 'cicdproj', 'Git project'), new StringParameterDefinition('Repository', 'seed-jobs', 'Git repository'), new StringParameterDefinition('Branch', 'origin/master', 'Branch in repository')] ) ) job.scm = new GitSCM(GitSCM.createRepoList('ssh:....git', 'ssh-key'), [new BranchSpec('origin/main')], false, null, null, null, null) // 1. 清除节点标签设置(替代原来的setAssignedLabel) job.setAssignedLabel(null) // 2. 添加「在控制器上运行」属性,对应流水线的agent none job.addProperty(new RunOnControllerProperty()) job.getBuildersList().add(builder) job.save()
关键说明:
job.setAssignedLabel(null):彻底清除之前指定的sytem标签,避免Job尝试寻找匹配标签的构建节点new RunOnControllerProperty():这个属性会让自由风格Job直接在Jenkins控制器(主节点)运行,不需要占用执行器,完全等效于流水线中的agent none设置
这样修改后,即使主节点的执行器数量设为0,这个Job也能正常运行,和你提到的纯Groovy流水线Job表现一致。
内容的提问来源于stack exchange,提问作者Tony Cooper
相关产品推荐
相关产品推荐

