Cara membuat Jenkins CI menggunakan Waktu lokal, bukan UTC pada pemerasan debian

15

Saya memiliki instalasi Jenkins-ci pada pemerasan debian.

Zona waktu default saat ini: 'Amerika / Toronto'
Waktu setempat sekarang jam 11 Jul 16:00:57 EDT 2012.
Waktu Universal sekarang: Senin 9 Juli 20:00:57 UTC 2012.

Dalam file / etc / default / rcS yang saya miliki:

UTC = tidak

Sayangnya ini tidak berfungsi, dalam sistem informasi jenkins:

user.timezone Dll / UTC

Saya mencari beberapa jam .. sayangnya tidak dapat menemukan perbaikan, bantuan akan sangat dihargai.

Terima kasih untuk waktu anda

drgn
sumber
2
6,5 tahun kemudian, saya masih tidak dapat mengkonfigurasi profil pengguna saya untuk mengatur zona waktu yang ingin saya tampilkan.
mkaatman

Jawaban:

16

Anda harus memberikan nilai user.timezone yang diperlukan sebagai argumen JVM saat Anda memulai Jenkins. Baris perintah Java akan terlihat seperti:

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

Sayangnya saya tidak terbiasa dengan instalasi Debian, tetapi parameter JVM harus didefinisikan dalam skrip /etc/init.d/jenkins atau dalam file properti yang dirujuk dari skrip itu.

