【问题标题】:Is it possible to execute Jenkins pipeline on an agent, within an agent?是否可以在代理内的代理上执行 Jenkins 管道?
【发布时间】:2022-01-05 20:10:59
【问题描述】:

具体来说,我想将每个构建移交给 VM 上的代理,然后该代理将发送管道以完全在 docker 代理中执行和构建

【问题讨论】:

    标签: jenkins jenkins-pipeline cicd


    【解决方案1】:

    我不确定我是否完全理解了这个问题,但是你可以在代理中运行 docker 容器“代理”。

    例如在这里,我选择了一个支持 docker 的代理来运行构建,然后使用 Python 容器来运行某些步骤

    pipeline {
        agent { label "docker-capable" }
        options {
            timestamps()
        }
        stages {
            stage("Build the Lambda") { // Runs in container on agent
                agent {
                    docker {
                        image "python:3.7"
                        reuseNode true
                        args "-v /usr/bin/zip:/usr/bin/zip"
                    }
                }
                environment {
                    HOME = "/tmp"
                }
                steps {
                    sh "make release"
                }
            }
            stage("Release if Required") { //Runs on agent
                when {
                    anyOf {
                        branch 'master'
                        branch 'main'
                    }
                    not { buildingTag() }
                }
                steps {
                    script {
                        publishRelease()
                    }
                }
            }
    

    您也可以在同一个容器中运行多个阶段,例如

            stage("Python Module Testing") {
                agent {
                    docker {
                        image "python:3.7"
                        reuseNode true
                    }
                }
                environment {
                    HOME = "/tmp"
                    // Resolve dependencies
                    PYTHONPATH = "${WORKSPACE}/package"
                }
                stages {
                    stage("Deps") {
                        steps {
                            sh("pip install --user --no-cache-dir pylint flake8")
                        }
                    }
                    stage("Pylint") {
                        steps {
                            sh("pylint .")
                        }
                    }
                    stage("Flake8") {
                        steps {
                            sh("flake 8 .")
                        }
                    }
    

    如果您的意思是可以在一个代理上运行一些阶段,在另一个代理上运行一些阶段,那么您也可以在管道顶部不指定和代理阻止,而是为每个阶段执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 2018-04-16
      相关资源
      最近更新 更多