Your SlideShare is downloading. ×
0
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
jenkinsで遊ぶ
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

jenkinsで遊ぶ

14,536

Published on

Published in: Technology
0 Comments
42 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
14,536
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
47
Comments
0
Likes
42
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. おしまい

×