Предварительные сценарии внутри DockerFile - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь создать образ / контейнер Docker, который будет работать в Windows 10 / Linux и протестировать REST API. Можно ли встроить функцию (из моего .bashrc файла) в DockerFile? Функция pytest вызывает pylint перед запуском файла .py. Если рейтинг не 10/10, то он предлагает пользователю исправить код и выходит. Это прекрасно работает на Linux.

По сути, здесь находится псевдокод в DockerFile, который я пытаюсь создать.

------------------------------------------
From: Ubuntu x.xx
install python
Install pytest
install pylint
copy test_file to the respective folder
Execute pytest test_file_name.py
if the rating is not 10\10:
    prompt the user to resolve the rating issue and exit
------------here is the partial code snippet from the func------------------------
function pytest () {
    argument1="$1"
    # Extract the path and file name for pylint when method name is passed
    pathfilename=`echo ${argument1} | sed 's/::.*//'`
    clear && printf '\e[3J'
    output=$(docker exec -t orch-$USER pylint -r n ${pathfilename})
    if (echo "$output" | grep 'warning.*error' o&>/dev/null or
        echo "${output}" | egrep 'warning|convention' &>/dev/null)
    then
            echo echo "${output}" | sed 's/\(warning\)/\o033[33m\1\o033[39m/;s/\(errors\|error\)/\o033[31m\1\o033[39m/'
            YEL='\033[0;1;33m'
            NC='\033[0m'
            echo -e "\n  ${YEL}Fix module as per pylint/PEP8 messages to achieve 10/10 rating before pusing to github\n${NC}"`
fi

Другой вариант, о котором я могу подумать:
Шаг 1] Создайте образ (используя DockerFile) со всем необходимым программным обеспечением
Шаг 2] В файле .py добавьте вызов для выполнения pytest с логикой из функции.

Ваши мысли?

1 Ответ

1 голос
/ 28 апреля 2019

Вы можете превратить эту функцию в автономный скрипт оболочки. (В значительной степени, просто удалив оболочку function и убрав часть docker exec вызова инструмента.) Как только вы это сделаете, вы можете COPY сценарий оболочки в своем изображении, и как только вы Сделав это, вы можете RUN это.

...
COPY pylint-enforcer.sh .
RUN chmod +x ./pylint-enforcer.sh \
 && ./pylint-enforcer.sh
...

Похоже, что pylint выдаст ненулевой код выхода, если он выдаст какие-либо сообщения . Для целей Dockerfile может быть достаточно просто RUN pylint -r -n .; если он печатает что-либо, похоже, что он вернет ненулевой код завершения, который docker build будет интерпретироваться как «сбой» и не будет продолжен.

Вы можете подумать, захотите ли вы когда-нибудь возможность создавать и распространять образ кода, который не является абсолютно совершенным (возможно, во время события простоя), и хотите ли вы требовать разрешения на уровне root для запустить простые инструменты проверки правильности кода (если вы можете docker все, что угодно, вы можете редактировать произвольные файлы на хосте как root). Я бы предложил запускать эти инструменты из виртуальной среды, отличной от Docker, во время процесса CI, и не помещать их в свой Dockerfile и не полагаться на docker exec для их запуска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...