데비안 스퀴즈에서 Jenkins CI가 UTC 대신 현지 시간을 사용하게하는 방법


15

데비안 스퀴즈에 Jenkins-ci 설치가 있습니다.

현재 기본 시간대 : '미국 / 토론토'
현지 시간 : 현재 7 월 9 일 16:00:57 EDT 2012.
세계시 : 현재 월요일 7 월 9 일 20:00:57 UTC 2012.

/ etc / default / rcS 파일에는 다음이 있습니다.

UTC = 아니오

불행히도 이것은 작동하지 않습니다. jenkins의 시스템 정보에서 :

user.timezone 등 / UTC

나는 몇 시간 동안 검색했다. 불행히도 어떤 도움도 크게 주시면 고칠 수 없습니다.

시간 내 주셔서 감사합니다


2
6.5 년이 지난 후에도 표시하려는 시간대를 설정하도록 사용자 프로필을 구성 할 수 없습니다.
mkaatman

답변:


16

Jenkins를 시작할 때 필요한 user.timezone 값을 JVM 인수로 전달해야합니다. Java 명령 행은 다음과 같습니다.

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

불행히도 데비안 설치에 익숙하지는 않지만 JVM 매개 변수는 /etc/init.d/jenkins 스크립트 또는 해당 스크립트에서 참조되는 특성 파일에 정의해야합니다.


완벽하게 작동합니다.
drgn

1
Jenkins는 과거에 TimeTravel을 좋아하지 않습니다 : Last Sucess : -322 ms (# 30)
drgn


1
centos / rhel에서 / etc / sysconfig / jenkins에서 설정할 수 있습니다. JENKINS_JAVA_OPTIONS = "-Duser.timezone = America / New_York"
nandoP

1
Debian이에서 표준 시간대를 올바르게 설정했다고 믿지 않습니다 /etc/init.d/rc.local. Jenkins를 시작하는 Sysv init 스크립트를 가지고 있었을 것입니다. Jenkins 웹 사이트에 몇 가지 예가 있습니다. UTC=no에서이 /etc/default/rcS컴퓨터에 시간대와는 아무 상관이있다. 하드웨어 시계에 저장된 시간이 현지 시간인지 UTC 시간인지 알려줍니다. ntp시간 이동없이 시간을 천천히 조정하므로 시간, 사용 또는 기타 NTP 데몬을 클라이언트로 조정하는 방법
Anders

9

3 년 후, 나는 이것을 작동시키는 몇 가지 문제를 발견했습니다. 그래서, 나는 받아 들인 대답에 대해 자세히 설명하고 CentOS에 대한 완전한 대답을 추가 할 것입니다.


문제 # 1 : Jenkins 설정 변경

시간대 변경에 대한 현재 Jenkins 설명서에는 user.timezone 또는 을 정의한다고 나와 org.apache.commons.jelly.tags.fmt.timeZone있습니다. 그러나 나는 둘 다 필요 하다는 것을 알았습니다 . 젤리 하나는 Jenkins 적절한 플러그인 과 일부 플러그인에서 작동하지만 사용자 하나는 다른 플러그인에서 작동합니다.


문제 # 2 : 업데이트 할 OS 설정

미국 동부의 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


1
이는 CentOS의 도커 컨테이너에서 jenkins를 실행할 때 도움이되었지만 / etc / sysconfig / jenkins에는 옵션이 설정되지 않았습니다. 옵션은 docker run 명령의 docker 변수에 전달 된 다음 jenkins start 명령에 전달되었습니다.
gaoithe

7

우분투 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"속성에 대해, 지금의 값으로 "아시아 / 콜카타"을 참조하십시오.


2

Apache Tomcat에서 Jenkins를 실행중인 경우이를 <Apache-Tomcat-Dir> /conf/catalina.properties에 추가하십시오.

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

둘 다 필요합니다.


2

이것이 cron 스케줄 (즉, 주기적으로 빌드)을 기반으로 작업 실행과 관련이있는 경우 작업별로 cron 스케줄에서 시간대를 설정할 수 있습니다.

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

0

CentOS 7.1 (docker)의 jenkins v2.73.3의 경우 두 가지 모두를 발견했습니다.

1. OS 시간대를 설정하십시오 ( 예 : 'ln -sf / usr / share / zoneinfo / Asia / Jakarta / etc / localtime')

2. Jenkins 관리에서 시간대를 설정하십시오 ( 예 : '아시아 / 자카르타').

일반적인 jenkins : xxxx / restart 후에는 새로운 시간대가 사용됩니다.


0

CentOS 아래의 도커 컨테이너에서 jenkins를 실행할 때 상황을 다루기위한 답변 추가 . 이 경우 옵션은 / etc / sysconfig / jenkins에 설정되지 않을 수 있습니다 (jenkins 서비스 시작 스크립트에 따라 다름). jenkins.sh 스크립트는 jenkins 서비스를 시작하는 데 사용됩니다. 이 jenkins.sh 스크립트는 jenkins-inside-docker 프로젝트에서 사용하는 스크립트와 유사하므로이 답변은 도커 프로젝트에서 모든 젠킨스에게 유용합니다.

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

아래에서 TZ, 예를 들어 Europe / Dublin을 가져 와서 -e $ TZ를 docker run에 전달하여 / etc / timezone에 링크하거나 / etc / localtime에 링크하는 스크립트를 가질 수 있지만 중요한 것은 JAVA_OPTS에서이 두 인수를 전달하는 것입니다. "-Dorg.apache.commons.jelly.tags.fmt.timeZone = $ TZ -Duser.timezone = $ TZ". jenkins.sh 스크립트는 이것을 jenkins 프로세스를 시작하는 명령 행으로 전달합니다.

docker run 명령의 컨테이너 예제를 만들 때 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

옵션은 docker run 명령의 docker 변수에 전달 된 다음 jenkins start 명령에 전달되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.