2016-04-08 6 views
2

私は何ヶ月も大きな頭痛をきたしています。私たちは継続的な統合パイプラインを使って作業していますが、ステップの1つはnpmテストによってトリガーされる自動テストです。これはドッカーコンテナ内で実行されているジェンキンのスレーブ内部で行われ、Jenkins自体は別のコンテナにあります。私は、これは、UNIXシステムでan issue caused by not setting the localeで見つけ、それをグーグルではドンカーで実行されているJenkinsによってトリガされたnpmテスト出力のコード化が壊れています

[email protected] node_modules/node-schedule 
��������� [email protected] 

:中に は、出力は次のように壊れて表示されて構築します。私はDockerfileに環境変数を追加しようとしましたが、まだ運がありません。また、ロケール-GENを実行しようと、私は、コマンドが見つからないというエラーを取得:

RUN locale-gen ${LANGUAGE} 

私はそれをインストールしてみてください、私が見つかりませ候補のパッケージを取得していないし。

RUN apt-get install locales 

ここにスレーブの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"] 

そして、これは

# 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 

Dockerfileジェンキンスマスターのコンテナである誰もがこの問題を解決する上でいくつかのガイダンスを提供することができますか?

UPDATE:xenial:

私のUbuntuにベース画像を変更することによってロケール-GENを使用することができました。しかし、それはどちらもうまくいきませんでした。ジェンキンがnon-interactive shellを介して奴隷に接続し、それが必要な構成(/etc/profile/etc/default/locale)をロードしないようにしているようです。 私も追加してみました:

USER jenkins 
RUN echo "export=LC_ALL=en_US.UTF-8" >> /etc/.bashrc 

をしかし、それはどちらか働いていませんでした。 HEREは私が今使っている完全なDockerfileです。

+0

で発見することができますが、絶対パスでロケール-genを実行しようとすると、正しいPATH変数を設定していない可能性があります。 –

+0

それを試してみました...また、Dockerfileを別のベースイメージでビルドしました。ubunto:xenial ...とno deal –

答えて

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' –

関連する問題