Jenkins 在声明性管道中使用withEnv

Jenkins 在声明性管道中使用withEnv,jenkins,jenkins-pipeline,jenkins-plugins,jenkins-groovy,Jenkins,Jenkins Pipeline,Jenkins Plugins,Jenkins Groovy,我试图在我的声明性管道中运行docker命令,在我的从机上安装docker env,我试图使用docker commons插件“”,但没有成功 我在下面的链接中进一步研究了如何使用这个插件 我已经在manage jenkins->global tool configuration中配置了docker,但在我的jenkins声明性管道中找不到如何使用下面的部分,我认为下面的结构/语法适用于脚本化jenkins管道 def dockerTool = tool name: 'docker', typ

我试图在我的声明性管道中运行docker命令,在我的从机上安装docker env,我试图使用docker commons插件“”,但没有成功

我在下面的链接中进一步研究了如何使用这个插件

我已经在manage jenkins->global tool configuration中配置了docker,但在我的jenkins声明性管道中找不到如何使用下面的部分,我认为下面的结构/语法适用于脚本化jenkins管道

def dockerTool = tool name: 'docker', type: 
'org.jenkinsci.plugins.docker.commons.tools.DockerTool'
withEnv(["DOCKER=${dockerTool}/bin"]) {
   stages{}
}
有人可以帮助我,我如何在jenkins的声明管道中使用docker公共工具。
注意:由于与其他项目的标准化,我无法切换到脚本管道

pipeline{
    agent any
    stages{
        stage('test') {
            steps{
                script{
                    test_env="this is test env"
                    withEnv(["myEnv=${test_env}"]){
                        echo "${env.myEnv}"
                    }
                }
            }
        }
    }
}

我觉得您不需要使用
withEnv
docker commons
。你看到这个了吗? 关于如何将docker与Jenkinsfile一起使用,有很多很好的例子

我试图回答您的问题(如果我答对了的话),如果您询问脚本化
withEnv
的声明等价物,那么您可能正在寻找
环境{}
?大概是这样的:

pipeline {
    agent any

    environment {
        DOCKER = "${dockerTool}/bin"
    }

    stages {
        stage('One') {
            steps {
              // steps here
            }
        }
    }
} 

以下是截至的一个工作声明性管道解决方案

注意:工具名称,
dockerTool
是一个关键字,docker-19.03.11是我在Jenkins>Manage Jenkins>Global tool Configuration页面中给出的安装名称

pipeline {
    agent any
    tools {
        dockerTool 'docker-19.03.11'
    }
    stages {
        stage('build') {
            steps {
                sh'''
                    echo 'FROM mongo:3.2' > Dockerfile
                    echo 'CMD ["/bin/echo", "HELLO WORLD...."]' >> Dockerfile
                '''
                script {
                    docker.withRegistry('http://192.168.99.100:5000/v2/') {
                        def image = docker.build('test/helloworld2:$BUILD_NUMBER')
                    }
                }
            }
        }
    }
}

您是否尝试将此块包含在脚本中?整个管道保持声明性,只编写部分脚本<代码>管道{stages{stage('my stage'){steps{script{dockerTool=tool name:'docker',键入:'org.jenkinsci.plugins.docker.commons.tools.dockerTool'withEnv([“docker=${dockerTool}/bin”]){}}感谢Ram的评论,我已经在我的脚本的stage('my stage'){steps}脚本的下面添加了stage{def dockerTool=toolname:'docker',键入'org.jenkinsci.plugins.docker.commons.tools.dockerTool'withEnv([“docker=${dockerTool}/bin”]){sh“docker version”}}}}}},但失败,错误为org.codehaus.groovy.control.multiplecompiletonErrorsException:启动失败:WorkflowScript:40:预期“}”,在第40行第30列找到“:”。def dockerTool=toolname:'docker',type:'org.jenkinsci.plugins.docker.commons.tools.dockerTool'在声明性管道中,添加def和用于withEnv的脚本的语法似乎不同,您不能使用def。删除def并重试。@Kalim您找到解决方案了吗?我也有同样的问题。官方文档对我也不起作用。谢谢你的评论,事实上我已经试过了,也遇到了同样的错误。我再次检查了我管道中的以下阶段,出现了相同的错误,似乎是冒号和括号的问题。查找我的代码和错误'stage('Docker Test'){steps{script{dockerTool=toolname:'Docker',键入:'org.jenkinsci.plugins.Docker.commons.tools.dockerTool',withEnv([“Docker=${dockerTool}]){echo“Docker version”}}}'org.codehaus.groovy.control.multipleCompositionErrorsException:启动失败:工作流脚本:40:应为“}”,找到“:”@第40行第32列。确定。我假设您在使用ENV时遇到了问题。请你详细说明一下,你到底想做什么?您正在尝试通过管道在从属服务器上安装docker吗?为什么实际上需要docker二进制文件的路径?为了确保这一点,我不会让你们误入歧途。我正试图通过jenkins管理我在从机上的安装,这样第三方软件依赖性就不会在从机上,我的工作应该是独立的。我已经在jenkins的“全局工具配置”中配置了maven构建作业,并在我的管道作业中使用了下面的代码。'withEnv([“PATH+MAVEN=${tool“maven3.6”}/bin”]){sh“mvn clean install”}