我们正在使用声明性詹金斯管道, 我们需要在管道中的特定阶段使用默认的编译工具和版本(maven 和 java),而不是使用管道中全局定义的工具和版本。 这意味着:- 我的管道中的阶段之一不应使用全局配置的编译工具。
“管道{ 代理人 { 标签“节点1” } 工具 { 行家'maven3.6.2' jdk'jdk-17-linux' }“
我的管道中的一个阶段不应该使用全局配置的编译工具。
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
}
}
}