Jak sprawić, by Jenkins CI używał czasu lokalnego zamiast UTC podczas ściśnięcia Debiana

15

Mam instalację Jenkins-ci na ściśnięciu Debiana.

Aktualna domyślna strefa czasowa: „America / Toronto”
Czas lokalny jest teraz: Pon Jul 9 16:00:57 EDT 2012.
Czas uniwersalny jest teraz: Pon 9 lipca 20:00:57 UTC 2012.

W pliku / etc / default / rcS mam:

UTC = nie

Niestety to nie działa, w systemie informacje o Jenkins:

user.timezone Etc / UTC

Szukałem przez kilka godzin .. niestety nie mogłem znaleźć poprawki, każda pomoc byłaby bardzo mile widziana.

Dziękuję za poświęcony czas

drgn
źródło
2
6,5 lat później nadal nie mogę skonfigurować mojego profilu użytkownika, aby ustawić strefę czasową, która ma być wyświetlana.
mkaatman

Odpowiedzi:

16

Musisz podać wymaganą wartość user.timezone jako argument JVM podczas uruchamiania Jenkinsa. Wiersz poleceń Java będzie wyglądał mniej więcej tak:

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

Niestety nie znam instalacji Debiana, ale parametry JVM powinny być zdefiniowane w skrypcie /etc/init.d/jenkins lub w pliku właściwości, do którego odwołuje się ten skrypt.

