对不起,这可能是一个简单的问题,但使用工具和Docker代理之间的区别是什么。我认为使用Docker代理比使用工具灵活得多。我应该什么时候使用Docker代理或工具?
工具
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'
}
}
1条答案
按热度按时间8zzbczxx1#
这两个选项的用途稍有不同。
tools
块允许您在PATH
中添加特定版本的maven、jdk或gradle。您不能使用任何版本-您只能使用在全局工具配置Jenkins页面中配置的版本:如果Jenkins配置仅包含一个Maven版本,例如Maven 3.6.3,则只能使用此版本。指定未在全局工具配置中配置的版本将导致您的管道失败。
如果您的Jenkins服务器不支持运行Docker容器,那么使用
tools
块来指定所支持工具的不同版本将是一个不错的选择。另一方面,
docker
代理在指定工具及其版本时为您提供了完全的自由。它不限制您使用maven、jdk和gradle,也不需要在Jenkins服务器中进行任何预配置。您唯一需要的工具是docker,您可以在Jenkins管道中自由使用任何所需的工具。何时使用一个而不是另一个?
这个问题没有唯一的正确答案。这取决于上下文。
tools
块非常有限,但它让您可以控制在Jenkins中使用哪些工具。在某些情况下,人们决定在他们的Jenkins环境中不使用Docker,而且他们更喜欢控制他们的用户可以使用什么工具。我们可以同意或不同意这一点。当谈到使用docker
代理时,你可以完全访问任何可以作为Docker容器运送的工具。2在某些情况下,当涉及到使用特定版本的工具时,这是最好的选择--你的操作系统可能不允许你安装想要的版本。3当然,你需要记住这种能力和灵活性是有代价的。2你失去了对Jenkins管道中使用什么工具的控制。3而且,如果你拉了大量不同的Docker图像,更不用说docker
代理允许您使用可能会消耗大量CPU和内存的工具来运行管道。(我曾看到Jenkins管道在没有为该负载做好准备的节点上启动Elasticsearch、Logstash、Zookeeper和其他服务。)