44
開発以外での Jenkins活用方法 #juc2012_S505 株式会社ニューキャスト 奥清隆 @kiy0taka 1282日木曜日

JUC2012

Embed Size (px)

Citation preview

Page 1: JUC2012

開発以外でのJenkins活用方法

#juc2012_S505

株式会社ニューキャスト 奥清隆@kiy0taka

12年8月2日木曜日

Page 2: JUC2012

12年8月2日木曜日

Page 3: JUC2012

自己紹介

•奥 清隆 (id:kiy0taka、@kiy0taka)

•株式会社ニューキャスト

•大阪Jenkins勉強会

•日本Grails/Groovyユーザーグループ

•Jenkinsプラグイン開発者

12年8月2日木曜日

Page 4: JUC2012

開発以外でのJenkins?•ビルド以外のバックアップとかサーバの死活監視とかをJenkinsでやるという話ではないです

•開発者以外の人にJenkinsを使ってもらう話です

•DTPの話が出てきますが知らなくても問題ないです。私もよく知りません。

•Jenkinsを使った自動化のヒントになればと思います。

12年8月2日木曜日

Page 5: JUC2012

DTPでの利用例

•dprooFS•PDFの差分を見やすくすることで変更内容を確認する

•Demo

12年8月2日木曜日

Page 6: JUC2012

•従業員数 約30名

•事業内容

•システム開発事業、Web関連事業印刷関連事業、出版事業、介護事業

12年8月2日木曜日

Page 7: JUC2012

社内のJenkins

•Jenkinsインスタンス 4(2)

•Jenkinsノード 8(5)

•ジョブ 195(59)

12年8月2日木曜日

Page 8: JUC2012

DTPDTP(Desktop publishing、デスクトップパブリッシング)とは、日本語で卓上出版を意味し、書籍、新聞などの編集に際して行う割り付けなどの作業をコンピュータ上で行い、プリンターで出力を行うこと。

http://ja.wikipedia.org/wiki/DTP

12年8月2日木曜日

Page 9: JUC2012

DTPと開発の共通点

•コンピュータを使う

•人間がやらないといけないこともある

•人間がやらなくてもいいこともある

•イテレーションする

12年8月2日木曜日

Page 10: JUC2012

DTPと開発の異なる点

•パソコンに詳しくない

•バージョン管理はしない

•自動テストとかしない(できない)

12年8月2日木曜日

Page 11: JUC2012

人間がやらなくてもいいこともある

•DTPはそれほど自動化されていない

•自動化できるところもある

•そういう製品もあるが高価

12年8月2日木曜日

Page 12: JUC2012

自動化してみる

12年8月2日木曜日

Page 13: JUC2012

DTP用スクリプトを書く

•実行方法がわからない

•環境がちがって実行できない

•実行しても何が起こったのかわからない

•成功したのか失敗したのかよくわからない

12年8月2日木曜日

Page 14: JUC2012

なんとなく開発現場と似ている

12年8月2日木曜日

Page 15: JUC2012

ビルドスクリプトを書く

•実行方法がわからない

•環境がちがって実行できない

•実行しても何が起こったのかわからない

•成功したのか失敗したのかよくわからない

12年8月2日木曜日

Page 16: JUC2012

そこでJenkinsですよ!

•自動化して出てくる問題はだいたいJenkinsが解決してくれる

•開発者だけに使わせるにはもったいない

•ビルド職人=自動化職人

12年8月2日木曜日

Page 17: JUC2012

Jenkinsの利用方法

•標準機能とプラグインを組み合わせて使う

•APIを使って独自アプリケーションと連携

•独自のプラグインを開発する

12年8月2日木曜日

Page 18: JUC2012

標準機能&プラグイン

12年8月2日木曜日

Page 19: JUC2012

「シェルの実行」

•自動化する処理はシェルで書く

•シェルはバージョン管理しておく

•ジョブ実行時に最新版をチェックアウト

•必要なライブラリ等はパスを通しておく

12年8月2日木曜日

Page 20: JUC2012

ビルドのパラメータ化

•バージョン管理をしていないのでビルドに必要なファイルを実行時に指定してもらう

12年8月2日木曜日

