Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Jenkins のつらみを軽減した話

Junki Kaneko
February 21, 2019

Jenkins のつらみを軽減した話

Junki Kaneko

February 21, 2019
Tweet

More Decks by Junki Kaneko

Other Decks in Technology

Transcript

  1. のつらみを
    軽減した話

    View Slide

  2. 自己紹介
    金子淳貴
    株式会社ディー・エヌ・エー
    -
    SWET.G
    -
    言語
    -
    Go, Ruby, Python

    View Slide

  3. アジェンダ

    背景 を使わざるを得ない理由

    のつらいところ

    つらいところを改善した話し

    View Slide

  4. 背景 を使わざるを得ない理由

    View Slide

  5. 背景
    社内全体の開発生産性向上と品質向上をミッションとしている横串組織
    社内では事業や組織毎に を から作り直しているところが多く、
    適切な構築運用を行われていないところが多かった
    適切な構築運用を行うための調査、開発、啓蒙を で行った

    View Slide

  6. を使わざるを得ない理由

    ゲームをビルドする場合、ゲームアセットを大量に作る為、
    ビルドに非常に長い時間が掛かる

    高いスペックのマシンが複数台必要

    現状は を提供しているクラウド は速度面などに問題があるので移行でき
    ていない

    View Slide

  7. のつらみ

    View Slide

  8. のつらみ

    構築運用に関して

    オンプレで構築する場合、構築と運用にコストが掛かる
    ■ クラウドサービスを利用しないので当然発生する問題

    監視や可用性の確保を自分で行う必要がある
    ■ で監視したり、 の設定ファイルを定期的にバックアップとったり 色々面
    倒くさい

    の管理
    ■ 複数の クラスターを管理していると
    どこに何の が入っているのかわからなくなったり

    マシン毎の環境差異を考えなければならない
    ■ 別の で成功していたジョブを別の で動かしたら失敗した

    利用に関して

    ジョブの管理
    ■ でポチポチしないといけない

    View Slide

  9. のつらみを改善

    View Slide

  10. のつらみ

    構築運用に関して

    構築と運用にコストがかかる

    の管理

    によって環境差異が発生する

    監視や可用性 今回は触れません

    利用に関して

    ジョブの管理
    構築自動化

    View Slide

  11. 構築自動化

    View Slide

  12. の構成
    Jenkins Master
    (Linux)
    構成
    Jenkins Slave
    (Windows)
    Jenkins Slave
    (Mac)
    Jenkins Slave
    (Mac)



    View Slide

  13. 構築自動化
    ノードにマシンパワーは必要ないので、
    クラウド上のリソースを利用して に構築している。

    でクラウド上 のインスタンスを管理

    で のセットアップを自動化

    View Slide

  14. 構築自動化
    はファイルへ指定フォーマットで記載してインストール可能としてお
    り、それを で実行している。
    既存の にインストールされている 一覧を
    ファイルにダンプすることも可能。
    https://github.com/Kuniwak/jenkins-plugin-fixator

    View Slide

  15. 構築自動化
    を利用して のセットアップを自動化
    ノード毎の設定値を で管理。
    インストールする のバージョン一覧
    インストールする のバージョン
    アカウント 証明書 プロファイルの情報

    View Slide

  16. の検証基盤

    と を使って
    クリーンな環境へのインストールを試行可能にして を回している

    や は で仮想化して に変換
    詳細は
    ある エンジニアの開発プロセス改善最前線
    の発表資料をご覧ください

    View Slide

  17. 環境毎の差異
    を利用し、
    ノードにインストールされているアプリケーションを自動検知し、
    ノードにラベルを自動で割り当て、
    ジョブ実行時に利用する を指定できるようにしている
    https://github.com/jenkinsci/app-detector-plugin
    自動割り当て

    View Slide

  18. View Slide

  19. から標準機能の一つとして が入っている。
    ユーザーライクな設定
    ソースコードと一緒に管理することが可能
    の一連の流れを一括管理可能

    View Slide

  20. を ブロックでパイプラインを定義する
    単純化された構文を利用する
    自由度は低い
    簡単に記述することができる
    を ブロックでパイプラインを定義する
    構文で記述することが可能
    自由度は高い
    自由度が高すぎて可読性が低くなりがち

    View Slide

  21. スレーブの指定。
    ステージ毎、もしくはステージ共通で定義できる
    のワークフローを 毎に定義していく
    具体的な動作をここに定義していく
    ワークフローの終了結果毎に条件分岐して
    後処理のハンドリングを行える

    View Slide

  22. 環境変数を定義できる
    credentials()を使うと
    認証情報を扱うことができる
    実行時のパラメータ
    を定義できる
    ステージ内に定義し、
    そのステージを実行する条件
    を定義できる

    View Slide

  23. 処理等を 化し、
    複数の で再利用することができる の標準機能。
    https://jenkins.io/doc/book/pipeline/shared-libraries/

    View Slide

  24. まとめ

    構築運用に関して

    構築と運用にコストがかかる と で自動化

    の管理 コードで管理できるように

    によって環境差異が発生する で自動化

    監視や可用性 今回は触れません

    利用に関して

    ジョブの管理 化してコードで管理

    View Slide

  25. 最後に
    も工夫すれば楽になる!
    けどクラウド で問題なければクラウド を使った方が良いと思います

    View Slide