【问题标题】:How to make step failed on pylint failure (in Docker Container) on Jenkins如何在 Jenkins 上的 pylint 失败(在 Docker 容器中)使步骤失败
【发布时间】:2019-09-30 16:56:52
【问题描述】:

我在 Jenkins 步骤中调用 Container 中的 pylint

stage('Linting') {
        sh "docker run -v $WORKSPACE:/workspace ${DOCKER_REGISTRY}/${DOCKER_TAG}:latest /workspace/lint.sh"
}

问题是它只打印结果,但在 Jenkins 上永远不会失败。

这里是 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 库。

【问题讨论】:

    标签: bash docker jenkins


    【解决方案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
    

    【讨论】:

    • 完美。谢谢!
    猜你喜欢
    • 2012-07-18
    • 2020-05-07
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    相关资源
    最近更新 更多