Назад | Перейти на главную страницу

Как заставить Jenkins CI использовать местное время вместо UTC в debian squeeze

У меня есть установка Jenkins-ci на debian squeeze.

Current default time zone: 'America/Toronto'
Local time is now:      Mon Jul  9 16:00:57 EDT 2012.
Universal Time is now:  Mon Jul  9 20:00:57 UTC 2012.

В файле / etc / default / rcS у меня есть:

UTC=no

К сожалению, это не работает, в системной информации jenkins:

user.timezone   Etc/UTC

Я искал несколько часов .. к сожалению, не нашел исправления, любая помощь будет очень признательна.

Спасибо за ваше время

При запуске Jenkins необходимо передать необходимое значение user.timezone в качестве аргумента JVM. Командная строка Java будет выглядеть примерно так:

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

К сожалению, я не знаком с установкой Debian, но параметры JVM должны быть определены либо в сценарии /etc/init.d/jenkins, либо в файле свойств, на который ссылается этот сценарий.

Три года спустя я обнаружил несколько подводных камней, заставляющих это работать. Итак, я уточню принятый ответ (который является правильным) и добавлю полный ответ для CentOS.


Попытка №1: изменить настройки Jenkins

Текущий Дженкинс документация по смене часового пояса говорит определить user.timezone или org.apache.commons.jelly.tags.fmt.timeZone. Но я обнаружил, что обе необходимы. Желе один работает на самого Дженкинса и некоторые плагины, а пользовательский работает с другими плагинами.


Попытка №2: Обновить настройки ОС

Для CentOS в восточной части США редактировать /etc/sysconfig/jenkins кому:

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

Если вы положите эти -D настройки в JENKINS_ARGS, это не сработает.


Попытка №3: ​​перезапуск

Приходится перезапускать из командной строки всю службу. Просто выполнить безопасный перезапуск Jenkins - это не достаточно. Так:

sudo service jenkins restart

Когда вы все это сделаете, проверьте, что обе настройки часового пояса совпадают на панели информации вашей системы Jenkins: http://jenkins.example.com/systemInfo

В Ubuntu 14.04 ни одно из вышеперечисленных решений не помогло мне, но в итоге я выполнил следующую команду, которая вызывает интерфейс, в котором часовой пояс можно изменить со значения по умолчанию (не выбран) на что-то более конкретное:

sudo dpkg-reconfigure tzdata

Сначала вам будет предложено выбрать континент (например, Америка, Азия и т. Д.), А затем город, что в моем случае привело к «Asia / Kolkata» для часового пояса IST в Индии.

Видеть UbuntuTime - Использование командной строки.

Кроме того, после изменения часового пояса я перезапустил Дженкинса:

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

и затем проверил, что время было по местному времени IST. В http://<yourservername>/systemInfo, как предоставлено пользователем bishop в разделе «Свойства системы» для свойства «user.timezone», теперь я вижу его значение «Asia / Kolkata».

Если это относится к выполнению заданий на основе расписания cron (то есть периодической сборки), вы можете установить часовой пояс в расписании cron для каждого задания:

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

Если вы используете Jenkins в Apache Tomcat, добавьте их в <Apache-Tomcat-Dir> /conf/catalina.properties:

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

Оба нужны.

Для jenkins v2.73.3 на CentOS 7.1 (в докере) мы обнаружили, что вам нужны оба

1. установить часовой пояс ОС например 'ln -sf / usr / share / zoneinfo / Asia / Jakarta / etc / localtime' и

2. в разделе «Управление Дженкинсом» установите часовой пояс например «Азия / Джакарта».

После обычного jenkins: xxxx / restart используется новый часовой пояс.

Добавление ответа, чтобы охватить ситуацию, когда запуск jenkins в докер-контейнере под CentOS. В этом случае параметры могут быть не установлены в / etc / sysconfig / jenkins (в зависимости от сценариев запуска службы jenkins). Сценарий jenkins.sh используется для запуска службы jenkins. Этот сценарий jenkins.sh аналогичен сценарию, который используется в проекте jenkins-inside-docker, поэтому мы надеемся, что этот ответ будет полезен для любых jenkins в проектах докеров, вытекающих из этого.

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

Ниже мы получаем TZ, например. Europe / Dublin и передайте -e $ TZ в docker run, чтобы у нас был сценарий, который записывает это в / etc / timezone или связывает / etc / localtime, но важно передать эти два аргумента в JAVA_OPTS: "-Dorg.apache .commons.jelly.tags.fmt.timeZone = $ TZ -Duser.timezone = $ TZ ". Сценарий jenkins.sh передает их в командную строку, которая запускает процесс jenkins.

На хосте докера при создании контейнера пример команды запуска докера:

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

Параметры были переданы в переменной docker в команде docker run, а затем переданы команде jenkins start.