Jenkins修正タイムゾーン(Docker)


説明:jenkinsがdockerコンテナで実行されている場合、jenkinsの時間はコンテナの時間と一致しません.jenkinsではなく、システムで直接動作します.しかし、問題を解決する考え方は一致している.

に質問


公式のjenkinsコンテナでjenkinsサービスを実行していますが、jenkinsの時間はdockerコンテナ内の時間と同じですが、 とちょうど8時間差があります.きほんけっていじかんいきもんだい
jenkinsのdockerコンテナ時間を表示するには:
docker exec 

Jenkinsの表示時間
 “jenkins UI-》 -》 ” user.timezone 

ぶんせき


時間の差は8時間で、基本的にタイムゾーンの問題を確定することができます.だからインターネットでいくつかの内容を検索して、基本的な解決方法は以下の通りです.
  • メソッド1:jenkins公式にタイムゾーンを変更する方法.しかし基本的にはjenkins,javaのパラメータを修正することで目的を達成する.現在docker容器では処理できません.
  • メソッド2:/etc/localtimeファイルを変更する方法.この方法で処理したが,容器のシステム時間は現地時間と同じであったがjenkinsの時間は8時間差であった.

  • さいぶんせき


    docker容器の時間が正しい以上、jenkinsの時間は間違っており、jenkinsのタイムゾーンが/etc/localtimeではなく、別の場所を使用していることを示しています.jenkins-》 -》 において、タイムゾーンに関するuser.timezone属性値がEtc/UTCであることがわかる.どこに保管されているこの値は、/etc/timezoneのはずです.だから/etc/timezoneの設定を試してみます.
    docker exec my-jenkins cat /etc/timezone
    
    Etc/UTC

    タイムゾーンがEtc/UTCであることがわかり、基本的にはここが原因であることが確認できます.
    備考:debianシリーズを検証することでtimezoneというファイルがあり、centosにはこのファイルがありません.だからjenkinsのdocker容器はdebian系のlinuxに基づいていると判断した.

    解決する

  • 修正/etc/localtime、容器修正時間
  • 修正/etc/timezone、jenkinsのタイムゾーン
  • 修正
    最終的にdockerコンテナを構築するコマンドは次のとおりです(他のパラメータがあれば、自分で他のパラメータを追加してください)
    docker run -d --name ci --privileged=true -v /etc/localtime:/etc/localtime -v /[my_path]/timezone:/etc/timezone jenkins

    または
    docker run -d --name ci --privileged=true -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime -v /[my_path]/timezone:/etc/timezone jenkins
  • /[my_path]/timezoneを対応するパス
  • に変更
  • dockerホストシステムにtimezoneファイルが存在しない場合は、timezoneファイルを自分で作成(または別の場所からコピー)することができます.timezoneファイルの内容は次のとおりです.
  •     Asia/Shanghai
  • localtimeに関連するファイルが存在しない場合、解決構想はtimezoneと類似しており、これ以上説明しない.