Come fare in modo che Jenkins CI utilizzi l'ora locale invece dell'ora UTC su Debian


15

Ho un'installazione di Jenkins-ci su una compressione debian.

Fuso orario predefinito corrente: "America / Toronto"
L'ora locale è ora: Lun 9 luglio 16:00:57 EDT 2012.
L'ora universale è ora: lunedì 9 luglio 20:00:57 UTC 2012.

Nel file / etc / default / rcS ho:

UTC = no

Purtroppo questo non funziona, nelle informazioni di sistema di jenkins:

user.timezone Etc / UTC

Ho cercato per qualche ora .. purtroppo non sono riuscito a trovare una soluzione qualsiasi aiuto sarebbe molto apprezzato.

Grazie per il tuo tempo


2
6,5 anni dopo, non riesco ancora a configurare il mio profilo utente per impostare il fuso orario che voglio vedere visualizzato.
mkaatman,

Risposte:


16

È necessario passare il valore richiesto di user.timezone come argomento JVM all'avvio di Jenkins. La riga di comando Java sarà simile a:

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

Sfortunatamente non ho familiarità con l'installazione di Debian, ma i parametri JVM dovrebbero essere definiti nello script /etc/init.d/jenkins o in un file delle proprietà a cui fa riferimento tale script.


Grazie funziona perfettamente.
Drgn,

1
Devo aggiungere, a Jenkins non piace TimeTravel nel passato: Last Sucess: -322 ms (# 30)
drgn,


1
su centos / rhel, puoi impostare in / etc / sysconfig / jenkins: JENKINS_JAVA_OPTIONS = "- Duser.timezone = America / New_York"
nandoP

1
Non credo che Debian abbia impostato correttamente il fuso orario /etc/init.d/rc.local. Probabilmente avrebbe funzionato su di te avrebbe avuto uno script Sysv init per avviare Jenkins. Ci sono alcuni esempi sul sito Web di Jenkins. L' UTC=noin /etc/default/rcSnon ha nulla a che fare con fuso orario sulla vostra macchina. Indica se l'ora memorizzata nell'orologio hardware è l'ora locale o l'ora UTC. Informazioni sulla regolazione del tempo, utilizzare ntpo qualsiasi altro demone NTP come client, poiché regolerà lentamente il tempo senza viaggiare nel tempo.
Anders,

9

Tre anni dopo, ho trovato diversi trucchi per farlo funzionare. Quindi, elaborerò la risposta accettata (che è corretta) e aggiungerò una risposta completa per CentOS.


Gotcha # 1: le impostazioni di Jenkins da modificare

L'attuale documentazione di Jenkins sulla modifica del fuso orario dice di definire user.timezone o org.apache.commons.jelly.tags.fmt.timeZone . Ma ho scoperto che entrambi sono necessari. Quello della gelatina funziona per Jenkins e alcuni plugin, mentre quello per gli altri plugin.


Gotcha # 2: le impostazioni del sistema operativo da aggiornare

Per CentOS negli Stati Uniti orientali, modifica /etc/sysconfig/jenkinsin:

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

Se inserisci queste -Dimpostazioni JENKINS_ARGS, non funzionerà.


Gotcha # 3: riavvio

Devi riavviare dalla riga di comando, l'intero servizio. Il semplice riavvio sicuro di Jenkins non è sufficiente. Così:

sudo service jenkins restart

Quando hai fatto tutto ciò, controlla che entrambe le impostazioni del fuso orario corrispondano nel pannello delle informazioni del sistema Jenkins: http://jenkins.example.com/systemInfo


1
Questo ha aiutato quando si eseguono jenkins in un contenitore docker in CentOS ma le opzioni non sono impostate in / etc / sysconfig / jenkins. Le opzioni sono state passate nella variabile finestra mobile nel comando Esegui finestra mobile e quindi passate al comando di avvio jenkins.
Gaoithe

7

In Ubuntu 14.04, nessuna delle soluzioni precedenti ha funzionato per me, ma alla fine ho eseguito il seguente comando, che visualizza un'interfaccia in cui il fuso orario può essere modificato dal valore predefinito (nessuno selezionato) in qualcosa di più specifico:

sudo dpkg-reconfigure tzdata

Innanzitutto, ti viene richiesto di selezionare il continente (ad esempio America, Asia, ecc.) E quindi la città, che nel mio caso ha prodotto "Asia / Calcutta" per il fuso orario IST in India.

Vedi UbuntuTime - Uso della riga di comando .

Inoltre, dopo aver modificato il fuso orario, ho riavviato Jenkins:

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

e quindi verificato che l'ora era nell'ora IST locale. In http://<yourservername>/systemInfo, come fornito dall'utente bishop, nella sezione Proprietà del sistema, per la proprietà "user.timezone", ora vedo "Asia / Kolkata" come il suo valore.


2

Se si esegue Jenkins in Apache Tomcat, aggiungerli a <Apache-Tomcat-Dir> /conf/catalina.properties:

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

Entrambi sono necessari.


2

Se ciò si riferisce all'esecuzione di lavori in base a una pianificazione cron (ad esempio Build Periodically), è possibile impostare il fuso orario nella pianificazione cron su una base per lavoro:

TZ=Europe/Dublin
0 7 * * 1-5

0

Per jenkins v2.73.3 su CentOS 7.1 (nella finestra mobile) abbiamo scoperto che devi entrambi

1. imposta il fuso orario del sistema operativo, ad esempio "ln -sf / usr / share / zoneinfo / Asia / Jakarta / etc / localtime" e

2. in Gestisci Jenkins impostare il fuso orario, ad esempio "Asia / Giacarta".

Dopo un normale jenkins: xxxx / restart viene utilizzato il nuovo fuso orario.


0

Aggiunta di una risposta per coprire la situazione durante l' esecuzione di jenkins in un contenitore docker in CentOS . In questo caso le opzioni potrebbero non essere impostate in / etc / sysconfig / jenkins (a seconda degli script di avvio del servizio jenkins). Uno script jenkins.sh viene utilizzato per avviare il servizio jenkins. Questo script jenkins.sh è simile a quello utilizzato dal progetto jenkins-inside-docker, quindi questa risposta è, si spera, utile per qualsiasi jenkins nei progetti docker che ne deriva.

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

Di seguito otteniamo TZ, ad esempio Europa / Dublino e passiamo -e $ TZ alla finestra mobile in modo da poter avere uno script che scriva quello in / etc / timezone o links / etc / localtime ma l'importante è passare questi due argomenti in JAVA_OPTS: "-Dorg.apache.commons.jelly.tags.fmt.timeZone = $ TZ -Duser.timezone = $ TZ". Lo script jenkins.sh li passa alla riga di comando che avvia il processo jenkins.

Sull'host docker durante la creazione dell'esempio contenitore del comando run docker:

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

Le opzioni sono state passate nella variabile finestra mobile nel comando Esegui finestra mobile e quindi passate al comando di avvio jenkins.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.