Cómo hacer que Jenkins CI use la hora local en lugar de UTC en debian squeeze

15

Tengo una instalación Jenkins-ci en un debian squeeze.

Zona horaria predeterminada actual: 'América / Toronto'
La hora local es ahora: lunes 9 de julio 16:00:57 EDT 2012.
La hora universal es ahora: lunes 9 de julio 20:00:57 UTC 2012.

En el archivo / etc / default / rcS tengo:

UTC = no

Desafortunadamente esto no está funcionando, en la información del sistema de jenkins:

user.timezone Etc / UTC

Busqué durante unas horas ... lamentablemente no pude encontrar una solución, cualquier ayuda sería muy apreciada.

Gracias por tu tiempo

drgn
fuente
2
6.5 años después, todavía no puedo configurar mi perfil de usuario para configurar la zona horaria que quiero que se muestre.
mkaatman

Respuestas:

16

Debe pasar el valor requerido de user.timezone como argumento JVM cuando inicie Jenkins. La línea de comando de Java se verá así:

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

Desafortunadamente, no estoy familiarizado con la instalación de Debian, pero los parámetros de JVM deben definirse en el script /etc/init.d/jenkins o en un archivo de propiedades al que se haga referencia desde ese script.

gareth_bowles
fuente
Gracias funciona perfectamente.
drgn
1
Debo agregar que a Jenkins no le gusta viajar en el tiempo al pasado: último éxito: -322 ms (# 30)
drgn
1
en centos / rhel, puede configurar en / etc / sysconfig / jenkins: JENKINS_JAVA_OPTIONS = "- Duser.timezone = America / New_York"
nandoP
1
No creo que Debian haya configurado la zona horaria correctamente /etc/init.d/rc.local. Probablemente funcionó si has tenido un script de inicio Sysv para iniciar Jenkins. Hay algunos ejemplos en el sitio web de Jenkins. El UTC=noen /etc/default/rcSnada tiene que ver con la zona horaria en su máquina. Indica si la hora almacenada en el reloj de hardware es la hora local o la hora UTC. Acerca de ajustar el tiempo, usar ntpo cualquier otro demonio NTP como cliente, ya que ajustará lentamente el tiempo sin viajar en el tiempo.
Anders
9

Tres años después, encontré varias trampas para que esto funcionara. Entonces, detallaré la respuesta aceptada (que es correcta) y agregaré una respuesta completa para CentOS.


Gotcha # 1: la configuración de Jenkins para cambiar

La documentación actual de Jenkins sobre el cambio de zona horaria dice definir user.timezone o org.apache.commons.jelly.tags.fmt.timeZone . Pero, he encontrado que ambos son necesarios. El jalea uno funciona para Jenkins propiamente dicho y algunos complementos, mientras que el usuario uno trabaja para otros complementos.


Gotcha # 2: la configuración del sistema operativo para actualizar

Para CentOS en el este de los EE. UU., Edite /etc/sysconfig/jenkinsen:

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

Si pone esta -Dconfiguración JENKINS_ARGS, no funcionará.


Gotcha # 3: reinicio

Debe reiniciar desde la línea de comandos, todo el servicio. Simplemente hacer un reinicio seguro de Jenkins no es suficiente. Entonces:

sudo service jenkins restart

Cuando haya hecho todo esto, verifique que ambas configuraciones de zona horaria coincidan en su panel de información del sistema Jenkins: http://jenkins.example.com/systemInfo

obispo
fuente
1
Esto ayudó cuando se ejecutó jenkins en un contenedor docker en CentOS pero las opciones no se configuraron en / etc / sysconfig / jenkins. Las opciones se pasaron en la variable docker en el comando docker run y luego se pasaron al comando jenkins start.
Gaoithe
7

En Ubuntu 14.04, ninguna de las soluciones anteriores funcionó para mí, pero terminé ejecutando el siguiente comando, que abre una interfaz donde la zona horaria se puede cambiar de la predeterminada (ninguna seleccionada) a algo más específico:

sudo dpkg-reconfigure tzdata

Primero, se le solicita que seleccione el continente (es decir, América, Asia, etc.) y luego la ciudad, que en mi caso resultó en "Asia / Kolkata" para la zona horaria IST en India.

Ver UbuntuTime - Usando la línea de comando .

Además, después de cambiar la zona horaria, reinicié Jenkins:

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

y luego verificó que la hora estaba en la hora local de IST. En http://<yourservername>/systemInfo, según lo dispuesto por el usuario obispo, en la sección Propiedades del sistema, para la propiedad "user.timezone", ahora veo "Asia / Kolkata" como su valor.

jmort253
fuente
2

Si está ejecutando Jenkins en Apache Tomcat, agréguelos a <Apache-Tomcat-Dir> /conf/catalina.properties:

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

Ambos son necesarios.

Tarkeshwar
fuente
2

Si esto se relaciona con la ejecución de trabajos basados ​​en un cronograma cron (es decir, Construir periódicamente), puede establecer su zona horaria en el cronograma cron por trabajo:

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

Para jenkins v2.73.3 en CentOS 7.1 (en docker) hemos encontrado que tiene que

1. establezca la zona horaria del sistema operativo, por ejemplo, 'ln -sf / usr / share / zoneinfo / Asia / Jakarta / etc / localtime' y

2. En Administrar Jenkins, configure la zona horaria, por ejemplo, 'Asia / Yakarta'.

Después de un jenkins normal: xxxx / restart se usa la nueva zona horaria.

gaoithe
fuente
0

Agregar una respuesta para cubrir la situación cuando se ejecuta jenkins en un contenedor acoplable en CentOS . En este caso, es posible que las opciones no se configuren en / etc / sysconfig / jenkins (dependiendo de los scripts de inicio del servicio jenkins). Se usa un script jenkins.sh para iniciar el servicio jenkins. Este script jenkins.sh es similar al utilizado por el proyecto jenkins-inside-docker, por lo que esta respuesta es útil para cualquier jenkins en proyectos docker derivados de eso.

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

A continuación, obtenemos TZ, por ejemplo, Europa / Dublín y pasamos -e $ TZ a Docker Run para que podamos tener un script que escriba eso en / etc / timezone o links / etc / localtime pero lo importante es pasar estos dos argumentos en JAVA_OPTS: "-Dorg.apache.commons.jelly.tags.fmt.timeZone = $ TZ -Duser.timezone = $ TZ". El script jenkins.sh los pasa a la línea de comandos que inicia el proceso jenkins.

En el host docker al crear el ejemplo de contenedor del comando docker run:

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

Las opciones se pasaron en la variable docker en el comando docker run y luego se pasaron al comando jenkins start.

gaoithe
fuente