Cách làm cho Jenkins CI sử dụng Giờ địa phương thay vì UTC trong việc ép debian


14

Tôi có một bản cài đặt Jenkins-ci trên máy ép debian.

Múi giờ mặc định hiện tại: 'America / Toronto'
Giờ địa phương là: Thứ bảy 9 16:00:57 EDT 2012.
Giờ phổ quát là bây giờ: Thứ Hai ngày 9 tháng 7 20:00:57 UTC 2012.

Trong tệp / etc / default / rcS tôi có:

UTC = không

Thật không may, điều này không hoạt động, Trong thông tin hệ thống của jenkins:

user.timezone Vv / UTC

Tôi đã tìm kiếm trong một vài giờ .. tiếc là không thể tìm thấy một sửa chữa nào sẽ được đánh giá cao.

Cảm ơn bạn đã dành thời gian


1
6,5 năm sau, tôi vẫn không thể định cấu hình hồ sơ người dùng của mình để đặt múi giờ tôi muốn xem được hiển thị.
mkaatman

Câu trả lời:


16

Bạn cần chuyển vào giá trị bắt buộc của user.timezone dưới dạng đối số JVM khi bạn khởi động Jenkins. Dòng lệnh Java sẽ trông giống như:

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

Thật không may, tôi không quen với cài đặt Debian, nhưng các tham số JVM nên được định nghĩa trong tập lệnh /etc/init.d/jenkins hoặc trong tệp thuộc tính được tham chiếu từ tập lệnh đó.


Cảm ơn nó hoạt động hoàn hảo.
drgn

