Как заставить Jenkins CI использовать местное время вместо UTC при сжатии Debian
У меня есть установка Jenkins-ci на сжатие Debian.
Текущий часовой пояс по умолчанию: "Америка / Торонто" Местное время сейчас: пн 9 июля 16:00:57 ПО ВОСТОЧНОМУ ВРЕМЕНИ 2012. Всемирное время сейчас: понедельник, 9 июля 20:00:57 UTC 2012.
В файле /etc/default/rcS у меня есть:
UTC = нет
К сожалению, это не работает, в системной информации Дженкинс:
user.timezone Etc / UTC
Я искал несколько часов... к сожалению, не мог найти решение, любая помощь будет принята с благодарностью.
Спасибо за ваше время
7 ответов
Вам нужно передать требуемое значение user.timezone в качестве аргумента JVM при запуске Jenkins. Командная строка 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
, Но я обнаружил, что оба необходимы. Jelly один работает для собственно Jenkins инекоторых плагинов, в то время как пользовательский работает для других плагинов.
Получил #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
Сначала вам предлагается выбрать континент (например, Америка, Азия и т. Д.), А затем город, что в моем случае привело к "Азия / Калькутта" для часового пояса IST в Индии.
Смотрите UbuntuTime - Использование командной строки.
Кроме того, после изменения часового пояса я перезапустил Jenkins:
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, добавьте их в
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 в проектах docker, основанных на этом.
https://github.com/jenkinsci/docker/blob/master/jenkins.sh
Ниже мы получаем TZ, например, Europe/Dublin, и передаем -e $TZ в docker run, чтобы у нас был скрипт, который записывает это в /etc/timezone или links / etc / localtime, но важно передать эти два аргумента в JAVA_OPTS: "-Dorg.apache.commons.jelly.tags.fmt.timeZone=$TZ -Duser.timezone=$TZ". Сценарий jenkins.sh передает их в командную строку, которая запускает процесс jenkins.
На хосте docker при создании контейнера пример команды 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
Опции были переданы в переменной docker в команде запуска docker, а затем переданы команде запуска jenkins.