Jenkins管道跨越多个Docker图像
在Jenkins中使用声明性管道,如何跨docker映像的多个版本运行阶段。我想在Python2.7、3.5和3.6上执行以下Jenkins文件。下面是一个管道文件,用于在docker容器中构建和测试python项目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
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…中,并因权限错误而崩溃)。很奇怪!见我的要点: