Як змусити Джінкінс CI використовувати місцевий час замість UTC на debian сжати


15

У мене є установка Jenkins-ci на стисканні Debian.

Поточний часовий пояс за замовчуванням: "Америка / Торонто"
Зараз місцевий час: пн. Лип. 16, 16:00:57. EDT 2012.
Універсальний час зараз: понеділок, 9 липня 20:00:57 UTC 2012.

У файлі / etc / default / rcS у мене є:

UTC = ні

На жаль, це не працює, В системі інформація про джинкіни:

user.timezone Etc / UTC

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

Дякуємо за ваш час


2
Через 6,5 років я все ще не можу налаштувати свій профіль користувача, щоб встановити часовий пояс, який я хочу бачити відображеним.
mkaatman

Відповіді:


16

Вам потрібно передати необхідне значення user.timezone як аргумент JVM під час запуску Дженкінса. Командний рядок Java буде виглядати приблизно так:

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

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


Дякую, це працює чудово.
drgn

1
Треба додати, Дженкінсу не подобається TimeTravel до минулого: Останній успіх: -322 мс (# 30)
drgn

1
див. також stackoverflow.com/questions/8777111/jenkins-show-wrong-time/… , відповіді, спочатку зібрані
michael

1
on centos / rhel, ви можете встановити в / etc / sysconfig / jenkins: JENKINS_JAVA_OPTIONS = "- Duser.timezone = America / New_York"
nandoP

1
Я не вірю, що Debian правильно налаштував часовий пояс /etc/init.d/rc.local. Можливо, ви працювали б у вас був сценарій init Sysv, щоб запустити Дженкінса. На веб-сайті Дженкінса є кілька прикладів. UTC=noВ /etc/default/rcSне має нічого спільного з часовим поясом на вашій машині. Це означає, що час, який зберігається в апаратному годиннику, - це місцевий час або час UTC. Про коригування часу, використання ntpабо будь-якого іншого NTP-демона в якості клієнта, оскільки він буде повільно регулювати час без проїзду часу.
Андерс

9

Через три роки я знайшов кілька ґаздів, з якими працював на цьому. Отже, я докладно розробив прийняту відповідь (яка є правильною) і додам повну відповідь для CentOS.


Gotcha # 1: Змінення налаштувань Дженкінса

Поточна документація Дженкінса про зміну часового поясу говорить про визначення user.timezone або org.apache.commons.jelly.tags.fmt.timeZone . Але я виявив, що обидва необхідні. Одне працює для власних Дженкінса та деяких плагінів, а для інших - для інших.


Gotcha # 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, вони не працюватимуть.


Gotcha # 3: Перезапуск

Вам доведеться перезапустити з командного рядка всю службу. Просто робити безпечний перезапуск Дженкінс НЕ достатньо. Так:

sudo service jenkins restart

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


1
Це допомогло під час запуску jenkins в докерному контейнері під CentOS, але параметри не встановлені в / etc / sysconfig / jenkins. Параметри передавались в змінну докера в команді запуску докера, а потім передавали команді запуску jenkins.
gaoithe

7

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

sudo dpkg-reconfigure tzdata

Спочатку вам буде запропоновано вибрати континент (тобто Америку, Азію тощо), а потім місто, яке в моєму випадку призвело до "Азії / Колката" для часового поясу IST в Індії.

Див. UbuntuTime - Використання командного рядка .

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

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

а потім підтвердили, що час був локальним часом IST. У http://<yourservername>/systemInfoрозділі "Властивості системи" для розділу "user.timezone", який надає bishop-користувач, тепер я бачу "Asia / Kolkata" як його значення.


2

Якщо ви використовуєте Jenkins в Apache Tomcat, додайте їх до <Apache-Tomcat-Dir> /conf/catalina.properties:

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

Обидва потрібні.


2

Якщо це стосується виконання завдань на основі розкладу cron (тобто періодично будувати), ви можете встановити вам Time Zone в графіку cron за принципом роботи:

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

0

Для jenkins v2.73.3 на CentOS 7.1 (у докері) ми виявили, що ви повинні обидва

1. встановіть часовий пояс ОС, наприклад, "ln -sf / usr / share / zoneinfo / Asia / Джакарта / тощо / localtime" і

2. У розділі Manage Jenkins встановіть часовий пояс, наприклад, "Азія / Джакарта".

Після звичайних джинкінсів: xxxx / перезавантаження використовується новий часовий пояс.


0

Додайте відповідь, щоб висвітлити ситуацію під час запуску дженкінів у докер-контейнері під CentOS . У цьому випадку параметри можуть не встановлюватися в / etc / sysconfig / jenkins (залежно від сценаріїв запуску служби jenkins). Сценарій jenkins.sh використовується для запуску служби jenkins. Цей скрипт jenkins.sh схожий на той, який використовується у проекті jenkins всередині докера, тому ця відповідь, сподіваємось, корисна будь-яким дженкінсам у докерських проектах, що випливають із цього.

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

Нижче ми отримуємо TZ, наприклад, Європа / Дублін і передаємо -e $ TZ до докера, щоб ми могли мати сценарій, який пише, що / etc / timezone або посилання / etc / localtime, але важливо передати ці два аргументи в JAVA_OPTS: "-Dorg.apache.commons.jelly.tags.fmt.timeZone = $ TZ -Duser.timezone = $ TZ". Сценарій jenkins.sh передає їх до командного рядка, який запускає процес jenkins.

На хості докера при створенні контейнера приклад команди 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

Параметри передавались у змінну докера в команді запуску докера, а потім передавали команді запуску jenkins.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.