by shigemk2

当面は技術的なことしか書かない

中規模プロジェクトでのJenkinsの運用を支える技術

スピーカー @ikikko from ヌーラボ

背景
プロジェクト概要(初期)
共通に利用するフレームワークの開発
10名前後/月

プロジェクト数 20前後

プロジェクト概要(現在)
フェーズ 業務ロジックを含んだアプリケーション開発
100名/月
プロジェクト数 108

問題点
20前後なら、頑張れば1つ1つベタに管理できる
100越えると無理ゲー

対策
多数のプロジェクトの管理

  • 依存ライブラリの管理
    • 依存しているライブラリを設定ファイルに記述する(コンパイル時に自動的に捕捉する)
    • セントラルレポジトリ x インハウスレポジトリ

ライブラリの依存管理を自分でやりたくない(ものすごく複雑になってる)
多数のライブラリを管理できる
ライブラリのバージョン変更にも対応できる
内部のライブラリでころころ仕様が変わるやつのチェックも容易

Jenkinsとの連携

設定ファイルを基に、プロジェクトの上流下流を設定する
(xxxプロジェクトが反映されたら、次にyyyプロジェクトを反映する、という
使い方も可能)
バージョンも考慮して自動設定

プロジェクト間の成果物の転送
(普通はwgetとかを使うのかな…?)
ライブラリ管理機能を使えば、成果物はレポジトリ経由でやりとり出来る

関連ツール
Maven 標準のビルドライフサイクル
Ivy (Antベース)
Gradle (Groovyで記述可能)
SBT (Scalaで記述できる)

レポジトリ管理ツール
Webサーバ + WebDAVモジュール (mod_davで簡単に用意できる)
専用ツール Artifactory / Nexusなど


プロジェクトの一括変更

全プロジェクトを横断的に変更したい
プロジェクトを1つずつ変更するのは大変

スクリプトコンソールを使い、全プロジェクトの中身を一括変更する
(スクリプトを書いていると、Jenkinsの内部実装に詳しくもなれる)

Configuration Slicing Plugin

  • 標準的な項目を、GUI上で一括編集出来る
  • 古いビルドを破棄

Scriptler Plugin

  • スクリプトの保存、再利用
  • 用意されている外部のスクリプトを利用可能
  • スクリプトの実行権限の管理

プロジェクトのお手軽コピー
Jenkinsの機能に、プロジェクトコピー機能がある。

コピー後に画面上から修正が必要。
レポジトリのパス
プロジェクト名を含んだ設定項目

プロジェクトを自前コピー

  1. 設定ファイルをコピー
  2. 依存箇所を修正
  3. 修正したものを基に、コピープロジェクトを新規作成

Remote Access API
プログラムから操作可能なAPI
プロジェクトの作成
プロジェクトの設定取得

Cloudbees Template Plugin
予めテンプレを作成して、そのテンプレを後から利用出来るようにする

100近くあるプロジェクトの管理コストをあのてこのて使って減らす

スロービルド対策
マシンのスケールアップ、アウトで対策
ビルド実行時間の計測、グラフ化

1クリックリリース
リリースプロジェクトの作成
環境ごとに設定を切り替える仕組み(プロファイル)

Jenkinsの拡張
スクリプトコンソール
ショートカットキーの割り当て
Ivyプラグイン
特定の場合にビルドさせないように

バグ報告は日本語も可