sem*_*ral 3 jenkins jenkins-pipeline
抱歉,这可能是一个简单的问题,但是使用工具和 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'
}
Run Code Online (Sandbox Code Playgroud)
pipeline {
agent none
stages {
stage('Back-end') {
agent {
docker { image 'maven:3-alpine' }
}
steps {
sh 'mvn --version'
}
}
Run Code Online (Sandbox Code Playgroud)
这两个选项的目的略有不同。该块tools允许您在. 您不能使用任何版本 - 您只能使用在全局工具配置Jenkins 页面中配置的版本:PATH
如果您的 Jenkins 配置仅包含单个 Maven 版本,例如Maven 3.6.3,则只能使用此版本。指定未在全局工具配置中配置的版本将导致管道失败。
pipeline {
agent any
tools {
maven 'Maven 3.6.3'
}
stages {
stage('Example') {
steps {
sh 'mvn --version'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
tools如果您的 Jenkins 服务器不支持运行 docker 容器,则使用块来指定受支持工具的不同版本将是一个不错的选择。
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'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个问题没有单一的正确答案。这取决于上下文。该tools块非常有限,但它使您可以控制 Jenkins 中使用的工具。在某些情况下,人们决定不在 Jenkins 环境中使用 docker,并且他们更愿意控制用户可以使用哪些工具。我们可以同意也可以不同意。在使用docker代理时,您可以完全访问可作为 Docker 容器提供的任何工具。在某些情况下,当使用特定版本的工具时,这是最佳选择 - 您的操作系统可能不允许您安装所需的版本。当然,您需要记住,这种功能和灵活性是有代价的。您失去了对 Jenkins 管道中使用哪些工具的控制。此外,如果拉取大量不同的 docker 映像,则会增加磁盘空间消耗。更不用说docker代理允许您使用可能消耗大量 CPU 和内存的工具来运行管道。(我见过 Jenkins 管道在未准备好负载的节点上启动 Elasticsearch、Logstash、Zookeeper 和其他服务。)
| 归档时间: |
|
| 查看次数: |
1943 次 |
| 最近记录: |