如何使Jenkins上的pylint失败(在Docker容器中)失败

时间:2019-05-13 17:34:30

标签: bash docker jenkins

我在詹金斯步骤中在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库。

1 个答案:

答案 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