这是默认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 团队不这样做的考虑是什么?