Ответ 1
Неважно, узнал, как это сделать:
export PYTHONIOENCODING=UTF-8
У меня есть 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?
Неважно, узнал, как это сделать:
export PYTHONIOENCODING=UTF-8
Если вы хотите установить кодировку на системном уровне в вашей установке Jenkins, вы можете добавить ее как глобальную пару значений ключа (Jenkins → Manage Jenkins → Configure System) с помощью name=LANG
и value=<insert your locale here>
(что в моем случае равно en_GB.UTF-8
). Таким образом, вы избегаете установки локали для каждой работы Дженкинса.
Мое решение было: обновить до последней версии Дженкинса. Похоже, что последняя версия соответствует настройкам локали системы. См., Например, этот патч, возможно?
В любом случае значение по умолчанию, поставляемое с Ubuntu 13.10, устарело. Вытащив последнюю версию из своего официального debian repo, исправил ее для меня!
https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu
export PYTHONIOENCODING=UTF-8
не работал у меня. Тем не менее,
export LC_CTYPE=en_US.UTF-8
сделал.
Если вы используете конвейер 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'
}
}
}
}
Другое решение заключается в использовании Python 3
brew update
brew install pyenv
pyenv install 3.7.3
pyenv local 3.7.3
make virtualenv