Comment faire pour que Jenkins CI utilise l'heure locale au lieu de l'UTC sur Debian Squeeze

15

J'ai une installation Jenkins-ci sur une compression Debian.

Fuseau horaire par défaut actuel: 'America / Toronto'
L'heure locale est maintenant: Lun 9 juil 16:00:57 EDT 2012.
L'heure universelle est maintenant: lun. Juil. 9 20:00:57 UTC 2012.

Dans le fichier / etc / default / rcS, j'ai:

UTC = non

Malheureusement, cela ne fonctionne pas, dans les informations système de jenkins:

user.timezone Etc / UTC

J'ai cherché pendant quelques heures .. malheureusement, je n'ai pas trouvé de correctif, toute aide serait grandement appréciée.

Merci pour votre temps

drgn
la source
2
6,5 ans plus tard, je ne peux toujours pas configurer mon profil utilisateur pour définir le fuseau horaire que je souhaite voir affiché.
mkaatman du

Réponses:

16

Vous devez transmettre la valeur requise de user.timezone comme argument JVM lorsque vous démarrez Jenkins. La ligne de commande Java ressemblera à quelque chose comme:

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

Malheureusement, je ne connais pas l'installation de Debian, mais les paramètres JVM doivent être définis dans le script /etc/init.d/jenkins ou dans un fichier de propriétés référencé à partir de ce script.

gareth_bowles
la source
Merci ça marche parfaitement.
drgn
1
Je dois ajouter que Jenkins n'aime pas TimeTravel dans le passé: Last Sucess: -322 ms (# 30)
drgn
1
sur centos / rhel, vous pouvez définir dans / etc / sysconfig / jenkins: JENKINS_JAVA_OPTIONS = "- Duser.timezone = America / New_York"
nandoP
1
Je ne pense pas que Debian ait correctement configuré le fuseau horaire /etc/init.d/rc.local. Aurait probablement fonctionné si vous aviez un script d'initialisation Sysv pour démarrer Jenkins. Il y a quelques exemples sur le site Web de Jenkins. Le UTC=noen /etc/default/rcSn'a rien à voir avec fuseau horaire sur votre machine. Il indique si l'heure stockée dans l'horloge matérielle est l'heure locale ou l'heure UTC. A propos du réglage de l'heure, de l'utilisation ntpou de tout autre démon NTP en tant que client, car il ajustera lentement l'heure sans voyager dans le temps.
Anders
9

Trois ans plus tard, j'ai trouvé plusieurs pièges pour que cela fonctionne. Je vais donc développer la réponse acceptée (qui est correcte) et ajouter une réponse complète pour CentOS.


Gotcha # 1: Les paramètres Jenkins à modifier

La documentation Jenkins actuelle sur le changement de fuseau horaire dit de définir user.timezone ou org.apache.commons.jelly.tags.fmt.timeZone . Mais, j'ai trouvé que les deux sont nécessaires. La gelée fonctionne pour Jenkins et certains plugins, tandis que celle de l'utilisateur fonctionne pour d'autres plugins.


Gotcha # 2: Les paramètres du système d'exploitation à mettre à jour

Pour CentOS dans l'est des États-Unis, modifiez /etc/sysconfig/jenkinspour:

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

Si vous définissez ces -Dparamètres JENKINS_ARGS, cela ne fonctionnera pas.


Gotcha # 3: redémarrage

Vous devez redémarrer à partir de la ligne de commande, l'ensemble du service. Le simple fait de redémarrer en toute sécurité Jenkins n'est pas suffisant. Donc:

sudo service jenkins restart

Lorsque vous avez fait tout cela, vérifiez que les deux paramètres de fuseau horaire correspondent dans votre panneau d'informations système Jenkins: http://jenkins.example.com/systemInfo

évêque
la source
1
Cela a aidé lors de l'exécution de jenkins dans un conteneur docker sous CentOS mais les options ne sont pas définies dans / etc / sysconfig / jenkins. Les options ont été transmises dans la variable docker dans la commande docker run, puis transmises à la commande jenkins start.
gaoithe
7

Dans Ubuntu 14.04, aucune des solutions ci-dessus n'a fonctionné pour moi, mais j'ai fini par exécuter la commande suivante, qui tire une interface où le fuseau horaire peut être changé de la valeur par défaut (aucune sélectionnée) à quelque chose de plus spécifique:

sudo dpkg-reconfigure tzdata

Tout d'abord, vous êtes invité à sélectionner le continent (c'est-à-dire l'Amérique, l'Asie, etc.), puis la ville, ce qui dans mon cas a abouti à "Asia / Kolkata" pour le fuseau horaire IST en Inde.

Voir UbuntuTime - Utilisation de la ligne de commande .

De plus, après avoir changé le fuseau horaire, j'ai redémarré Jenkins:

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

puis vérifié que l'heure était en heure locale IST. Dans http://<yourservername>/systemInfo, comme fourni par l'utilisateur bishop, sous la section Propriétés système, pour la propriété "user.timezone", je vois maintenant "Asia / Kolkata" comme sa valeur.

jmort253
la source
2

Si vous exécutez Jenkins dans Apache Tomcat, ajoutez-les à <Apache-Tomcat-Dir> /conf/catalina.properties:

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

Les deux sont nécessaires.

tarkeshwar
la source
2

Si cela se rapporte à l'exécution de travaux basés sur un calendrier cron (c'est-à-dire Build périodiquement), vous pouvez définir votre fuseau horaire dans le calendrier cron par travail:

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

Pour Jenkins v2.73.3 sur CentOS 7.1 (dans Docker), nous avons constaté que vous devez à la fois

1. définissez le fuseau horaire du système d'exploitation, par exemple «ln -sf / usr / share / zoneinfo / Asia / Jakarta / etc / localtime» et

2. sous Manage Jenkins, définissez le fuseau horaire, par exemple 'Asia / Jakarta'.

Après un jenkins régulier: xxxx / restart, le nouveau fuseau horaire est utilisé.

gaoithe
la source
0

Ajout d'une réponse pour couvrir la situation lors de l' exécution de Jenkins dans un conteneur Docker sous CentOS . Dans ce cas, les options peuvent ne pas être définies dans / etc / sysconfig / jenkins (en fonction de vos scripts de démarrage du service jenkins). Un script jenkins.sh est utilisé pour démarrer le service jenkins. Ce script jenkins.sh est similaire à celui utilisé par le projet jenkins-inside-docker, donc cette réponse est, espérons-le, utile à tous les jenkins dans les projets docker qui en découlent.

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

Ci-dessous, nous obtenons TZ, par exemple Europe / Dublin et passons -e $ TZ à Docker Run afin que nous puissions avoir un script qui l'écrit dans / etc / timezone ou lie / etc / localtime mais l'important est de passer ces deux arguments dans JAVA_OPTS: "-Dorg.apache.commons.jelly.tags.fmt.timeZone = $ TZ -Duser.timezone = $ TZ". Le script jenkins.sh les transmet à la ligne de commande qui démarre le processus jenkins.

Sur l'hôte docker lors de la création de l'exemple de conteneur de la commande runer 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

Les options ont été passées dans la variable docker dans la commande docker run, puis passées à la commande jenkins start.

gaoithe
la source