You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins声明式流水线中添加可选Job参数

在Jenkins声明式流水线中实现Job选择参数的方案

我来帮你搞定这个需求!要在Jenkins声明式流水线里加一个选择现有Job的参数,同时避开会阻塞任务的input步骤,核心是实现一个能提前获取Jenkins Job列表的函数,然后在parameters块里调用它就行,具体步骤如下:

1. 实现获取Jenkins Job列表的函数

因为声明式流水线的parameters块是在流水线初始化阶段执行的,所以我们需要一个能在这个阶段运行的函数来获取Job列表。你可以通过全局函数或者Jenkins共享库来实现,这里先给出全局函数的实现方式:

全局函数配置步骤

  1. 进入Jenkins后台,点击「Manage Jenkins」→「Script Console」
  2. 执行以下代码注册全局函数(如果是团队协作,更推荐通过「Manage Jenkins」→「Global Pipeline Libraries」封装成共享库,方便复用):
def call() {
    // 获取Jenkins实例下所有非文件夹类型的Job,同时排除当前流水线本身
    return Jenkins.instance.getAllItems(Job).findAll { job ->
        !(job instanceof Folder) && job.name != env.JOB_NAME
    }.collect { it.name }.sort()
}

你可以根据需求调整过滤逻辑:比如只包含某个特定文件夹下的Job,或者名称带有特定前缀的Job,只需要修改findAll里的条件即可。

2. 在声明式流水线中使用该参数

接下来就可以在流水线代码里直接调用这个函数生成选择参数,同时加上你需要的构建编号参数,完整示例如下:

pipeline {
    agent any
    parameters {
        choice(
            name: 'TARGET_JOB',
            choices: getJenkinsJobs(),
            description: '请选择要操作的目标Job'
        )
        // 添加构建编号参数,这里用string类型,也可以换成number类型
        string(
            name: 'BUILD_NUMBER',
            description: '请输入目标Job的构建编号',
            defaultValue: '1'
        )
    }
    stages {
        stage('处理指定构建') {
            steps {
                script {
                    echo "正在处理目标Job: *${params.TARGET_JOB}*,构建编号: *${params.BUILD_NUMBER}*"
                    
                    // 示例:获取指定构建并处理JUnit测试报告
                    def targetJob = Jenkins.instance.getItem(params.TARGET_JOB)
                    def targetBuild = targetJob.getBuildByNumber(params.BUILD_NUMBER as Integer)
                    
                    if (targetBuild && targetBuild.isSuccessful()) {
                        echo "找到有效构建: ${targetBuild.fullDisplayName}"
                        // 拉取并展示JUnit报告
                        junit "${targetBuild.workspace}/**/TEST-*.xml"
                    } else {
                        error "未找到指定构建编号,或构建状态异常"
                    }
                }
            }
        }
    }
    post {
        always {
            echo "流水线执行完成,相关报告已生成"
        }
    }
}

注意事项

  • 权限问题:确保流水线运行的用户拥有Overall/Read权限,不然无法获取Jenkins的Job列表。
  • 参数时效性:因为parameters块在流水线启动前就会生成选项,所以如果在流水线启动后新增了Job,需要重新触发流水线才能看到新选项。
  • 自定义过滤:如果需要更精准的Job筛选,比如只包含某个项目组的Job,只需要修改getJenkinsJobs()函数里的findAll条件即可。

内容的提问来源于stack exchange,提问作者Kamil Roman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:55:31