一、参数处理

声明式流水线支持很多开箱即用的参数,可以让流水线接收不同的参数以达到不同的构建 效果,在 Directives 小节讲解的参数均可用在流水线中。

在 Jenkinsfile 中指定的 parameters 会在 Jenkins Web UI 自动生成对应的参数列表,此时可以 在 Jenkins 页面点击 Build With Parameters 来指定参数的值,这些参数可以通过 params 变量被成 员访问。

假设在 Jenkinsfile 中配置了名为 Greeting 的字符串参数,可以通过${params.Greeting}访问 该参数,比如:

// Jenkinsfile (Declarative Pipeline)
pipeline {
    agent any

    parameters {
        string(name: 'Greeting', defaultValue: 'Hello', description: 'How should I greet the world?')
    }

    stages {
        stage('Example') {
            steps {
                echo "${params.Greeting} World!"
            }
        }
    }
}

对应的脚本式流水线如下:

// Jenkinsfile (Scripted Pipeline)
properties([
    parameters([
        string(defaultValue: 'Hello', description: 'How should I greet the world?', name: 'Greeting')
    ])
])

node {
    echo "${params.Greeting} World!"
}

二、使用多个代理

流水线允许在 Jenkins 环境中使用多个代理,这有助于更高级的用例,例如跨多个平台执行 构建、测试等。

比如,在 Linux 和 Windows 系统的不同 agent 上进行测试:

// Jenkinsfile (Declarative Pipeline)
pipeline {
    agent none

    stages {
        stage('Build') {
            agent any
            steps {
                checkout scm
                sh 'make'
                stash includes: '**/target/*.jar', name: 'app'
            }
        }

        stage('Test on Linux') {
            agent {
                label 'linux'
            }
            steps {
                unstash 'app'
                sh 'make check'
            }
            post {
                always {
                    junit '**/target/*.xml'
                }
            }
        }

        stage('Test on Windows') {
            agent {
                label 'windows'
            }
            steps {
                unstash 'app'
                bat 'make check'
            }
            post {
                always {
                    junit '**/target/*.xml'
                }
            }
        }
    }
}