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

如何在Jenkins脚本式流水线(scripted pipeline)中使用声明式语法?

脚本式流水线嵌入声明式代码的实现说明

核心结论

可以实现,Jenkins 原生提供pipeline函数,允许在脚本式流水线的任意位置直接包裹声明式风格的代码块,两类语法可以无缝混用。

基础使用方式

在脚本式上下文(可自由实现循环、复杂条件判断、动态变量生成等声明式难以实现的逻辑)的任意位置,插入pipeline {}块即可,块内完全遵循声明式流水线的语法规范,agent、stages、parallel、post等所有声明式原生特性均可正常使用。

示例(结合循环+声明式并行的需求场景):

// 脚本式上下文:实现循环遍历服务列表,声明式很难实现这类动态迭代逻辑
def deployServices = ['user-service', 'order-service', 'pay-service']
for (svc in deployServices) {
    echo "开始处理服务:${svc}"
    
    // 嵌入完整声明式代码块
    pipeline {
        agent any
        stages {
            stage('服务构建部署') {
                // 声明式原生parallel特性,语法比脚本式并行更简洁直观
                parallel {
                    stage('代码编译') {
                        steps {
                            sh "mvn clean package -Dservice=${svc}"
                        }
                    }
                    stage('镜像构建') {
                        steps {
                            sh "docker build -t ${svc}:latest ."
                        }
                    }
                }
            }
        }
        post {
            success {
                echo "服务${svc}部署完成"
            }
            failure {
                echo "服务${svc}部署失败"
            }
        }
    }
}

简化使用场景

如果你只是想使用声明式的某一个简化特性(比如parallel),不需要套完整的声明式结构,可以直接在脚本式中调用对应的语法:

// 脚本式中直接使用声明式风格的并行语法,比自定义多线程逻辑更简单可靠
parallel(
    "单元测试": { sh "mvn test" },
    "代码扫描": { sh "sonar-scanner" },
    "依赖检查": { sh "owasp-dependency-check --scan ./pom.xml" }
)

注意事项

  • 嵌入的声明式pipeline块内的所有语法规则和独立声明式流水线完全一致,不需要额外适配。
  • 脚本式上下文中定义的变量、自定义函数,可以直接在内部的声明式块中调用,不需要额外参数传递。
  • 嵌入的声明式块执行完后会自动回到脚本式上下文,后续的脚本逻辑不受影响。

内容的提问来源于stack exchange,提问作者Salim Fadhley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:15:04