gareth_bowles
sumber
Terima kasih itu bekerja dengan sempurna.
drgn
1
Saya harus menambahkan, Jenkins tidak suka TimeTravel ke masa lalu: Last Sucess: -322 ms (# 30)
drgn
1
pada centos / rhel, Anda dapat mengatur di / etc / sysconfig / jenkins: JENKINS_JAVA_OPTIONS = "- Duser.timezone = America / New_York"
nandoP
1
Saya tidak yakin Debian telah mengatur zona waktu dengan benar di /etc/init.d/rc.local. Mungkin berhasil jika Anda memiliki skrip init Sysv untuk memulai Jenkins. Ada beberapa contoh di situs web Jenkins. The UTC=nodalam /etc/default/rcStidak ada hubungannya dengan zona waktu pada mesin Anda. Dikatakan jika waktu yang disimpan dalam jam perangkat keras adalah waktu setempat atau waktu UTC. Tentang mengatur waktu, menggunakan ntpatau daemon NTP lainnya sebagai klien, karena akan perlahan-lahan menyesuaikan waktu tanpa perjalanan waktu.
Anders
9

Tiga tahun kemudian, saya menemukan beberapa gotchas berhasil. Jadi, saya akan menguraikan jawaban yang diterima (yang benar) dan menambahkan jawaban lengkap untuk CentOS.


Gotcha # 1: Pengaturan Jenkins untuk berubah

Dokumentasi Jenkins saat ini tentang mengubah zona waktu mengatakan untuk mendefinisikan user.timezone atau org.apache.commons.jelly.tags.fmt.timeZone . Tetapi, saya telah menemukan bahwa keduanya diperlukan. Jeli yang satu berfungsi untuk Jenkins yang tepat dan beberapa plugin, sementara yang satu bekerja untuk plugin yang lain.


Gotcha # 2: Pengaturan OS untuk memperbarui

Untuk CentOS di AS Timur, edit /etc/sysconfig/jenkinske:

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

Jika Anda memasukkan -Dpengaturan ini ke dalam JENKINS_ARGS, itu tidak akan berfungsi.


Gotcha # 3: Restart

Anda harus memulai kembali dari baris perintah, seluruh layanan. Cukup melakukan Jenkins restart yang aman tidak cukup. Begitu:

sudo service jenkins restart

Ketika Anda sudah melakukan semua ini, periksa apakah kedua pengaturan zona waktu cocok di panel informasi sistem Jenkins Anda: http://jenkins.example.com/systemInfo

uskup
sumber
1
Ini membantu ketika menjalankan jenkins dalam wadah buruh pelabuhan di bawah CentOS tetapi opsi tidak diset di / etc / sysconfig / jenkins. Opsi-opsi dilewatkan dalam variabel buruh pelabuhan dalam perintah jalankan buruh pelabuhan dan kemudian diteruskan ke perintah mulai jenkins.
gaoithe
7

Di Ubuntu 14.04, tidak ada solusi di atas yang berfungsi untuk saya, tetapi saya akhirnya menjalankan perintah berikut, yang menarik antarmuka di mana zona waktu dapat diubah dari default (tidak ada yang dipilih) menjadi sesuatu yang lebih spesifik:

sudo dpkg-reconfigure tzdata

Pertama, Anda diminta untuk memilih benua, (yaitu Amerika, Asia, dll) dan kemudian kota, yang dalam kasus saya menghasilkan "Asia / Kolkata" untuk zona waktu IST di India.

Lihat UbuntuTime - Menggunakan Baris Perintah .

Selain itu, setelah mengubah zona waktu, saya memulai kembali Jenkins:

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

dan kemudian memverifikasi bahwa waktu itu dalam waktu IST lokal. Di http://<yourservername>/systemInfo, seperti yang disediakan oleh uskup pengguna, di bawah bagian System Properties, untuk properti "user.timezone", sekarang saya melihat "Asia / Kolkata" sebagai nilainya.

jmort253
sumber
2

Jika Anda menjalankan Jenkins di Apache Tomcat, tambahkan ini ke <Apache-Tomcat-Dir> /conf/catalina.properties:

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

Keduanya dibutuhkan.

tarkeshwar
sumber
2

Jika ini terkait dengan pelaksanaan pekerjaan berdasarkan jadwal cron (yaitu, Bangun Secara berkala), Anda dapat mengatur Zona Waktu Anda dalam jadwal cron berdasarkan per pekerjaan:

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

Untuk jenkins v2.73.3 pada CentOS 7.1 (di buruh pelabuhan) kami telah menemukan Anda harus keduanya

1. mengatur zona waktu OS mis. 'Ln -sf / usr / share / zoneinfo / Asia / Jakarta / etc / localtime' dan

2. di bawah Manage Jenkins atur zona waktu mis 'Asia / Jakarta'.

Setelah jenkins biasa: xxxx / restart zona waktu baru digunakan.

gaoithe
sumber
0

Menambahkan jawaban untuk menutupi situasi saat menjalankan jenkins dalam wadah buruh pelabuhan di bawah CentOS . Dalam hal ini opsi mungkin tidak diatur di / etc / sysconfig / jenkins (tergantung pada skrip mulai layanan jenkins Anda). Skrip jenkins.sh digunakan untuk memulai layanan jenkins. Skrip jenkins.sh ini mirip dengan yang digunakan oleh proyek jenkins-inside-docker sehingga jawaban ini mudah-mudahan bermanfaat bagi setiap jenkins dalam proyek buruh pelabuhan yang berasal dari itu.

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

Di bawah ini kita mendapatkan TZ misalnya Eropa / Dublin dan meneruskan -e $ TZ untuk menjalankan docker sehingga kita dapat memiliki skrip yang menulis bahwa ke / etc / timezone atau tautan / etc / localtime tetapi yang penting adalah melewati dua argumen ini di JAVA_OPTS: "-Dorg.apache.commons.jelly.tags.fmt.timeZone = $ TZ -Duser.timezone = $ TZ". Skrip jenkins.sh meneruskan ini ke baris perintah yang memulai proses jenkins.

Pada host buruh pelabuhan ketika membuat contoh wadah perintah buruh pelabuhan:

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

Opsi diteruskan dalam variabel buruh pelabuhan di buruh pelabuhan menjalankan perintah dan kemudian diteruskan ke perintah mulai jenkins.

gaoithe
sumber