cari

Rumah  >  Soal Jawab  >  teks badan

docker - jenkins的时区设置问题

在jenkins中配置的任务,从任务log看,发现时间都是按照格林威治时间显示的,jenkins的系统管理中的“系统信息”里,user.timezone也是Etc/UTC。

我的这个jenkins环境是这样的:jenkins server运行在docker container中,host是ubuntu14.04,container使用的镜像也是基于ubuntu14.04的。最初,host和container的时间也是格林威治时间,我通过"sudo cp /usr/share/zoneinfo/PRC /etc/localtime"重新配置了系统的时区,host和container的时间显示就为北京时间了。但是jenkins server里显示的时间依然是格林威治时间,即使是我将container删掉,重新创建,也还是这样。

不知如何才能将jenkins中的时间调整为北京时间?谢谢。

PHPzPHPz2777 hari yang lalu1778

membalas semua(5)saya akan balas

  • 天蓬老师

    天蓬老师2017-04-21 10:59:47

    Masalah ini belum selesai. Walau bagaimanapun, kerana saya perlu menggunakan masa Beijing dalam skrip, saya menggunakan perintah TZ='PRC' date untuk menyimpannya ke paparan berubah-ubah, yang hanya memintas masalah ini.

    balas
    0
  • 高洛峰

    高洛峰2017-04-21 10:59:47

    Jangan berpura-pura baik di tingkat atas, ini satu penipuan, saya fikir ia benar-benar tidak dapat diselesaikan dan ia hampir mengelirukan saya.
    Sebab asasnya ialah Jenkins menggunakan masa jvm, jadi ia akan tetap berbeza daripada masa sistem yang diubah suai kemudian. Saya telah menyelesaikannya.

    Tetapan zon waktu JVM di bawah Linux
    Pada pemasangan jre Linux yang diperkemas, saya mendapati bahawa masa yang diperolehi oleh semua program java bukanlah masa sistem. Kemudian saya mendapat tahu bahawa zon waktu adalah salah. Masa yang diperolehi oleh program java ialah semua masa GMT, dan sistem ialah waktu Beijing, yang sepatutnya GMT+8, iaitu betul-betul 8 jam berbeza. Selepas mencari banyak maklumat dalam talian, hanya terdapat dua kaedah:
    1. Gunakan fungsi java untuk menetapkan zon waktu dalam program.
    2. Tambahkan parameter -Duser.timezone=GMT+8

    apabila memulakan program java

    Tetapi anda tidak boleh mengubah suai kod sumber setiap program untuk menetapkan zon waktu. Saya tidak mahu menambah parameter apabila setiap program java bermula, ia terlalu menyusahkan. Adakah tiada penyelesaian kekal?

    Saya pada mulanya menyangka bahawa jre akan mempunyai fail konfigurasi yang menyimpan konfigurasi zon waktu, tetapi tidak menemui apa-apa. Walau bagaimanapun, jre sentiasa perlu pergi ke sistem untuk mendapatkan konfigurasi zon waktu. Jadi saya mula tertanya-tanya sama ada Java menggunakan fail konfigurasi sistem di Linux? Jadi pergi ke direktori /etc/sysconfig di bawah sistem Linux untuk melihat konfigurasi zon waktu. Didapati bahawa fail jam yang digunakan untuk menetapkan zon waktu tiada. Salin fail ini daripada sistem Linux yang lain dan cuba, ok. Masa program java adalah konsisten dengan masa sistem. Nampaknya jre memperoleh maklumat zon waktu daripada fail /etc/sysconfig/clock.

    Dilampirkan kandungan fail jam:

    ZONE="Asia/Shanghai"
    UTC=palsu
    ARC=palsu

    ZON -- Zon waktu
    UTC -- Menunjukkan bahawa jam ditetapkan kepada UTC.
    ARC -- alpha hanya menunjukkan penggunaan ARC.

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-21 10:59:47

    docker run ... -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai
    

    https://github.com/jenkinsci/docker/issues/45

    balas
    0
  • 巴扎黑

    巴扎黑2017-04-21 10:59:47

    Serahkan kaedah lain,
    1.cd /etc
    2.rm waktu tempatan
    3.localtime -> /usr/share/zoneinfo/Asia/Shanghai
    4. Mulakan semula pelayan jenkins pada halaman, http://jenkins-server:8080/restart

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-21 10:59:47

    Saya menggunakan Ubuntu 12.04, dipasang melalui pakej deb Jenkins.

    Kaedah pengubahsuaian adalah seperti berikut:

    sudo sed -i -r 's#JAVA_ARGS="(.*)"#JAVA_ARGS="-Duser.timezone=Asia/Shanghai "#g' /etc/default/jenkins
    sudo service jenkins restart

    atau

    sudo sed -i -r 's#JAVA_ARGS="(.*)"#JAVA_ARGS="-Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai "#g' /etc/default/jenkins
    sudo service jenkins restart

    Sejak Google disekat, orang jarang membaca dokumen rasmi, wiki rasmi

    balas
    0
  • Batalbalas