2016-04-08 5 views
2

Ich habe seit Monaten mit großen Kopfschmerzen. Wir arbeiten mit einer kontinuierlichen Integrationspipeline und einer der Schritte ist ein automatisierter Test, der durch den npm-Test ausgelöst wird, der in einem jenkin-Slave in einem Andock-Container ausgeführt wird, Jenkins selbst in einem anderen Container. Während die Builds die Ausgabe wie folgt aufgeschlüsselt angezeigt wird: esGebrochene Codierung in npm-Test-Ausgabe ausgelöst durch Jenkins im Docker läuft

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

von Googeln fand ich dies an issue caused by not setting the locale im Unix-System. Ich habe versucht, Umgebungsvariablen in der Dockerfile hinzuzufügen, aber immer noch kein Glück. Ich habe auch versucht, locale-gen und ich bekomme Befehl nicht gefunden Fehler:

RUN locale-gen ${LANGUAGE} 

Wenn ich versuche, es zu installieren, bekomme ich keine Kandidaten-Paket gefunden.

RUN apt-get install locales 

Hier ist die Dockerfile des Sklaven.

# 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"] 

Und das ist der Behälter Jenkins Master 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 

Kann jemand einige Hinweise auf die Lösung dieses Problems zur Verfügung stellen?

UPDATE:

Ich konnte durch Ändern des Basis-Image zu ubuntu locale-gen verwenden: xenial. Aber das hat auch nicht funktioniert. Es scheint, dass Jenkins über non-interactive shell eine Verbindung zu den Slaves herstellt und dadurch die erforderlichen Konfigurationen nicht geladen werden (/etc/profile und /etc/default/locale). Ich habe auch versucht, und fügte hinzu:

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

Aber das hat auch nicht funktioniert. HERE ist die vollständige Dockerfile, die ich gerade benutze.

+0

Versuchen zu laufen locale-gen mit absolutem Pfad, hat den variablen Satz richtigen Pfade gefunden werden möglicherweise nicht. –

+0

versucht, dass ... auch diese Dockerfile mit einem anderen Basis-Image erstellt .. ubunto: xenial ... und kein Deal –

Antwort

1

Als ich einmal ein ähnliches Problem hatte, benutzte ich alle Lösungen, die ich zusammen finden konnte.

Mit den unten für mich gearbeitet, ist es möglich, dass nicht alle von ihnen benötigt werden, aber sobald ich es funktionierte, wollte ich es nicht mehr berühren, um es zu versuchen.

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 

Die komplette Dockerfile kann bei https://github.com/evolution7/nodejs-bower-grunt

+0

Noch keine Vereinbarung @Arjen, Mocha Ausgabe noch chaotisch ' sollte eine Sitzung für den Verbraucher (PathId: 1 starten): 286 ms –