วิธีทำให้ Jenkins CI ใช้เวลาท้องถิ่นแทน UTC บนเดเบียนบีบ


15

ฉันมีการติดตั้ง Jenkins-ci บนเดเบียนบีบ

เขตเวลาเริ่มต้นปัจจุบัน: 'อเมริกา / โตรอนโต'
เวลาท้องถิ่นอยู่ในขณะนี้: จันทร์ 9 ก.ค. 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 เมื่อคุณเริ่ม Jenkins บรรทัดคำสั่ง 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 ms (# 30)
drgn

1
ดูstackoverflow.com/questions/8777111/jenkins-show-wrong-time/… พร้อมคำตอบที่รวบรวมมาจากwiki.jenkins-ci.org/display/JENKINS/Change+time+zone
michael

1
บน centos / rhel คุณสามารถตั้งค่าใน / etc / sysconfig / jenkins: JENKINS_JAVA_OPTIONS = "- Duser.timezone = อเมริกา / New_York"
nandoP

1
ฉันไม่เชื่อว่าเดเบียนตั้งค่าโซนเวลาอย่างเหมาะสม/etc/init.d/rc.localแล้ว อาจเป็นไปได้ที่คุณจะมีสคริปต์เริ่มต้น Sysv เพื่อเริ่มเจนกินส์ มีบางตัวอย่างในเว็บไซต์เจนกินส์ UTC=noใน/etc/default/rcSมีอะไรจะทำอย่างไรกับเขตเวลาบนเครื่องของคุณ มีการบอกว่าเวลาที่เก็บไว้ในนาฬิกาฮาร์ดแวร์เป็นเวลาท้องถิ่นหรือเวลา UTC เกี่ยวกับการปรับเวลาใช้งานntpหรือ NTP-daemon อื่น ๆ เป็นไคลเอ็นต์เนื่องจากจะปรับเวลาช้าๆโดยไม่ต้องเดินทางข้ามเวลา
Anders

9

สามปีต่อมาฉันพบว่า gotchas หลายตัวทำให้สิ่งนี้ใช้ได้ ดังนั้นฉันจะอธิบายอย่างละเอียดตามคำตอบที่ยอมรับ (ซึ่งถูกต้อง) และเพิ่มคำตอบที่สมบูรณ์สำหรับ CentOS


Gotcha # 1: การตั้งค่าเจนกินส์ที่จะเปลี่ยน

The Jenkins ปัจจุบันเอกสารเกี่ยวกับการเปลี่ยนโซนเวลากล่าวว่าการกำหนดหรือ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: เริ่มต้นใหม่

คุณต้องเริ่มต้นใหม่จากบรรทัดคำสั่งบริการทั้งหมด การเริ่มต้นอย่างปลอดภัยของ Jenkins นั้นไม่เพียงพอ ดังนั้น:

sudo service jenkins restart

เมื่อคุณทำสิ่งนี้เสร็จแล้วให้ตรวจสอบว่าการตั้งค่าเขตเวลาทั้งสองตรงกันในแผงข้อมูลระบบ Jenkins ของคุณ: http://jenkins.example.com/systemInfo


1
สิ่งนี้ช่วยเมื่อรัน jenkins ใน container docker ภายใต้ CentOS แต่ตัวเลือกไม่ได้ตั้งค่าใน / etc / sysconfig / jenkins ตัวเลือกที่ถูกส่งผ่านในตัวแปรนักเทียบท่าในคำสั่งเรียกใช้นักเทียบท่าแล้วส่งผ่านไปยังคำสั่งเริ่มต้นเจนกินส์
gaoithe

7

ใน 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ตามที่อธิบดีผู้ใช้จัดหาภายใต้หัวข้อคุณสมบัติระบบสำหรับคุณสมบัติ "user.timezone" ตอนนี้ฉันเห็น "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

สำหรับเจนกินส์ v2.73.3 บน CentOS 7.1 (ในนักเทียบท่า) เราพบว่าคุณต้องทำทั้งสองอย่าง

1. ตั้งค่าเขตเวลาของระบบปฏิบัติการเช่น 'ln -sf / usr / share / zoneinfo / Asia / Jakarta / etc / localtime' และ

2. ใต้ Manage Jenkins ตั้งเขตเวลาเช่น 'Asia / Jakarta'

หลังจากเจนกินส์ปกติ: xxxx / เริ่มระบบใหม่จะใช้เขตเวลาใหม่


0

เพิ่มคำตอบเพื่อให้ครอบคลุมสถานการณ์เมื่อทำงานเจนกินส์นักเทียบท่าในภาชนะภายใต้ 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

บนโฮสต์นักเทียบท่าเมื่อสร้างตัวอย่างคอนเทนเนอร์ของคำสั่งนักวิ่งเรียกใช้:

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 start

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.