运维开发网

jenkins管道穿越多个Docker图像

运维开发网 https://www.qedev.com 2020-05-10 14:25 出处:网络 作者:运维开发网整理
在Jenkins中使用声明性管道,如何在多个版本的docker镜像中运行阶段.我想在 python 2.7,3.5和3.6上执行以下jenkinsfile.下面是一个管道文件,用于在docker容器中构建和测试python项目 pipeline { agent { docker { image 'python:2.7.14' } } stages {
在Jenkins中使用声明性管道,如何在多个版本的docker镜像中运行阶段.我想在 python 2.7,3.5和3.6上执行以下jenkinsfile.下面是一个管道文件,用于在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成功?希望是如果测试失败,很明显测试失败的版本.

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

作为比较,这是如何Travis CI let’s you specify runs across different python version.

我不得不求助于脚本管道并结合所有阶段

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管道穿越多个Docker图像

理想情况下,我们可以将每个作业分成几个阶段(设置,构建,测试),但是

UI currently doesn’t support this (still not supported).

0

精彩评论

暂无评论...
验证码 换一张
取 消