我在詹金斯步骤中在Container中调用pylint
stage('Linting') {
sh "docker run -v $WORKSPACE:/workspace ${DOCKER_REGISTRY}/${DOCKER_TAG}:latest /workspace/lint.sh"
}
问题是它只打印结果,但在詹金斯上永远不会失败。
这是bash文件“ lint.sh”,用于在容器中调用pylint:
#!/bin/bash
awd=$(pwd)
for file in $(find . -name '*.py'); do
filename=$(basename $file)
if [[ ${file:(-3)} == ".py" ]] && [[ $filename = *"test"* ]] ; then
echo "perform PEP8 lint (python pylint blah) for $filename"
cd $awd && cd $(dirname "${file}") && pylint "${filename}"
fi
done
约束:我必须调用docker并运行测试,因为我正在使用外部Jenkins(Cloudbees)来获取pip库。
答案 0 :(得分:1)
您的脚本仍在退出,其退出代码为0。如果您想在PyLint检查失败后立即退出,则可以在检查结束时添加出口:
cd $awd && cd $(dirname "${file}") && pylint "${filename}" || exit 1
如果要检查所有文件并跟踪失败的PyLint数量,可以执行以下操作:
#!/bin/bash
failed=0 # NEW
awd=$(pwd)
for file in $(find . -name '*.py'); do
filename=$(basename $file)
if [[ ${file:(-3)} == ".py" ]] && [[ $filename = *"test"* ]] ; then
echo "perform PEP8 lint (python pylint blah) for $filename"
cd $awd && cd $(dirname "${file}") && pylint "${filename}"
if [ $? -ne 0 ] ; then # NEW
failed=$(($failed + 1)) # NEW
fi # NEW
fi
done
exit $failed # NEW