Изменить переменную среды при использовании Jenkins - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь использовать Jenkins для запуска тестов Python и создания отчетов о покрытии.

Я скомпилировал приложение, связанное с python - назовем его pythonX, - которое настраивает среду для выполнения частей этого приложения. Теперь, когда я хочу запустить тесты для некоторой части кода, я могу просто запустить

d:\my_app\sys\pythonX.exe -m pytest d:\user\repos\my_app\tests\unit

и все работает очень хорошо, потому что pythonX знает, где все.

Для этого я использую

stage('Run tests') {
        steps {
            bat 'd:\\my_app\\sys\\pythonX.exe -m pytest d:\\user\\repos\\my_app\\tests\\unit'
        }
}

. Но есть проблема, этот pythonX выполняет тесты кода, который поставляется вместе с приложением, так что уже собран и все такое. Чего я не хочу, так это запускать тесты для кода, который все еще является локальным.

pythonX добавляет переменную окружения PYTHONPATH для указания, где находится исходный код, но всякий раз, когда я запускаю pythonX.exe через bat, он меняет все, что я добавил ранее.

Сначала я попробовал использовать withEnv вот так

stage('Run tests') {
        steps {
            withEnv(['PATH+PYTHONPATH=d:\\user\\repos\\my_app']){
                bat 'd:\\my_app\\sys\\pythonX.exe -m pytest d:\\user\\repos\\my_app\\tests\\unit'
            }
        }
}

но это не помогает.

Я попробовал еще: настроить среду, затем изменить переменную PYTHONPATH, а затем запустить тесты через pythonX в существующей среде. Это код

stage('Run tests') {
        steps {
            bat '''
            d:\\my_app\\sys\\pythonX.exe  --debug=cmd
            set PYTHONPATH= d:\\user\\repos\\my_app;%PYTHONPATH%
            d:\\my_app\\sys\\pythonX.exe -m pytest d:\\user\\repos\\my_app\\tests\\unit
            '''
        }
}

но это не работает. Я предполагаю, что перезаписывает переменную окружения PYTHONPATH своей собственной. Кто-нибудь знает как это побороть?

...