Upload
kiyotaka-oku
View
2.402
Download
0
Embed Size (px)
Citation preview
開発以外でのJenkins活用方法
#juc2012_S505
株式会社ニューキャスト 奥清隆@kiy0taka
12年8月2日木曜日
12年8月2日木曜日
自己紹介
•奥 清隆 (id:kiy0taka、@kiy0taka)
•株式会社ニューキャスト
•大阪Jenkins勉強会
•日本Grails/Groovyユーザーグループ
•Jenkinsプラグイン開発者
12年8月2日木曜日
開発以外でのJenkins?•ビルド以外のバックアップとかサーバの死活監視とかをJenkinsでやるという話ではないです
•開発者以外の人にJenkinsを使ってもらう話です
•DTPの話が出てきますが知らなくても問題ないです。私もよく知りません。
•Jenkinsを使った自動化のヒントになればと思います。
12年8月2日木曜日
DTPでの利用例
•dprooFS•PDFの差分を見やすくすることで変更内容を確認する
•Demo
12年8月2日木曜日
•従業員数 約30名
•事業内容
•システム開発事業、Web関連事業印刷関連事業、出版事業、介護事業
12年8月2日木曜日
社内のJenkins
•Jenkinsインスタンス 4(2)
•Jenkinsノード 8(5)
•ジョブ 195(59)
12年8月2日木曜日
DTPDTP(Desktop publishing、デスクトップパブリッシング)とは、日本語で卓上出版を意味し、書籍、新聞などの編集に際して行う割り付けなどの作業をコンピュータ上で行い、プリンターで出力を行うこと。
http://ja.wikipedia.org/wiki/DTP
12年8月2日木曜日
DTPと開発の共通点
•コンピュータを使う
•人間がやらないといけないこともある
•人間がやらなくてもいいこともある
•イテレーションする
12年8月2日木曜日
DTPと開発の異なる点
•パソコンに詳しくない
•バージョン管理はしない
•自動テストとかしない(できない)
12年8月2日木曜日
人間がやらなくてもいいこともある
•DTPはそれほど自動化されていない
•自動化できるところもある
•そういう製品もあるが高価
12年8月2日木曜日
自動化してみる
12年8月2日木曜日
DTP用スクリプトを書く
•実行方法がわからない
•環境がちがって実行できない
•実行しても何が起こったのかわからない
•成功したのか失敗したのかよくわからない
12年8月2日木曜日
なんとなく開発現場と似ている
12年8月2日木曜日
ビルドスクリプトを書く
•実行方法がわからない
•環境がちがって実行できない
•実行しても何が起こったのかわからない
•成功したのか失敗したのかよくわからない
12年8月2日木曜日
そこでJenkinsですよ!
•自動化して出てくる問題はだいたいJenkinsが解決してくれる
•開発者だけに使わせるにはもったいない
•ビルド職人=自動化職人
12年8月2日木曜日
Jenkinsの利用方法
•標準機能とプラグインを組み合わせて使う
•APIを使って独自アプリケーションと連携
•独自のプラグインを開発する
12年8月2日木曜日
標準機能&プラグイン
12年8月2日木曜日
「シェルの実行」
•自動化する処理はシェルで書く
•シェルはバージョン管理しておく
•ジョブ実行時に最新版をチェックアウト
•必要なライブラリ等はパスを通しておく
12年8月2日木曜日
ビルドのパラメータ化
•バージョン管理をしていないのでビルドに必要なファイルを実行時に指定してもらう
12年8月2日木曜日
プラグインの活用
•実行結果を通知する
•IRC Plugin•成果物をアップロードする
•Publish over XXX Plugin•Groovy Postbuild Plugin
12年8月2日木曜日
権限周りの設定
•管理者権限は必要ない
•社内利用なので権限はなくてもいいが
•ジョブの設定を間違えて壊されないように
•誰が実行したかわかるように
12年8月2日木曜日
APIを利用する
12年8月2日木曜日
APIの利用•WebアプリをフロントエンドにしてバックエンドにJenkinsを使う
•Webアプリ側では使いやすいUIの提供やJenkins側で管理しないデータを扱う
•Jenkinsのスレーブ機能で処理が増えても簡単にクラスタを増やすことができる
12年8月2日木曜日
12年8月2日木曜日
12年8月2日木曜日
12年8月2日木曜日
リモートAPI
•http://jenkins/api•http://jenkins/job/myjob/api/json
•http://jenkins/job/myjob/build
12年8月2日木曜日
CLI
•コマンドラインインタフェース
•groovyコマンドとJenkinsの内部APIを使ってより複雑なことが可能
12年8月2日木曜日
コマンド実行方法
•java -jar jenkins-cli.jar -s http://jenkins-server/ groovy hello.groovy
12年8月2日木曜日
プログラムからの利用
import hudson.cli.CLI
def cli = new CLI('http://jenkins-server/')def args = ['groovy', File('hello.groovy').absolutePath]cli.execute(args, System.in, System.out, System.err)
12年8月2日木曜日
Demo
12年8月2日木曜日
DTPでの利用
•PDFの差分をとるアプリケーション
•Webアプリケーションでプロジェクトやチームという概念をあつかう
•頻繁にりようされるので使いやすいUIを提供する
12年8月2日木曜日
プラグインを作る
12年8月2日木曜日
特定の処理をプラグイン化
•hudson.tasks.Builderを継承して実装
•Builderの実装はたくさんあるので他のプラグインのソースを見ればわかるはず
12年8月2日木曜日
独自プラグインのメリット
•ほとんどない
•開発用プラグインの様に万人向けじゃなかったりする
•Javaのライブラリとかないので結局コマンドをJavaからプロセス実行することに
•シェルで書いた方が扱いやすい
12年8月2日木曜日
より連携しやすくするプラグイン
•結局、自動化したい処理はバラバラ
•いつも作っているアプリケーションから連携しやすくするぐらいが丁度いい
12年8月2日木曜日
Groovy Remote Control
•Jenkinsとの連携をよりやりやすくするためのプラグイン
•Groovy Remote Control
•http://groovy.codehaus.org/modules/remote/
•開発中。近日公開予定
12年8月2日木曜日
利用方法1import groovyx.remote.client.RemoteControlimport groovyx.remote.transport.http.HttpTransport
def transport = new HttpTransport('http://jenkins-server/')def remote = new RemoteControl(transport)
def result = remote { // ここの処理はJenkins上で実行される // シリアライズ可能なオブジェクトを返すことが可能 return 'hello'}
println result
アプリケーション→Jenkins12年8月2日木曜日
利用方法2•Jenkinsからアプリケーションのコードを実行
•アプリケーション側で連携用APIを実装する必要はない
•アプリケーションにあるビジネスロジックをJenkinsから実行する
Jenkins→アプリケーション12年8月2日木曜日
課題•アプリケーション側のオブジェクトをどう扱うか?
•アプリケーションのライブラリをJenkinsのクラスパスに指定する?
•アプリケーション側でコンテキストを提供する?
12年8月2日木曜日
まとめ
•Jenkins本体とプラグインだけでも十分できる
•APIで連携するアプリケーションをつくってより使いやすく
•開発者以外に使ってもらうには工夫が必要
12年8月2日木曜日
まとめ
•Jenkinsの使い方としてはちょっとやり過ぎ感も否めない。
•でも社内では大活躍
•Jenkinsを知らない人はいない
•開発者だけで使うにはもったいない
12年8月2日木曜日
Q&A
12年8月2日木曜日