2016-04-08 56 views
2

我一直在頭疼幾個月。我們正在使用持續集成管道,其中一個步驟是由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。

+0

嘗試使用絕對路徑運行locale-gen發現,可能沒有正確的PATH變量集。 –

+0

嘗試過......還用另一個基礎鏡像構建了Dockerfile .. ubunto:xenial ......並且沒有交易 –

回答

1

當我遇到過類似問題時,我最終使用了所有可以找到的解決方案。

使用下面的工作對我來說,可能並非所有這些都需要,但一旦我有它的工作,我不想再觸摸它嘗試。

RUN echo "en_US UTF-8" >> /etc/locale.gen 
RUN dpkg-reconfigure locales 
RUN locale-gen en_US.UTF-8 
RUN localedef -c -i en_US -f UTF-8 en_US.UTF-8 
ENV LANG en_US.UTF-8 
ENV LANGUAGE en_US:en 
ENV LC_ALL en_US.UTF-8 

完整Dockerfile可以在https://github.com/evolution7/nodejs-bower-grunt

+0

沒有交易@Arjen,mocha的輸出仍然凌亂' 應該爲消費者啓動一個會話(pathId:1 ):286ms' –

相關問題