Как установить кодировку по умолчанию в Jenkins?

У меня есть python script, который выводит символы не-ascii. Он отлично работает из командной строки (у которой есть LANG en_US.UTF-8), но как только я попытаюсь запустить его в Jenkins (запущен из той же оболочки), он терпит неудачу в типичном случае терминала ascii:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe5' in position 37: ordinal not in range(128)

Я уже пробовал использовать вызов script на этапе сборки "Выполнение оболочки" следующим образом:

export LANG=en_US.UTF-8

Однако, похоже, это игнорирует. Поместив следующее в мой python script:

print "Encoding = %s" % sys.getdefaultencoding()

Дает мне это, независимо от того, что я делаю:

Encoding = ascii

Итак, есть ли что-то, что позволит мне заставить Дженкинса использовать UTF-8?

Ответ 1

Неважно, узнал, как это сделать:

export PYTHONIOENCODING=UTF-8

Ответ 2

Если вы хотите установить кодировку на системном уровне в вашей установке Jenkins, вы можете добавить ее как глобальную пару значений ключа (Jenkins → Manage Jenkins → Configure System) с помощью name=LANG и value=<insert your locale here> (что в моем случае равно en_GB.UTF-8). Таким образом, вы избегаете установки локали для каждой работы Дженкинса.

Ответ 3

Мое решение было: обновить до последней версии Дженкинса. Похоже, что последняя версия соответствует настройкам локали системы. См., Например, этот патч, возможно?

В любом случае значение по умолчанию, поставляемое с Ubuntu 13.10, устарело. Вытащив последнюю версию из своего официального debian repo, исправил ее для меня!

https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu

Ответ 4

export PYTHONIOENCODING=UTF-8

не работал у меня. Тем не менее,

export LC_CTYPE=en_US.UTF-8

сделал.

Ответ 5

Если вы используете конвейер Jenkins, вам необходимо установить кодировку внутри конвейера следующим образом:

pipeline {
    agent {label 'node name'}
    environment {
        LC_ALL = 'en_US.UTF-8'
        LANG    = 'en_US.UTF-8'
        LANGUAGE = 'en_US.UTF-8'
    }
    stages {
        stage ('XXXX') {
            steps {
                 echo 'Hello'
            }
         }
    }
}

Ответ 6

Другое решение заключается в использовании Python 3

brew update
brew install pyenv
pyenv install 3.7.3
pyenv local 3.7.3
make virtualenv