Jenkins-Pipeline语法示例

文章目录

1.流水线任务

2.Jenkins Pipeline

json 复制代码
pipeline {
    // 指定执行节点,none表示没有全局的agent配置,当为none时,每个stage都必须设置自己的agent
    // agent any
    agent none
    
    options {
        // 超时时间5小时,如果不加unit参数,默认分钟
        timeout(time:5, unit: 'HOURS')
        // 所有输出行都会打印时间戳
        timestamps()
        // 流水线失败后重试次数
        retry(3)
    }
    
    // 参数列表,设置后,参数会自动显示在页面上
    parameters {
        string(name: 'CLUSTER_IP', defaultValue: '192.168.120.11', description: '待升级的集群,选择其中一个节点')
        choice(name: 'DOWNLOAD_SOURCE', choices: ['ftp', 'jfrog'], description: '指定下载源')
        choice(name: 'UPGRADE_VERSION_PREFIX', choices: ['2026.01.x'], description: '待升级版本的前缀')
        booleanParam(name: 'IS_DAILY', defaultValue: true, description: '是否升级日构建版本,True是日构建,False不是日构建')        
    }
    
    // 定义全局变量
    environment {
        APP_NAME = 'Big Data'
    }
    
    // 定义全局变量
    stages {
        stage('Hello') {
            // agent {label 'master'}
            agent {
                node {
                    // 根据标签选定节点
                    label 'master'
                    // 设置默认工作目录
                    customWorkspace 'D:\\JenkinsWorkSpace'
                }
            }
            
            options {
                // 超时时间1分钟,如果不加unit参数,默认分钟
                timeout(time:1, unit: 'SECONDS')
                // 所有输出行都会打印时间戳,该stage会打印两个字符串,全局变量一个,本次一个
                timestamps()
                // 流水线失败后重试次数
                retry(2) 
            }
            
            // 定义局部变量
            environment {
                APP_NAME = 'Small Data'
                APP_VERSION = '2026.01.12'
            }
            
            // 执行一个或多个步骤
            steps {
                // 注意:引用变量时,使用双引号,单引号不生效
                echo "Hello ${env.APP_NAME} ${env.APP_VERSION}"
                echo "CLUSTER_IP: ${params.CLUSTER_IP}"
                echo "DOWNLOAD_SOURCE: ${params.DOWNLOAD_SOURCE}"
                echo "UPGRADE_VERSION_PREFIX: ${params.UPGRADE_VERSION_PREFIX}"
                echo "IS_DAILY: ${params.IS_DAILY}"
            }
            
            // 表示 stage('Hello') 执行失败后的处理,失败后,整个流程阻断
            post {
                failure {
                    echo 'Command execution failed!!!'
                }
            }
        }
        
        // 定义并行执行
        stage('Automated Test') {
            parallel {
                // 并行执行,等所有并行任务执行结束后,再触发下一个步骤执行
                stage('Unit Test') {
                    agent {label 'master'}
                    steps {
                        echo "Hello ${env.APP_NAME} ${env.APP_VERSION}"
                        echo 'Unit Test...'
                        echo "开始等待 5 秒..."
                        sleep(time: 5, unit: 'SECONDS')
                        echo "等待 5 秒结束"
                        echo 'Unit Test End'
                    }
                }
                
                stage('Interface Test') {
                    agent {label 'master'}
                    steps {
                        echo 'Interface Test...'
                        echo "开始等待 10 秒..."
                        sleep(time: 10, unit: 'SECONDS')
                        echo "等待 10 秒结束"
                        echo 'Interface Test End'
                    }
                }
                
                
                stage('Batch Test') {
                    agent {label 'master'}
                    
                    stages {
                        stage('Nested 1') {
                            steps {
                                echo 'Nested 1...'
                                echo "开始等待 10 秒..."
                                sleep(time: 10, unit: 'SECONDS')
                                echo "等待 10 秒结束"
                                echo 'Nested 1 End'
                            }
                        }
                        
                        stage('Nested 2') {
                            steps {
                                echo 'Nested 2...'
                                echo "开始等待 10 秒..."
                                sleep(time: 10, unit: 'SECONDS')
                                echo "等待 10 秒结束"
                                echo 'Nested 2 End'
                            }
                        }
                    }
                }
                
            }

        }
        
        // 所有并行任务执行结束后,才会执行
        stage('World') {
            agent {label 'master'}
            steps {
                echo "Hello ${env.APP_NAME} ${env.APP_VERSION}"
                echo 'World'
            }
        }
        
        stage('Hello Ceph') {
            agent {label 'master'}
            
            // 当DOWNLOAD_SOURCE为ftp时才会执行该stage
            when {
                environment name: 'DOWNLOAD_SOURCE', value: 'ftp'
            }
            
            steps {
                echo "Hello ${env.APP_NAME} ${env.APP_VERSION}"
                echo 'Hello Ceph'
            }
        }
        
        stage('Hello Hadoop') {
            agent {label 'master'}
            
            // 当DOWNLOAD_SOURCE为ftp时或者CLUSTER_IP为192.168.120.11,才会执行该stage
            when {
                anyOf {
                    environment name: 'DOWNLOAD_SOURCE', value: 'ftp'
                    environment name: 'CLUSTER_IP', value: '192.168.120.11'
                }
            }
            
            steps {
                echo "Hello ${env.APP_NAME} ${env.APP_VERSION}"
                echo 'Hello Hadoop'
            }
        }

    }
    
    // 定义构建后的操作
    post {
        // 无论stage的完成状态如何,都会执行
        always {
            echo "I will always say Hello World agent!"
        }
    }
    
}

3.Pipeline参数构建后,自动显示

不需要手动配置参数,在Pipeline语法中配置参数后,会自动显示在页面上

相关推荐
一直有一个ac的梦想2 分钟前
cmu15445 2025fall lec 18 transactions with two-phase lock
java·开发语言·数据库
九皇叔叔3 分钟前
Spring-Ai-Alibaba [04] 04-llm-platform-custom-demo
java·人工智能·spring
技术路上的探险家6 分钟前
Sa-Token 单点登录(SSO)三种模式大白话详解:告别重复登录
java·sa-token·单点登录·sso
JAVA社区17 分钟前
Java进阶全套教程(四)—— SpringMVC框架详解
java·开发语言·spring·面试·职场和发展
ㄣ知冷煖★17 分钟前
统一网关架构实践:从 Token 鉴权到路由、策略与凭证池转发全链路解析
java·服务器·架构
Lumbrologist22 分钟前
【C++】零基础入门 · 第 2 节:变量、基本数据类型与输入输出
java·开发语言·c++
GISer_Jing23 分钟前
Three.JS渲染架构解读
java·javascript·架构
绝知此事33 分钟前
Netty实战:从零构建高性能TCP通信服务(含心跳检测)
java·网络·spring boot·网络协议·tcp/ip
Dicky-_-zhang1 小时前
分布式事务解决方案TCC实战
java·jvm
雨辰AI1 小时前
人大金仓 V9 生产级专用监控大盘(含 120 + 指标 + 告警规则 + 一键导入)
java·开发语言·数据库·mysql·政务