1
Tôi phải thêm, Jenkins không thích TimeTravel vào quá khứ: Thành công cuối cùng: -322 ms (# 30)
drgn


1
trên centos / rhel, bạn có thể đặt trong / etc / sysconfig / jenkins: JENKINS_JAVA_OPTIONS = "- Duser.timezone = America / New_York"
nandoP

1
Tôi không tin Debian đã thiết lập đúng múi giờ /etc/init.d/rc.local. Có lẽ bạn sẽ có một kịch bản khởi tạo Sysv để bắt đầu Jenkins. Có một số ví dụ trên trang web Jenkins. Các UTC=notrong /etc/default/rcSkhông có gì để làm với múi giờ trên máy của bạn. Nó cho biết nếu thời gian được lưu trữ trong đồng hồ phần cứng là giờ địa phương hoặc giờ UTC. Về việc điều chỉnh thời gian, sử dụng ntphoặc bất kỳ NTP-daemon nào khác dưới dạng máy khách, vì nó sẽ từ từ điều chỉnh thời gian mà không mất thời gian.
Anders

9

Ba năm sau, tôi đã tìm thấy một số vấn đề về việc này. Vì vậy, tôi sẽ giải thích dựa trên câu trả lời được chấp nhận (đúng) và thêm câu trả lời hoàn chỉnh cho CentOS.


Gotcha # 1: Cài đặt Jenkins để thay đổi

Tài liệu hiện tại của Jenkins về việc thay đổi múi giờ nói là xác định user.timezone hoặc org.apache.commons.jelly.tags.fmt.timeZone . Nhưng, tôi đã thấy rằng cả hai đều cần thiết. Thạch một hoạt động cho Jenkins thích hợp và một số plugin, trong khi người dùng làm việc cho các plugin khác.


Gotcha # 2: Cài đặt hệ điều hành để cập nhật

Đối với CentOS ở miền Đông Hoa Kỳ, hãy chỉnh sửa /etc/sysconfig/jenkinsthành:

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

Nếu bạn đặt các -Dcài đặt này vào JENKINS_ARGS, nó sẽ không hoạt động.


Gotcha # 3: Khởi động lại

Bạn phải khởi động lại từ dòng lệnh, toàn bộ dịch vụ. Đơn giản chỉ cần thực hiện khởi động lại an toàn Jenkins là không đủ. Vì thế:

sudo service jenkins restart

Khi bạn đã thực hiện tất cả những điều này, hãy kiểm tra xem cả hai cài đặt múi giờ có khớp trong bảng thông tin hệ thống Jenkins của bạn không: http://jenkins.example.com/systemInfo


1
Điều này giúp ích khi chạy jenkins trong bộ chứa docker trong CentOS nhưng các tùy chọn không được đặt trong / etc / sysconfig / jenkins. Các tùy chọn được truyền vào biến docker trong lệnh chạy docker và sau đó được chuyển đến lệnh start jenkins.
gaoithe

7

Trong Ubuntu 14.04, không có giải pháp nào ở trên hoạt động với tôi, nhưng cuối cùng tôi đã chạy lệnh sau, mở giao diện trong đó múi giờ có thể được thay đổi từ mặc định (không được chọn) thành thứ gì đó cụ thể hơn:

sudo dpkg-reconfigure tzdata

Đầu tiên, bạn được nhắc chọn lục địa, (ví dụ như Mỹ, Châu Á, v.v.) và sau đó là thành phố, trong trường hợp của tôi dẫn đến "Châu Á / Kolkata" cho múi giờ IST ở Ấn Độ.

Xem UbuntuTime - Sử dụng Dòng lệnh .

Ngoài ra, sau khi thay đổi múi giờ, tôi khởi động lại Jenkins:

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

và sau đó xác minh rằng thời gian là trong giờ IST địa phương. Trong http://<yourservername>/systemInfo, như được cung cấp bởi giám mục người dùng, trong phần Thuộc tính hệ thống, đối với thuộc tính "user.timezone", giờ đây tôi thấy "Châu Á / Kolkata" là giá trị của nó.


2

Nếu bạn đang chạy Jenkins trong Apache Tomcat, hãy thêm chúng vào <Apache-Tomcat-Dir> /conf/catalina.properies:

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

Cả hai đều cần thiết.


2

Nếu điều này liên quan đến việc thực hiện các công việc dựa trên lịch cron (tức là Xây dựng định kỳ), bạn có thể đặt Múi giờ trong lịch trình cron trên cơ sở mỗi công việc:

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

0

Đối với jenkins v2.73.3 trên CentOS 7.1 (trong docker), chúng tôi đã tìm thấy bạn phải cả hai

1. đặt múi giờ của hệ điều hành, ví dụ: 'ln -sf / usr / share / zoneinfo / Asia / Jakarta / etc / localtime' và

2. trong phần Quản lý Jenkins đặt múi giờ, ví dụ: 'Châu Á / Jakarta'.

Sau một jenkins thông thường: xxxx / khởi động lại múi giờ mới được sử dụng.


0

Thêm một câu trả lời để bao quát tình huống khi chạy jenkins trong một container docker theo CentOS . Trong trường hợp này, các tùy chọn có thể không được đặt trong / etc / sysconfig / jenkins (tùy thuộc vào tập lệnh bắt đầu dịch vụ jenkins của bạn). Một tập lệnh jenkins.sh được sử dụng để bắt đầu dịch vụ jenkins. Kịch bản jenkins.sh này tương tự như kịch bản được sử dụng bởi dự án jenkins-Inside-docker, vì vậy câu trả lời này hy vọng hữu ích cho bất kỳ jenkins nào trong các dự án docker xuất phát từ đó.

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

Bên dưới, chúng tôi nhận được TZ, ví dụ: Châu Âu / Dublin và chuyển $ TZ cho docker chạy để chúng tôi có thể có một tập lệnh ghi vào / etc / timezone hoặc links / etc / localtime nhưng điều quan trọng là chuyển hai đối số này trong JAVA_OPTS: "-Dorg.apache.commons.jelly.tags.fmt.timeZone = $ TZ -Duser.timezone = $ TZ". Kịch bản jenkins.sh chuyển những thứ này đến dòng lệnh bắt đầu quá trình jenkins.

Trên máy chủ docker khi tạo ví dụ container của lệnh chạy docker:

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

Các tùy chọn được truyền vào biến docker trong lệnh chạy docker và sau đó được chuyển đến lệnh start jenkins.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.