这是jx生成的默认Jenkinsfile
container('nodejs') {
sh "npm install" #line 2
sh "CI=true DISPLAY=:99 npm test" #line 3
sh 'export VERSION=$PREVIEW_VERSION && \
skaffold build -f skaffold.yaml' #line 4
sh "jx step post build --image $DOCKER_REGISTRY/$ORG/$APP_NAME:$PREVIEW_VERSION"
}skaffold build最终将运行docker build,并且Dockerfile也有npm install (重新运行与上面第2行相同的内容)
我知道第2行的npm install是为第3行的npm test做准备,但是我很好奇为什么不直接在生成的docker文件上运行测试呢?
container('nodejs') {
sh 'export VERSION=$PREVIEW_VERSION && \
skaffold build -f skaffold.yaml'
sh 'docker run IMAGE_GENERATED_BY_SKAFFOLD npm test'
sh "jx step post build --image $DOCKER_REGISTRY/$ORG/$APP_NAME:$PREVIEW_VERSION"
}这样,我们就不需要重新执行npm install了。此外,运行npm test的环境与skaffold生成的环境完全相似。
我很好奇,Jenkins-X团队不这么做的考虑因素是什么?
发布于 2018-07-26 15:55:59
是的-我猜这取决于Dockerfile -它可以安装npm,也可以只是将构建的工件复制到docker镜像中-尽管在这种情况下不需要运行npm install两次。我们应该为npm修复构建包,以避免双重npm install。
https://stackoverflow.com/questions/51518625
复制相似问题