Como fazer com que o Jenkins CI use a hora local em vez do UTC no debian squeeze

15

Eu tenho uma instalação Jenkins-ci em um aperto do debian.

Fuso horário padrão atual: 'America / Toronto'
A hora local é agora: segunda-feira, 9 de julho às 16:00:57 EDT 2012.
O horário universal é agora: segunda-feira 9 de julho 20:00:57 UTC 2012.

No arquivo / etc / default / rcS, tenho:

UTC = não

Infelizmente isso não está funcionando, nas informações do sistema de jenkins:

user.timezone Etc / UTC

Eu procurei por algumas horas .. infelizmente não consegui encontrar uma solução, qualquer ajuda seria muito apreciada.

Obrigado pelo seu tempo

drgn
fonte
2
6,5 anos depois, ainda não consigo configurar meu perfil de usuário para definir o fuso horário que quero ver exibido.
precisa saber é

Respostas:

16

Você precisa transmitir o valor necessário de user.timezone como um argumento da JVM ao iniciar o Jenkins. A linha de comando Java será semelhante a:

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

Infelizmente não estou familiarizado com a instalação da Debian, mas os parâmetros da JVM devem ser definidos no script /etc/init.d/jenkins ou em um arquivo de propriedades que é referenciado a partir desse script.

gareth_bowles
fonte
Obrigado funcionar perfeitamente.
drgn
1
Devo acrescentar que Jenkins não gosta de TimeTravel para o passado: Last Sucess: -322 ms (# 30)
drgn
1
no CentOS / RHEL, você pode definir no arquivo / etc / sysconfig / Jenkins: JENKINS_JAVA_OPTIONS = "- Duser.timezone = América / New_York"
nandoP
1
Não acredito que o Debian tenha configurado o fuso horário corretamente /etc/init.d/rc.local. Provavelmente funcionou com você, teve um script de inicialização do Sysv para iniciar o Jenkins. Existem alguns exemplos no site da Jenkins. O UTC=noin /etc/default/rcSnão tem nada a ver com o fuso horário na sua máquina. Está dizendo se a hora armazenada no relógio do hardware é a hora local ou a hora UTC. Sobre o ajuste da hora, use ntpou qualquer outro daemon NTP como cliente, pois ele ajustará lentamente a hora sem viajar no tempo.
Anders
9

Três anos depois, encontrei várias dicas para que isso funcionasse. Então, elaborarei a resposta aceita (correta) e adicionarei uma resposta completa para o CentOS.


Dica 1: As configurações de Jenkins a serem alteradas

A documentação atual do Jenkins sobre alteração de fuso horário diz para definir user.timezone ou org.apache.commons.jelly.tags.fmt.timeZone . Mas descobri que ambos são necessários. A geléia funciona para Jenkins e alguns plugins, enquanto o usuário trabalha para outros plugins.


Dica 2: As configurações do sistema operacional a serem atualizadas

Para o CentOS no leste dos EUA, edite /etc/sysconfig/jenkinspara:

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

Se você colocar essas -Dconfigurações JENKINS_ARGS, não funcionará.


Pega 3: Reiniciando

Você precisa reiniciar a partir da linha de comando, de todo o serviço. Simplesmente fazer uma reinicialização segura do Jenkins não é suficiente. Então:

sudo service jenkins restart

Quando você tiver feito tudo isso, verifique se as duas configurações de fuso horário correspondem ao painel de informações do sistema Jenkins: http://jenkins.example.com/systemInfo

bispo
fonte
1
Isso ajudou ao executar o jenkins em um contêiner de docker no CentOS, mas as opções não estão definidas em / etc / sysconfig / jenkins. As opções foram passadas na variável docker no comando docker run e depois no comando jenkins start.
precisa saber é
7

No Ubuntu 14.04, nenhuma das soluções acima funcionou para mim, mas acabei executando o seguinte comando, que exibe uma interface na qual o fuso horário pode ser alterado do padrão (nenhum selecionado) para algo mais específico:

sudo dpkg-reconfigure tzdata

Primeiro, você é solicitado a selecionar o continente (ou seja, América, Ásia etc.) e depois a cidade, que no meu caso resultou em "Ásia / Calcutá" para o fuso horário do IST na Índia.

Veja UbuntuTime - Usando a linha de comando .

Além disso, depois de alterar o fuso horário, reiniciei o Jenkins:

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

e, em seguida, verificou que a hora era no horário local de IST. Em http://<yourservername>/systemInfo, conforme fornecido pelo usuário bispo, na seção Propriedades do sistema, para a propriedade "user.timezone", agora vejo "Ásia / Calcutá" como seu valor.

jmort253
fonte
2

Se você estiver executando o Jenkins no Apache Tomcat, adicione-os ao <Apache-Tomcat-Dir> /conf/catalina.properties:

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

Ambos são necessários.

Tarkeshwar
fonte
2

Se isso estiver relacionado à execução de tarefas com base em um cronograma (por exemplo, Compilar periodicamente), você poderá definir o Fuso horário no cronograma por cronograma:

TZ=Europe/Dublin
0 7 * * 1-5
Garreth McDaid
fonte
0

Para o jenkins v2.73.3 no CentOS 7.1 (no docker), descobrimos que você precisa

1. defina o fuso horário do sistema operacional, por exemplo, 'ln -sf / usr / share / zoneinfo / Asia / Jakarta / etc / localtime' e

2. em Manage Jenkins, defina o fuso horário, por exemplo, 'Ásia / Jacarta'.

Após um jenkins regular: xxxx / restart, o novo fuso horário é usado.

gaoithe
fonte
0

Adicionando uma resposta para cobrir a situação ao executar o jenkins em um contêiner de docker no CentOS . Nesse caso, as opções podem não estar definidas em / etc / sysconfig / jenkins (dependendo dos scripts de início do serviço jenkins). Um script jenkins.sh é usado para iniciar o serviço jenkins. Esse script jenkins.sh é semelhante ao usado pelo projeto jenkins-inside-docker, portanto, espero que esta resposta seja útil para qualquer jenkins nos projetos de docker derivados disso.

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

Abaixo, obtemos TZ, por exemplo, Europe / Dublin e passamos -e $ TZ para o docker, para que possamos ter um script que escreva isso em / etc / fuso horário ou links / etc / localtime, mas o importante é passar esses dois argumentos em JAVA_OPTS: "-Dorg.apache.commons.jelly.tags.fmt.timeZone = $ TZ -Duser.timezone = $ TZ". O script jenkins.sh os passa para a linha de comando que inicia o processo jenkins.

No host do docker ao criar o exemplo de contêiner do comando 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

As opções foram passadas na variável docker no comando docker run e depois no comando jenkins start.

gaoithe
fonte