对不起,这可能是一个简单的问题,但使用工具和码头代理之间有什么区别呢?我认为使用对接代理比使用工具灵活得多。我应该什么时候使用码头代理或工具?
工具
pipeline {
agent any
tools {
maven 'Maven 3.3.9'
jdk 'jdk8'
}
stages {
stage ('Initialize') {
steps {
sh '''
echo "PATH = ${PATH}"
echo "M2_HOME = ${M2_HOME}"
'''
}
}
stage ('Build') {
steps {
sh 'mvn -Dmaven.test.failure.ignore=true install'
}码头代理
pipeline {
agent none
stages {
stage('Back-end') {
agent {
docker { image 'maven:3-alpine' }
}
steps {
sh 'mvn --version'
}
}发布于 2019-12-14 12:31:26
这两种选择的目的有点不同。tools块允许您在PATH中添加特定版本的maven、jdk或gradle。您不能使用任何版本-您只能使用在全局工具配置 Jenkins页面中配置的版本:

如果您的Jenkins配置只包含一个Maven版本,例如Maven 3.6.3,则只能使用此版本。指定未在“全局工具配置”中配置的版本将导致管道失败。
pipeline {
agent any
tools {
maven 'Maven 3.6.3'
}
stages {
stage('Example') {
steps {
sh 'mvn --version'
}
}
}
}如果您的Jenkins服务器不支持运行码头容器,那么使用tools块来指定不同版本的受支持的工具将是一个很好的选择。
另一方面,docker代理为您提供了指定工具及其版本的完全自由。它不限制您只使用maven、jdk和gradle,并且不需要在Jenkins服务器中进行任何预配置。您唯一需要的工具是docker,您可以自由使用Jenkins管道中所需的任何工具。
pipeline {
agent {
docker {
image "maven:3.6.3-jdk-11-slim"
}
}
stages {
stage('Example') {
steps {
sh 'mvn --version'
}
}
}
}什么时候用一个而不是另一个?
这个问题没有一个正确的答案。这取决于背景。tools块非常有限,但它允许您控制在Jenkins中使用的工具。在某些情况下,人们决定在Jenkins环境中不使用docker,他们更喜欢控制用户可以使用的工具。不管同意与否,我们都同意。当涉及到使用docker代理时,您可以完全访问可以作为码头容器提供的任何工具。在某些情况下,在使用带有特定版本的工具时,这是最好的选择--您的操作系统可能不允许安装所需的版本。当然,您需要记住,这种能力和灵活性是有代价的。您将失去对Jenkins管道中使用的工具的控制。此外,如果您拉出大量不同的对接图像,您将增加磁盘空间消耗。更不用说,docker代理允许您使用可能消耗大量CPU和内存的工具来运行管道。(我看到Jenkins管道在没有准备好负载的节点上启动Elasticsearch、Logstash、Zookeeper和其他服务。)
https://stackoverflow.com/questions/59333227
复制相似问题