我在詹金斯身上发现了一个有趣的行为。
Jenkins 的 shell 不使用我的系统区域设置。
Jenkinsjenkins
在我的系统上以用户身份运行。
通过 SSH登录jenkins
:
locale
显示:
LANG=en_US.UTF- 8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
等等...
env
显示LANG
和LANGUAGE
变量:
LANG=en_US.UTF-8
LANGUAGE=en_US:en
id
显示用户ID:
uid=1008(詹金斯) gid=...
在 jenkins 作业 shell 中输入上述命令:
locale
显示:
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
等等...
env
做不是显示LANG
和LANGUAGE
变量
id
显示用户 ID(如预期):
uid=1008(詹金斯) gid=...
文件:
/etc/profile
包含:
导出 LANG=en_US.UTF-8
导出 LANGUAGE=en_US:en
/etc/default/locale
包含:
导出 LANG=en_US.UTF-8
导出 LANGUAGE=en_US:en
启动脚本/etc/init.d/jenkins
应导出系统的区域设置:
# 加载环境
if [ -r /etc/default/locale ];然后
。 /etc/default/locale
导出 LANG LANGUAGE
elif [ -r /etc/environment ];然后
。 /etc/environment
导出 LANG LANGUAGE
fi
当然,我在修改区域设置后重新启动;)
Apache也使用系统的区域设置
我的系统是Ubuntu 14.04安装。
我是否错过了检查其他内容?
感谢您的阅读!
我希望有人能帮忙:)
答案1
解决方案:
出现这种情况是因为Jenkins master通过non-interactive
shell连接到slave机器,所以/etc/profile
没有被执行,也/etc/default/locale
没有任何效果。
non-interactive
shell 通常使用~/.bashrc
.
几乎有关此主题的所有详细信息都可以在 askubuntu 上找到:
https://askubuntu.com/questions/247738/why-is-etc-profile-not-invoked-for-non-login-shells
添加到~/.bashrc
:
导出 LANG=en_US.UTF-8
导出 LANGUAGE=en_US:en
为我做的。
这里也讨论了这个“从属问题”:
https://groups.google.com/forum/#!topic/jenkinsci-users/hscDs4pKIoU
https://groups.google.com/forum/#!topic/jenkinsci-users/g0fNnDltqeM
亲切的问候,谁