gpt4 book ai didi

Jenkins工具和docker agent的区别

转载 作者:行者123 更新时间:2023-12-05 02:58:08 25 4
gpt4 key购买 nike

抱歉,这可能是一个简单的问题,但使用工具和 docker agent 之间有什么区别。我认为使用 docker agent 比使用工具更灵活。什么时候应该使用 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'
}

Docker 代理

pipeline {
agent none
stages {
stage('Back-end') {
agent {
docker { image 'maven:3-alpine' }
}
steps {
sh 'mvn --version'
}
}

最佳答案

这两个选项的用途略有不同。 tools block 允许您在 PATH 中添加特定版本的 ma​​venjdkgradle 。您不能使用任何版本 - 您只能使用在 Global Tool Configuration Jenkins 页面中配置的版本:

enter image description here

如果您的 Jenkins 配置仅包含一个 Maven 版本,例如 Maven 3.6.3,您只能使用该版本。指定未在全局工具配置中配置的版本将导致您的管道失败。

pipeline {
agent any
tools {
maven 'Maven 3.6.3'
}
stages {
stage('Example') {
steps {
sh 'mvn --version'
}
}
}
}

如果您的 Jenkins 服务器不支持运行 docker 容器,使用 tools block 指定不同版本的受支持工具将是一个不错的选择。

另一方面,docker 代理在指定工具及其版本时给予您完全的自由。它不会限制您使用 ma​​venjdkgradle,并且不需要在您的 Jenkins 服务器中进行任何预配置。您唯一需要的工具是 docker,您可以在 Jenkins 管道中自由使用您需要的任何工具。

pipeline {
agent {
docker {
image "maven:3.6.3-jdk-11-slim"
}
}
stages {
stage('Example') {
steps {
sh 'mvn --version'
}
}
}
}

什么时候使用一个而不是另一个?

这个问题没有唯一的正确答案。这取决于上下文。 tools block 非常有限,但它使您可以控制在 Jenkins 中使用的工具。在某些情况下,人们决定不在他们的 Jenkins 环境中使用 docker,他们更愿意控制他们的用户可以使用哪些工具。我们可以同意也可以不同意。在使用 docker 代理时,您可以完全访问任何可以作为 docker 容器运送的工具。在某些情况下,这是使用特定版本工具的最佳选择——您的操作系统可能不允许您安装所需版本。当然,您需要记住,这种能力和灵 active 是有代价的。您无法控制 Jenkins 管道中使用的工具。此外,如果你拉取大量不同的 docker 镜像,你将增加磁盘空间消耗。更不用说 docker 代理允许您使用可能消耗大量 CPU 和内存的工具来运行管道。 (我看到 Jenkins 管道在没有为该负载做好准备的节点上启动 Elasticsearch、Logstash、Zookeeper 和其他服务。)

关于Jenkins工具和docker agent的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59333227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com