Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins管道跨越多个Docker图像_Docker_Jenkins_Jenkins Pipeline - Fatal编程技术网

Jenkins管道跨越多个Docker图像

Jenkins管道跨越多个Docker图像,docker,jenkins,jenkins-pipeline,Docker,Jenkins,Jenkins Pipeline,在Jenkins中使用声明性管道,如何跨docker映像的多个版本运行阶段。我想在Python2.7、3.5和3.6上执行以下Jenkins文件。下面是一个管道文件,用于在docker容器中构建和测试python项目 pipeline { agent { docker { image 'python:2.7.14' } } stages { stage('Build') { steps { sh 'pip instal

在Jenkins中使用声明性管道,如何跨docker映像的多个版本运行阶段。我想在Python2.7、3.5和3.6上执行以下Jenkins文件。下面是一个管道文件,用于在docker容器中构建和测试python项目

pipeline {
  agent {
    docker {
      image 'python:2.7.14'
    }
  }

  stages {
    stage('Build') {
      steps {
        sh 'pip install pipenv'
        sh 'pipenv install --dev'
      }
    }

    stage('Test') {
      steps {
        sh 'pipenv run pytest --junitxml=TestResults.xml'
      }
    }
  }

  post {
    always {
      junit 'TestResults.xml'
    }
  }
}
确保相同步骤在python 3.5和3.6中成功的最小代码量是多少?希望是,如果测试失败,很明显测试在哪个版本上失败

或者我所要求的对于声明性管道来说是不可能的(例如,脚本化管道可能是最优雅地解决这个问题的方法)


作为比较,这就是为什么。

我不得不求助于一个脚本化的管道,并结合所有的阶段

def pythons = ["2.7.14", "3.5.4", "3.6.2"]

def steps = pythons.collectEntries {
    ["python $it": job(it)]
}

parallel steps

def job(version) {
    return {
        docker.image("python:${version}").inside {
            checkout scm
            sh 'pip install pipenv'
            sh 'pipenv install --dev'
            sh 'pipenv run pytest --junitxml=TestResults.xml'
            junit 'TestResults.xml'
        }
    }
}
生成的管道看起来像

理想情况下,我们能够将每个工作分解为几个阶段(设置、构建、测试),但是
用户界面()。

这方面有更新吗?我必须处理多个阶段,并且仍然在寻找一种通过声明性管道很好地实现这一点的方法……不,看起来引用的问题(JENKINS-38442)仍然没有解决。不幸的是,我对这种方法有严重的问题。似乎这两个阶段并不是相互孤立的。。。通过更复杂的设置(不同的阶段等),我可以从Git和pip进程获得随机锁文件错误报告。如果我为每个虚拟环境创建一个单独的文件夹,它将完全失败(pip尝试安装在/usr/local…中,并因权限错误而崩溃)。很奇怪!见我的要点: