• Like
jenkinsで遊ぶ
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Published

 

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
13,344
On SlideShare
0
From Embeds
0
Number of Embeds
4

Actions

Shares
Downloads
42
Comments
0
Likes
41

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Jenkinsで遊ぶシェルスクリプトって便利だね
  • 2. jenkinsとは► 継続的インテグレーションをやる開発のツール 自動ビルド、自動テスト
  • 3. cronの変わりに使う► cronの可視化をしてみる► ビルドを行う部分でシェルスクリプトが実行でき る► 起動させるための時間指定の書式がcronと まったく一緒
  • 4. なにがうれしいか► WebUIを持っている► 実行にかかった時間をグラフ化してくれる► ジョブ終了時の動作を指定できる メール通知 別のジョブの呼び出し 正常終了時と異常終了時で動作を変えれる► リトライやタイムアウトを設定できる► 実行時のログがすべて残せる(過去に遡って見れる)
  • 5. グラフ化エラーになったところは赤くなる 増えていくのがわかる
  • 6. 実行ログが残せる/dev/nullに捨てるなんてとんでもない!!
  • 7. なにがざんねんか► Javaで動くのでJDKのインストール必須► 頻繁にアップデートされる 放置すると残念なことに► 起動は時間ぴったりに行われない 起動が数秒でも遅れたら致命的なものには使えない► 単語の混乱 ジョブ?プロジェクト?(イコールっぽい) 目的が違う使い方→ビルド? わりとどうでもいいことばかりなのでぜひ使うべし
  • 8. はじめの一歩► インストール Javaが入っていればOK RPMが提供されている yumリポジトリがある► テストジョブ作成 はろーわーるど的ななにか スリースタイルのジョブ
  • 9. ジョブの構成 ジョブの定義 ビルドの世代管理/リトライ回数/有効・無効/他のジョブ が動いてるときの動作/タイムアウトなど いつ実行するか ビルド・トリガ 定期/ファイル・ディレクトリが更新されたら・別のジョブ から/リポジトリが更新されたら/メールボックス/IRCビルド環境の整備 ワークスペースの削除/事前に実行するコマンド/ログ の出力形式 処理内容(シェルスクリプト/Pythonなどなど) ビルド 何段にでも並べられる メール通知/別のジョブの呼び出し/成果物の保存ビルド後の処理 プラグインで拡張
  • 10. テキストエリアにブチ込む この中にシェルスクリプトをベタ書き
  • 11. 実行されるシェルスクリプト► 一度/tmpに置かれる► Jenkinsユーザが実行► set –x付き(簡易デバッグモードもどき)► set –e付き(何かのコマンドが非ゼロで終了した ら即中断)► ワークスペース(作業場所)が決められている
  • 12. set -x► xtrace 実行するコマンドや変数を展開して表示する set +xで無効にできる
  • 13. set -e► シェルスクリプト内で使用しているコマンドのステータスコードが 非ゼロ(異常終了)した場合に即座にスクリプトをexitするオプ ション(例外あり) ログに特定文字列がない場合が正常としたい →チェックのために「grep word …」すると… →1件もマッチしないとステータスコードが1 いつでもset +eで効果を打ち消すことができる► 例外の例 例外その1:「! コマンド」のようにステータスコードを反転させてる場合 例外その2:「コマンド1 | コマンド2 | コマンド3」のように連続したパイプ 処理の中の最後のコマンド以外 例外その3:ifやwhileなどの条件分岐で使われる式
  • 14. grepの替わりのawkとsed► awk/sedのパターンマッチで処理する► grepのような細かい指定(-wや-iなど)は出来ないが、 正規表現が使えるのでegrepと同じことが出来るgrep awk sedgrep word file awk ‘/word/’ file sed –n ‘/word/p’ filegrep –v word file awk ‘!/word/’ file ---grep –n word file awk ‘/word/{print sed –n ‘/word/=‘ file(行番号以外も出力される) NRF}’ file
  • 15. シェルスクリプトをより安全に使う► Jenkinsとは関係ない世界ですが…► デバッグはしっかりしましょう 特に異常系 ファイルを指定して何かする→そのファイルがな かったらどうなりますか? 変数に代入する値を何かから生成している→変数 が空欄になったら何が起こりますか? 前処理でエラーが発生してるのに後続の処理が実 行されたらどうなりますか?
  • 16. (寄り道)変数のパラメータ展開► ${変数名:-単語} 変数が未定義、もしくは空の場合は単語を使う 変数は未定義のまま► ${変数名:=単語} 変数が未定義、もしくは空の場合は単語を代入してから使う► ${変数名:?単語} 変数が未定義、もしくは空の場合は単語の内容が表示され エラーを返す 「${変数:?}」だけでもok set –uで変数(@と*以外)が未定義の場合は常にエラー
  • 17. (寄り道) declare/typeset► 変数に属性を付ける typeset –r hoge=‘fuga’オプション 効果 -i すべて数値として扱う 代入時に算術式評価が行われる 文字列はゼロ -l 小文字に変換してから代入 -u 大文字に変換してから代入 -r 読み取り専用にする これ以降の変数の代入はエラー(unsetもできな い)
  • 18. 次のステップ► プラグインの導入► ジョブの連携
  • 19. おすすめプラグイン(1)► Dependency Graph Viewer Plugin ジョブの繋がりをGraphvizで書いてくれる► Dis Usage Plugin ワークスペースの消費量をグラフ化► Timestamper ジョブの実行ログの各行に実行時間を追加して出 力
  • 20. おすすめプラグイン(2)► Build-timeout Plugin 指定時間内で終了しなかったジョブをエラーにする► Jenkins Workspace Cleanup Plugin ジョブの実行時/終了時にワークスペースを削除す る► BuildResultTriggerやjoinなど ジョブのエラー時に他のジョブを呼び出す 複数のジョブがすべて正常終了しないと次を実行し ないようにすることもできる
  • 21. ジョブの連携► エラーで処理が中断された場合、再処理を途中から行える(好きなところからやり直せる) 1. 各サーバからログを集める 2. ログを解凍する 3. 集計する など► 分割されてグラフ描写されるので改善に繋げやすい
  • 22. ビルドスクリプトの分割► スクリプトを書くテキストフォームはいくつでも追 加できる► ドラッグ&ドロップで並べ替えれる► ワークスペースは共有する
  • 23. どんな感じで使ってるの?
  • 24. 定例作業の省エネ化► ○時になったらサーバにログインしてコマンドを 叩く暫定運用► すでにサービスインしてるサーバなのでcronに 何か仕掛けるとかすると怒られる Jenkinsで定期的にsshを呼び出してコマンド実行 ログは残っているので後でじっくり見れる 過去に遡って見れる サボってもバレない
  • 25. ログにエラーが出てないかときどき見て► これまた暫定運用+サーバに何か仕掛けられない ビルド1:sshで接続してログcatで開いてローカル ファイルにリダイレクト ビルド2:過去のエラーなどフィルタする文字列をヒ アドキュメントで別ファイルに出力 ビルド3:grep –vf フィルタするファイル ログ | grep 検索文字列 後処理:出力があったらエラーにしてメールを飛ば す
  • 26. 定期的にファイルコピー► rsyncやってるだけ
  • 27. ログ集計► サーバからログファイルを集めて► ワークスペース内に全部置いて► アクセス解析
  • 28. などなど。► 定期的に「なんかやって」の暫定運用を助けて くれる相棒としてjenkinsおっさんが活躍中► 実際にはリポジトリのShpinxドキュメントを定期 的にビルドしたり、► リポジトリにコミットしたHPのコンテンツをWeb サーバにデプロイしたり、► もう少しちゃんと働いてくれてます
  • 29. 無理矢理まとめ► 自動運転するシェルスクリプトのエラーは安全 に停止するように作ろう► いつまでやるかわからない暫定運用を人手で やるのはしんどい► 見えるようにしておけば改善しやすい
  • 30. おしまい