如何使用声明性语法使用两个不同的代理运行相同的作业?

时间:2018-03-27 10:18:57

标签: jenkins jenkins-pipeline

我在两个不同的操作系统上运行两个作业,所有构建步骤都相同,它是工具(jdk和maven),元数据不同。

我想根据操作系统创建一个包含两个代理上的作业的作业。 我正在使用Jenkins管道声明式语法,问题是我找不到为特定agent声明工具的方法。

在Jenkins管道中,我们可以在整个管道内或特定tools内声明stage,就是这样。

PS:我需要使用声明性语法:不使用node {}

如果我这样做:

stage('Environment Set Up Linux') {
    agent {
        label "linux"
    }
    tools {
        jdk 'oracle-jdk-1.8'
    }
    steps {
        echo "Environment tools have been configured"
    }
}

stage('Environment Set Up Solaris') {
    agent {
        label "solaris-64"
    }
    tools {
        jdk 'oracle-jdk-1.7'
    }
    steps {
        echo "Environment tools have been configured"
    }
}

这些工具仅用于那些不是所有阶段的阶段,并且在每个阶段制作工具都是愚蠢的。

1 个答案:

答案 0 :(得分:0)

定义整个管道中每个从站上可用的常用工具以及阶段部分中的特定工具:

pipeline {
    agent any

    tools {
        maven 'Maven 3.3.9' 
    }


    stages {
        stage('test'){
            tools {
                maven 'Maven 2.2.1' 
            }

            steps {
                sh 'mvn --version'
            }
        }

        stage('random'){
            steps {
                sh 'mvn --version'
            }
        }
    }
}

在这种情况下,阶段'测试'是2.2.1,因为我在阶段部分定义了我的工具,它覆盖了全局管道。在阶段随机中,我在阶段内没有定义工具,因此使用在全局管道中定义的工具并打印3.3.9。我希望这就是你的意思。

在你的情况下,它可能是所有代理都包含jdk1.8并且你想在几乎所有阶段使用它(在管道中定义它),如果有一个阶段你想要使用jdk 1.7,只需定义阶段部分中的工具将覆盖全局配置。