0

这是默认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 行相同的东西)

我知道npm install第 2 行是为第 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 团队不这样做的考虑是什么?

4

1 回答 1

1

是的 - 我想这取决于Dockerfile- 它可以执行 npm install 或者它可以将构建的人工制品复制到 docker 映像中 - 在这种情况下虽然不需要运行npm install两次。我们应该修复 npm 的构建包以避免双重npm install

于 2018-07-26T07:55:59.143 回答