Как выполнить шаг не удалось при сбое в Pylint (в Docker Container) на Jenkins - PullRequest
1 голос
/ 13 мая 2019

Я вызываю Pylint в контейнере в шаге Jenkins

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) для получения библиотек пипсов.

1 Ответ

1 голос
/ 13 мая 2019

Ваш скрипт все еще завершается с кодом завершения 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...