我一直在頭疼幾個月。我們正在使用持續集成管道,其中一個步驟是由npm測試觸發的自動化測試,該測試將發生在運行在碼頭集裝箱中的jenkin的奴隸內,Jenkins本身位於另一個集裝箱內。 在構建輸出顯示的是打破這樣的:Jenkins在Docker中運行觸發的npm測試輸出中的破損編碼
[email protected] node_modules/node-schedule
��������� [email protected]
通過Google上搜尋它,我發現這是在UNIX系統中an issue caused by not setting the locale。我試圖在Dockerfile中添加環境變量,但仍然沒有運氣。也嘗試運行locale-gen,我得到的命令沒有找到錯誤:
RUN locale-gen ${LANGUAGE}
當我嘗試安裝它時,我沒有找到候選包。
RUN apt-get install locales
這是slave的Dockerfile。
# NODEJS SLAVE
# Pull base image.
FROM node:0.10.42
ENV LANG_WHICH en
ENV LANG_WHERE US
ENV ENCODING UTF-8
ENV LANGUAGE ${LANG_WHICH}_${LANG_WHERE}.${ENCODING}
ENV LANG ${LANGUAGE}
RUN dpkg-reconfigure --frontend noninteractive locales \
&& apt-get update -qqy \
&& apt-get -qqy install \
language-pack-en \
RUN apt-get install -y nano openssh-server openjdk-7-jdk \
&& apt-get -y upgrade
EXPOSE 8080
<... ssh stuff...>
COPY package.json /src/package.json
RUN npm install -g npm
# Standard SSH port
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
這是詹金斯大師的容器Dockerfile
# JENKINS MASTER
# Set the base image to Ubuntu
FROM jenkins:latest
ENV LANG_WHICH en
ENV LANG_WHERE US
ENV ENCODING UTF-8
ENV LANGUAGE ${LANG_WHICH}_${LANG_WHERE}.${ENCODING}
ENV LANG ${LANGUAGE}
RUN localedef en_US.UTF-8 -i en_US -fUTF-8
RUN dpkg-reconfigure --frontend noninteractive locales \
&& apt-get update -qqy \
&& apt-get -qqy install \
language-pack-en \
USER jenkins
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
COPY plugins.txt /usr/share/jenkins/plugins.txt
COPY executors.groovy /usr/share/jenkins/ref/init.groovy.d/executors.groovy
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt
任何人都可以提供解決這一問題的一些指導?
UPDATE:
我能夠通過改變基礎映像到Ubuntu使用語言環境創:xenial。但這也沒有奏效。看起來詹金斯通過non-interactive shell連接到奴隸,並導致它不加載所需的配置(/etc/profile
和/etc/default/locale
)。 我也嘗試添加:
USER jenkins
RUN echo "export=LC_ALL=en_US.UTF-8" >> /etc/.bashrc
但是這並沒有任何工作。 HERE是我現在使用的完整Dockerfile。
嘗試使用絕對路徑運行locale-gen發現,可能沒有正確的PATH變量集。 –
嘗試過......還用另一個基礎鏡像構建了Dockerfile .. ubunto:xenial ......並且沒有交易 –