Slide 1

Slide 1 text

のつらみを 軽減した話

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

アジェンダ ● 背景 を使わざるを得ない理由 ● のつらいところ ● つらいところを改善した話し

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

を使わざるを得ない理由 ● ゲームをビルドする場合、ゲームアセットを大量に作る為、 ビルドに非常に長い時間が掛かる ○ 高いスペックのマシンが複数台必要 ● 現状は を提供しているクラウド は速度面などに問題があるので移行でき ていない

Slide 7

Slide 7 text

のつらみ

Slide 8

Slide 8 text

のつらみ ● 構築運用に関して ○ オンプレで構築する場合、構築と運用にコストが掛かる ■ クラウドサービスを利用しないので当然発生する問題 ○ 監視や可用性の確保を自分で行う必要がある ■ で監視したり、 の設定ファイルを定期的にバックアップとったり 色々面 倒くさい ○ の管理 ■ 複数の クラスターを管理していると どこに何の が入っているのかわからなくなったり ○ マシン毎の環境差異を考えなければならない ■ 別の で成功していたジョブを別の で動かしたら失敗した ● 利用に関して ○ ジョブの管理 ■ でポチポチしないといけない ●

Slide 9

Slide 9 text

のつらみを改善

Slide 10

Slide 10 text

のつらみ ● 構築運用に関して ○ 構築と運用にコストがかかる ○ の管理 ○ によって環境差異が発生する ○ 監視や可用性 今回は触れません ● 利用に関して ○ ジョブの管理 構築自動化

Slide 11

Slide 11 text

構築自動化

Slide 12

Slide 12 text

の構成 Jenkins Master (Linux) 構成 Jenkins Slave (Windows) Jenkins Slave (Mac) Jenkins Slave (Mac) ・ ・ ・

Slide 13

Slide 13 text

構築自動化 ノードにマシンパワーは必要ないので、 クラウド上のリソースを利用して に構築している。 ● でクラウド上 のインスタンスを管理 ● で のセットアップを自動化

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

の検証基盤 ● と を使って クリーンな環境へのインストールを試行可能にして を回している ● や は で仮想化して に変換 詳細は ある エンジニアの開発プロセス改善最前線 の発表資料をご覧ください

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

まとめ ● 構築運用に関して ○ 構築と運用にコストがかかる と で自動化 ○ の管理 コードで管理できるように ○ によって環境差異が発生する で自動化 ○ 監視や可用性 今回は触れません ● 利用に関して ○ ジョブの管理 化してコードで管理

Slide 25

Slide 25 text

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