Jenkins工具和Docker代理之间的差异

ohtdti5x  于 2023-03-17  发布在  Jenkins
关注(0)|答案(1)|浏览(169)

对不起,这可能是一个简单的问题,但使用工具和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'
        }
    }
8zzbczxx

8zzbczxx1#

这两个选项的用途稍有不同。tools块允许您在PATH中添加特定版本的mavenjdkgradle。您不能使用任何版本-您只能使用在全局工具配置Jenkins页面中配置的版本:

如果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块来指定所支持工具的不同版本将是一个不错的选择。
另一方面,docker代理在指定工具及其版本时为您提供了完全的自由。它不限制您使用mavenjdkgradle,也不需要在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代理时,你可以完全访问任何可以作为Docker容器运送的工具。2在某些情况下,当涉及到使用特定版本的工具时,这是最好的选择--你的操作系统可能不允许你安装想要的版本。3当然,你需要记住这种能力和灵活性是有代价的。2你失去了对Jenkins管道中使用什么工具的控制。3而且,如果你拉了大量不同的Docker图像,更不用说docker代理允许您使用可能会消耗大量CPU和内存的工具来运行管道。(我曾看到Jenkins管道在没有为该负载做好准备的节点上启动Elasticsearch、Logstash、Zookeeper和其他服务。)

相关问题