为什么不对skaffold生成的docker映像运行npm test?

时间:2018-07-25 12:14:29

标签: jenkins devops jenkins-2 jenkins--x

这是Jenkinsfile生成的默认jx

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生成的环境完全相似。

我很好奇,詹金斯-X团队不这样做的考虑是什么?

1 个答案:

答案 0 :(得分:1)

是的-我猜这取决于Dockerfile-它可以进行npm安装,也可以将已构建的工件复制到docker映像中-在这种情况下,尽管无需运行npm install两次。我们应该为npm修复构建包,以避免出现双重npm install