gareth_bowles
źródło
Dzięki, działa idealnie.
drgn
1
Muszę dodać, że Jenkins nie lubi TimeTravel do przeszłości: Ostatni sukces: -322 ms (# 30)
drgn
1
patrz także stackoverflow.com/questions/8777111/jenkins-show-wrong-time/… , z odpowiedziami pierwotnie zebranymi
michael
1
na centos / rhel możesz ustawić w / etc / sysconfig / jenkins: JENKINS_JAVA_OPTIONS = "- Duser.timezone = America / New_York"
nandoP
1
Nie wierzę, że Debian poprawnie skonfigurował strefę czasową /etc/init.d/rc.local. Prawdopodobnie zadziałałoby, gdybyś miał skrypt inicjujący Sysv do uruchomienia Jenkinsa. Istnieje kilka przykładów na stronie Jenkins. UTC=noW /etc/default/rcSnie ma nic wspólnego ze strefy czasowej na komputerze. Informuje, czy czas przechowywany w zegarze sprzętowym jest czasem lokalnym, czy czasem UTC. O dostosowywaniu czasu, używaniu ntpdowolnego innego demona NTP jako klienta, ponieważ będzie on powoli dostosowywał czas bez podróży w czasie.
Anders
9

Trzy lata później znalazłem kilka gotch, które zaczęły działać. Opracuję na podstawie zaakceptowanej odpowiedzi (która jest poprawna) i dodam pełną odpowiedź dla CentOS.


Gotcha # 1: Ustawienia Jenkinsa do zmiany

Obecna dokumentacja Jenkinsa dotycząca zmiany strefy czasowej mówi o zdefiniowaniu user.timezone lub org.apache.commons.jelly.tags.fmt.timeZone . Ale stwierdziłem, że oba są konieczne. Galaretka działa na właściwe Jenkins i niektóre wtyczki, podczas gdy użytkownik działa na inne wtyczki.


Gotcha # 2: Ustawienia systemu operacyjnego do aktualizacji

W przypadku CentOS we wschodnich Stanach Zjednoczonych edytuj /etc/sysconfig/jenkins:

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

Jeśli wprowadzisz te -Dustawienia JENKINS_ARGS, to nie będzie działać.


Gotcha # 3: Ponowne uruchomienie

Musisz ponownie uruchomić z wiersza polecenia całą usługę. Samo bezpieczne ponowne uruchomienie Jenkinsa nie jest wystarczające. Więc:

sudo service jenkins restart

Po wykonaniu wszystkich tych czynności sprawdź, czy oba ustawienia strefy czasowej są zgodne w panelu informacyjnym systemu Jenkins: http://jenkins.example.com/systemInfo

biskup
źródło
1
Pomogło to podczas uruchamiania jenkins w kontenerze dokera pod CentOS, ale opcje nie zostały ustawione w / etc / sysconfig / jenkins. Opcje zostały przekazane w zmiennej dokera w poleceniu uruchomienia dokera, a następnie przekazane do komendy jenkins start.
gaoithe
7

W Ubuntu 14.04 żadne z powyższych rozwiązań nie działało dla mnie, ale ostatecznie uruchomiłem następujące polecenie, które wyświetla interfejs, w którym strefę czasową można zmienić z domyślnej (nie wybrano) na coś bardziej szczegółowego:

sudo dpkg-reconfigure tzdata

Najpierw zostaniesz poproszony o wybranie kontynentu (tj. Ameryki, Azji itp.), A następnie miasta, co w moim przypadku spowodowało powstanie „Azji / Kalkuty” dla strefy czasowej IST w Indiach.

Zobacz UbuntuTime - Korzystanie z wiersza poleceń .

Ponadto po zmianie strefy czasowej ponownie uruchomiłem Jenkins:

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

a następnie zweryfikował, że czas jest w lokalnym czasie IST. W http://<yourservername>/systemInfo, jak podał biskup użytkownika, w sekcji Właściwości systemu dla właściwości „user.timezone” widzę teraz „Asia / Kalkuta” jako jej wartość.

jmort253
źródło
2

Jeśli korzystasz z Jenkinsa w Apache Tomcat, dodaj je do <Katalog Apache-Tomcat> /conf/catalina.properties:

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

Oba są potrzebne.

tarkeshwar
źródło
2

Jeśli dotyczy to wykonywania zadań na podstawie harmonogramu cron (tj. Kompiluj okresowo), możesz ustawić Strefę czasową w harmonogramie cron dla poszczególnych zadań:

TZ=Europe/Dublin
0 7 * * 1-5
Garreth McDaid
źródło
0

W przypadku jenkins v2.73.3 na CentOS 7.1 (w oknie dokowanym) stwierdziliśmy, że musisz mieć jedno i drugie

1. ustaw strefę czasową systemu operacyjnego, np. „Ln -sf / usr / share / zoneinfo / Asia / Jakarta / etc / localtime” i

2. pod Manage Jenkins ustawić strefę czasową np. „Asia / Jakarta”.

Po zwykłym jenkins: xxxx / restart używana jest nowa strefa czasowa.

gaoithe
źródło
0

Dodanie odpowiedzi opisującej sytuację podczas uruchamiania jenkins w kontenerze dokowanym pod CentOS . W takim przypadku opcje mogą nie zostać ustawione w / etc / sysconfig / jenkins (w zależności od skryptów startowych usługi jenkins). Skrypt jenkins.sh służy do uruchomienia usługi jenkins. Ten skrypt jenkins.sh jest podobny do skryptu używanego w projekcie jenkins-inside-docker, więc ta odpowiedź jest, mam nadzieję, przydatna dla wszelkich jenkins w projektach dokerów z tego wynikających.

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

Poniżej otrzymujemy TZ np. Europa / Dublin i przekazujemy -e $ TZ do uruchomienia dockera, abyśmy mogli mieć skrypt zapisujący to do / etc / timezone lub links / etc / localtime, ale ważną rzeczą jest przekazanie tych dwóch argumentów w JAVA_OPTS: „-Dorg.apache.commons.jelly.tags.fmt.timeZone = $ TZ -Duser.timezone = $ TZ”. Skrypt jenkins.sh przekazuje je do wiersza poleceń, który uruchamia proces jenkins.

Na hoście dokera podczas tworzenia przykładu kontenera polecenia uruchamiania dokera:

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

Opcje przekazano w zmiennej dokera w komendzie uruchamiania dokera, a następnie przekazano do komendy jenkins start.

gaoithe
źródło