Wie man Jenkins CI veranlasst, bei Debian Squeeze die Ortszeit anstelle von UTC zu verwenden

14

Ich habe eine Jenkins-ci-Installation auf einem Debian Squeeze.

Aktuelle Standardzeitzone: 'Amerika / Toronto'
Ortszeit ist jetzt: Mo 09 Jul 16:00:57 EDT 2012.
Weltzeit ist jetzt: Mo 9. Juli 20:00:57 UTC 2012.

In der / etc / default / rcS-Datei habe ich:

UTC = nein

Leider funktioniert dies nicht. In den Systeminformationen von jenkins:

user.timezone Etc / UTC

Ich suchte für ein paar Stunden .. konnte leider keine Lösung finden, eine Hilfe wäre sehr dankbar.

Vielen Dank für Ihre Zeit

drgn
quelle
1
Nach 6,5 Jahren kann ich mein Benutzerprofil immer noch nicht so konfigurieren, dass die Zeitzone eingestellt wird, die angezeigt werden soll.
mkaatman

Antworten:

16

Sie müssen den erforderlichen Wert von user.timezone als JVM-Argument übergeben, wenn Sie Jenkins starten. Die Java-Befehlszeile sieht ungefähr so ​​aus:

$JAVA_HOME/java -Duser.timezone="America/Toronto" [other JVM parameters] $JENKINS_HOME/jenkins.jar

Leider bin ich mit der Debian-Installation nicht vertraut, aber die JVM-Parameter sollten entweder im Skript /etc/init.d/jenkins oder in einer Eigenschaftendatei definiert werden, auf die von diesem Skript aus verwiesen wird.

