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.
Versuchen zu laufen locale-gen mit absolutem Pfad, hat den variablen Satz richtigen Pfade gefunden werden möglicherweise nicht. –
versucht, dass ... auch diese Dockerfile mit einem anderen Basis-Image erstellt .. ubunto: xenial ... und kein Deal –