如何忽略全局配置的编译工具(maven、java)中的特定阶段

问题描述 投票:0回答:1

我们正在使用声明性詹金斯管道, 我们需要在管道中的特定阶段使用默认的编译工具和版本(maven 和 java),而不是使用管道中全局定义的工具和版本。 这意味着:- 我的管道中的阶段之一不应使用全局配置的编译工具。

“管道{ 代理人 { 标签“节点1” } 工具 { 行家'maven3.6.2' jdk'jdk-17-linux' }“

我的管道中的一个阶段不应该使用全局配置的编译工具。

maven jenkins-pipeline jenkins-groovy
1个回答
0
投票

您可以特别遵循 Jenkinsfile 语法和

tools
指令上的文档:

定义自动安装并放在路径上的工具的部分。如果未指定代理,则忽略此设置。

...

允许

在管道块或阶段块内。

并尝试以下示例:

// Jenkinsfile
pipeline {
  agent {
    label "node-1"
  }
  tools { // these would be "default"
    maven 'maven3.6.2'
    jdk 'jdk-17-linux'
  }
  stage('Stage one') {
    steps {
      // steps that use the "default" tools
    }
  }
  stage('Stage two') {
    tools {
      maven 'maven3.6.3'
      jdk 'jdk-11-linux' 
    }
    steps {
      // steps that use the "custom" tools
    }
  }
  stage('Stage three') {
    steps {
      // steps that use the "default" tools
    }
  }
}

然而,更好的方法是应用相同的原则,但使用 Docker 容器作为构建环境(容器版本仅作为示例):

// Jenkinsfile
pipeline {
  agent {
    docker {
      image 'maven:3.9.6-eclipse-temurin-17-alpine'
      args '-v $HOME/.m2:/root/.m2'
    }
  }
  stage('Stage one') {
    steps {
      // steps that use the "default" environment
    }
  }
  stage('Stage two') {
    agent {
      docker {
        image 'maven:3.9.6-eclipse-temurin-11-alpine'
        args '-v $HOME/.m2:/root/.m2'
        reuseNode true // to save time on checkout
      }
    }
    steps {
      // steps that use the "custom" environment
    }
  }
  stage('Stage three') {
    steps {
      // steps that use the "default" environment
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.