gareth_bowles
quelle
Danke, dass es perfekt funktioniert.
DRGN
1
Ich muss hinzufügen, Jenkins mag es nicht, mit TimeTravel in die Vergangenheit zu reisen: Letzter Erfolg: -322 ms (# 30)
drgn
1
Unter centos / rhel können Sie Folgendes in / etc / sysconfig / jenkins festlegen: JENKINS_JAVA_OPTIONS = "- Duser.timezone = America / New_York"
nandoP
1
Ich glaube nicht, dass Debian die Zeitzone richtig eingerichtet hat /etc/init.d/rc.local. Hätte wohl geklappt, wenn du ein Sysv-Init-Skript zum Starten von Jenkins hattest. Es gibt einige Beispiele auf der Jenkins-Website. Der UTC=noin /etc/default/rcShat nichts mit Zeitzone auf Ihrem Computer zu tun. Es ist aussagekräftig, ob die in der Hardware-Uhr gespeicherte Zeit die Ortszeit oder die UTC-Zeit ist. Über das Einstellen der Zeit, verwenden Sie ntpoder einen anderen NTP-Daemon als Client, da er die Zeit ohne Zeitreise langsam anpassen wird.
Anders
9

Drei Jahre später fand ich mehrere Fallstricke, die das zum Laufen brachten. Daher werde ich die akzeptierte Antwort (die korrekt ist) näher erläutern und eine vollständige Antwort für CentOS hinzufügen.


Gotcha # 1: Die zu ändernden Jenkins-Einstellungen

In der aktuellen Jenkins- Dokumentation zum Ändern der Zeitzone heißt es, user.timezone oder zu definieren org.apache.commons.jelly.tags.fmt.timeZone. Aber ich habe festgestellt, dass beide notwendig sind. Das Gelee funktioniert für Jenkins und einige Plugins, während der Benutzer für andere Plugins arbeitet.


Gotcha # 2: Die zu aktualisierenden Betriebssystemeinstellungen

Bearbeiten Sie CentOS in den östlichen USA wie folgt /etc/sysconfig/jenkins:

JENKINS_JAVA_OPTIONS="-Dorg.apache.commons.jelly.tags.fmt.timeZone=America/New_York -Duser.timezone=America/New_York"
JENKINS_ARGS=""

Wenn Sie diese -DEinstellungen vornehmen JENKINS_ARGS, funktioniert es nicht.


Gotcha # 3: Neustart

Sie müssen den gesamten Dienst über die Befehlszeile neu starten. Ein sicherer Neustart von Jenkins ist nicht ausreichend. So:

sudo service jenkins restart

Wenn Sie dies alles getan haben, überprüfen Sie, ob beide Zeitzoneneinstellungen in Ihrem Jenkins-Systeminformationsfenster übereinstimmen: http://jenkins.example.com/systemInfo

Bischof
quelle
1
Dies hat geholfen, wenn Jenkins in einem Docker-Container unter CentOS ausgeführt werden, die Optionen jedoch nicht in / etc / sysconfig / jenkins festgelegt wurden. Die Optionen wurden in der Docker-Variablen im Docker-Befehl run übergeben und dann an den Befehl jenkins start übergeben.
Gaoithe
7

In Ubuntu 14.04 hat keine der oben genannten Lösungen für mich funktioniert, aber ich habe den folgenden Befehl ausgeführt, der eine Schnittstelle aufruft, in der die Zeitzone von der Standardeinstellung (keine ausgewählt) in eine spezifischere geändert werden kann:

sudo dpkg-reconfigure tzdata

Zuerst werden Sie aufgefordert, den Kontinent (dh Amerika, Asien usw.) und dann die Stadt auszuwählen, was in meinem Fall zu "Asia / Kolkata" für die IST-Zeitzone in Indien führte.

Siehe UbuntuTime - Verwenden der Befehlszeile .

Außerdem habe ich nach dem Ändern der Zeitzone Jenkins neu gestartet:

sudo /etc/init.d/jenkins stop sudo /etc/init.d/jenkins start

und überprüfte dann, ob die Zeit in lokaler IST-Zeit war. In http://<yourservername>/systemInfo, wie vom Benutzer bishop im Abschnitt Systemeigenschaften für die Eigenschaft "user.timezone" angegeben, wird jetzt "Asia / Kolkata" als Wert angezeigt.

jmort253
quelle
2

Wenn Sie Jenkins in Apache Tomcat ausführen, fügen Sie diese zu <Apache-Tomcat-Dir> /conf/catalina.properties hinzu:

user.timezone=America/New_York
org.apache.commons.jelly.tags.fmt.timeZone=America/New_York

Beides wird benötigt.

Tarkeshwar
quelle
2

Wenn sich dies auf die Ausführung von Jobs bezieht, die auf einem Cron-Zeitplan basieren (z. B. "Periodisch erstellen"), können Sie Ihre Zeitzone im Cron-Zeitplan auf Jobbasis festlegen:

TZ=Europe/Dublin
0 7 * * 1-5
Garreth McDaid
quelle
0

Für jenkins v2.73.3 unter CentOS 7.1 (im Docker) haben wir festgestellt, dass Sie beides haben müssen

1. Stellen Sie die Zeitzone des Betriebssystems ein, z. B. 'ln -sf / usr / share / zoneinfo / Asia / Jakarta / etc / localtime' und

2. Stellen Sie unter Jenkins verwalten die Zeitzone ein, z. B. 'Asien / Jakarta'.

Nach einem normalen jenkins: xxxx / restart wird die neue Zeitzone verwendet.

Gaoithe
quelle
0

Hinzufügen einer Antwort, um die Situation beim Ausführen von Jenkins in einem Docker-Container unter CentOS abzudecken . In diesem Fall werden die Optionen möglicherweise nicht in / etc / sysconfig / jenkins festgelegt (abhängig von den Startskripten Ihres jenkins-Dienstes). Ein jenkins.sh-Skript wird verwendet, um den jenkins-Dienst zu starten. Dieses jenkins.sh-Skript ähnelt dem, das vom jenkins-inside-docker-Projekt verwendet wird, sodass diese Antwort hoffentlich für alle Jenkins in Docker-Projekten nützlich ist, die davon abgeleitet sind.

https://github.com/jenkinsci/docker/blob/master/jenkins.sh

Unten sehen wir TZ zB Europe / Dublin und übergeben -e $ TZ an docker, damit wir ein Skript haben, das das in / etc / timezone oder links / etc / localtime schreibt, aber das Wichtige ist, diese beiden Argumente in JAVA_OPTS zu übergeben: "-Dorg.apache.commons.jelly.tags.fmt.timeZone = $ TZ -Duser.timezone = $ TZ". Das Skript jenkins.sh übergibt diese an die Befehlszeile, die den jenkins-Prozess startet.

Auf dem Docker-Host beim Erstellen des Container-Beispiels für den Docker-Ausführungsbefehl:

TZFILE=$(readlink -f /etc/localtime)
TZ=$(echo $TZFILE|sed s#.*zoneinfo\/##)
TZARG=" -e $TZ "

ID=$(docker run $TARG \
-d \
--user=jenkins \
--name jenkins-${USER} \
--restart always \
-p $HOST_IP:$JENKINS_PORT:${JENKINS_PORT_INTERNAL} \
-p $HOST_IP:$JENKINS_SLAVE_PORT:50000 \
$TZARG \
--env JAVA_OPTS="-Dhudson.Main.development=true \
    -Dhudson.footerURL=$JENKINS_URL \
    -Dorg.apache.commons.jelly.tags.fmt.timeZone=$TZ -Duser.timezone=$TZ \
    -Xms800M -Xmx800M -Xmn400M \
    " \
--env JENKINS_HOME=/var/jenkins_home \
-v $JENKINS_DIR:/var/jenkins_home \
$VARGS \
$ADDITIONALARGS \
$IMAGE \
/bin/tini /usr/local/bin/jenkins.sh \
)
echo "INFO: container ID:$ID" |tee JENKINS.CONTAINER.ID

Optionen wurden in der Docker-Variablen im Docker-Befehl run übergeben und dann an den Befehl jenkins start übergeben.

Gaoithe
quelle