在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。
的方式答案 0 :(得分:7)
我不得不求助于脚本管道并结合所有阶段
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'
}
}
}
生成的管道看起来像
理想情况下,我们能够将每个作业分解为多个阶段(设置,构建,测试),但是
用户界面currently doesn't support this(still not supported)。