首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用声明性语法在两个不同的代理上运行相同的作业?

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

Stack Overflow用户
提问于 2018-03-27 18:18:57
回答 1查看 556关注 0票数 0

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

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

在Jenkins Pipeline中,我们可以在整个管道中或在特定的stage中声明tools,仅此而已。

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

如果我这样做了:

代码语言:javascript
复制
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"
    }
}

这些工具将只用于这些阶段,而不是所有阶段,并且在每个阶段中制作工具将是愚蠢的。

EN

回答 1

Stack Overflow用户

发布于 2018-03-28 22:45:00

定义在整个流水线中的每个从机上可用的常用工具以及stage部分中的特定工具:

代码语言:javascript
复制
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'
            }
        }
    }
}

在本例中,阶段'test‘的输出是2.2.1,因为我在阶段部分定义了我的工具,这会覆盖全局管道。在阶段random中,我没有在阶段中定义工具,因此使用在全局管道中定义的工具,并打印3.3.9。我希望这就是你的意思。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49510282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档