Page 21: JUC2012

プラグインの活用

•実行結果を通知する

•IRC Plugin•成果物をアップロードする

•Publish over XXX Plugin•Groovy Postbuild Plugin

12年8月2日木曜日

Page 22: JUC2012

権限周りの設定

•管理者権限は必要ない

•社内利用なので権限はなくてもいいが

•ジョブの設定を間違えて壊されないように

•誰が実行したかわかるように

12年8月2日木曜日

Page 23: JUC2012

APIを利用する

12年8月2日木曜日

Page 24: JUC2012

APIの利用•WebアプリをフロントエンドにしてバックエンドにJenkinsを使う

•Webアプリ側では使いやすいUIの提供やJenkins側で管理しないデータを扱う

•Jenkinsのスレーブ機能で処理が増えても簡単にクラスタを増やすことができる

12年8月2日木曜日

Page 25: JUC2012

12年8月2日木曜日

Page 26: JUC2012

12年8月2日木曜日

Page 27: JUC2012

12年8月2日木曜日

Page 28: JUC2012

リモートAPI

•http://jenkins/api•http://jenkins/job/myjob/api/json

•http://jenkins/job/myjob/build

12年8月2日木曜日

Page 29: JUC2012

CLI

•コマンドラインインタフェース

•groovyコマンドとJenkinsの内部APIを使ってより複雑なことが可能

12年8月2日木曜日

Page 30: JUC2012

コマンド実行方法

•java -jar jenkins-cli.jar -s http://jenkins-server/ groovy hello.groovy

12年8月2日木曜日

Page 31: JUC2012

プログラムからの利用

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日木曜日

Page 32: JUC2012

Demo

12年8月2日木曜日

Page 33: JUC2012

DTPでの利用

•PDFの差分をとるアプリケーション

•Webアプリケーションでプロジェクトやチームという概念をあつかう

•頻繁にりようされるので使いやすいUIを提供する

12年8月2日木曜日

Page 34: JUC2012

プラグインを作る

12年8月2日木曜日

Page 35: JUC2012

特定の処理をプラグイン化

•hudson.tasks.Builderを継承して実装

•Builderの実装はたくさんあるので他のプラグインのソースを見ればわかるはず

12年8月2日木曜日

Page 36: JUC2012

独自プラグインのメリット

•ほとんどない

•開発用プラグインの様に万人向けじゃなかったりする

•Javaのライブラリとかないので結局コマンドをJavaからプロセス実行することに

•シェルで書いた方が扱いやすい

12年8月2日木曜日

Page 37: JUC2012

より連携しやすくするプラグイン

•結局、自動化したい処理はバラバラ

•いつも作っているアプリケーションから連携しやすくするぐらいが丁度いい

12年8月2日木曜日

Page 38: JUC2012

Groovy Remote Control

•Jenkinsとの連携をよりやりやすくするためのプラグイン

•Groovy Remote Control

•http://groovy.codehaus.org/modules/remote/

•開発中。近日公開予定

12年8月2日木曜日

Page 39: JUC2012

利用方法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日木曜日

Page 40: JUC2012

利用方法2•Jenkinsからアプリケーションのコードを実行

•アプリケーション側で連携用APIを実装する必要はない

•アプリケーションにあるビジネスロジックをJenkinsから実行する

Jenkins→アプリケーション12年8月2日木曜日

Page 41: JUC2012

課題•アプリケーション側のオブジェクトをどう扱うか?

•アプリケーションのライブラリをJenkinsのクラスパスに指定する?

•アプリケーション側でコンテキストを提供する?

12年8月2日木曜日

Page 42: JUC2012

まとめ

•Jenkins本体とプラグインだけでも十分できる

•APIで連携するアプリケーションをつくってより使いやすく

•開発者以外に使ってもらうには工夫が必要

12年8月2日木曜日

Page 43: JUC2012

まとめ

•Jenkinsの使い方としてはちょっとやり過ぎ感も否めない。

•でも社内では大活躍

•Jenkinsを知らない人はいない

•開発者だけで使うにはもったいない

12年8月2日木曜日

Page 44: JUC2012

Q&A

12年8月2日木曜日