Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

JenkinsとAnsibleを用いたサーバー運用効率化のススメ_"8a1"20141205発表資料

6.083 Aufrufe

Veröffentlicht am

2014年12月5日(金)に開催した「JenkinsとAnsibleを用いたサーバー運用効率化のススメ」の資料です。

<勉強会はこちら>
http://8a1-apc.connpass.com/event/10278/

Veröffentlicht in: Technologie
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

JenkinsとAnsibleを用いたサーバー運用効率化のススメ_"8a1"20141205発表資料

  1. 1. JenkinsとAnsibleを用いた サーバー運用効率化のススメ APC勉強会
  2. 2. アジェンダ ・Jenkins導入 ・コードの統一化 ・Jenkinsによるビルド・テスト ・Jenkinsによる分析 ・導入の実例
  3. 3. アジェンダ ・Jenkins導入 ・コードの統一化 ・Jenkinsによるビルド・テスト ・Jenkinsによる分析 ・導入の実例
  4. 4. Jenkins導入 Jenkinsおさらい(主な使用用途) ・コンパイルやテストを自動的に行なってく れる。 ・コンパイル、テスト失敗などを通知してく れる。 ・いろいろな分析結果を出してくれる
  5. 5. Jenkins導入 インストール 各OSでのインストール方法 公式サイト http://jenkins-ci.org/ 対応OSが多いので余ってるサーバや開発者PCにも入れられます。
  6. 6. Jenkins導入 インストール 例 wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add - deb http://pkg.jenkins-ci.org/debian binary/ sudo apt-get update sudo apt-get install jenkins sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key yum install jenkins Ubuntu/Debian Red Hat/Fedora/CentOS 公式サイトより
  7. 7. Jenkins導入 インストール 例 choco install jenkins brew install jenkins Windows (Chocolatey使用) OSX (Homebrew使用) 公式ではないが下記のパッケージ管理ソフトでも入れられる Jenkinsは週1くらいの頻度で最新版が出るので パッケージ管理の方が更新が楽
  8. 8. Jenkins導入 インストール 例 Webブラウザからでもインストールできます! https://wiki.jenkins-ci.org/display/JA/Meet+Jenkins#MeetJenkins- TestDrive
  9. 9. Jenkins導入 インストール 例 デフォルト設定では http://localhost:8080 後は設定でポートやパスを変えたり、 Webサーバからリバースプロキシさせたり
  10. 10. アジェンダ ・Jenkins導入 ・コードの統一化 ・Jenkinsによるビルド・テスト ・Jenkinsによる分析 ・導入の実例
  11. 11. コードの統一化 こんなことありませんか? ・コミットする度に 改行コードが変わってたり スペースがタブに、タブがスペースに (スペースも2だったり4だったり) 最後に改行が入ったり入らなかったり ・文字コードが統一されてなかったり ・{}や, && ||の位置が統一されていない。修正の度にフォーマットが変わる。 実際の修正と関係ないところが履歴として残って差分が見づらい。 何故か? ・開発者それぞれの好き嫌い ・使っているOSやエディタ、エディタ設定が違うから
  12. 12. コードの統一化 コーディング規約 どうすれば ・開発者それぞれの好き嫌い 開発前に話し合って統一しておこう。 コーディング規約は作るのが大変ならそれそれの言語標準・水晶のものや 公開されてるものをそのまま流用するなど。 簡単でもいいので何かしか決めておくと後でもめにくい 好き嫌いはあるけど仕事だから・・・ 簡単な構文チェックならツールを使おう
  13. 13. コードの統一化 コーディング規約 JavaならCheck Style Rubyならruby-lint PHPならphpling JavaScriptならjslint、jshint などなど Jenkinsで定期的に出力する。 既存プロダクトが大量の警告を出すようなら 一気に片を付けずに少しずつ減らすように &増やさないように注意して 無理なくコーディングしていく。 減らすのが難しい問題に関しては除外設定を 適宜行う
  14. 14. コードの統一化 テキストエディタやIDE設定 どうすれば ・使っているOSやエディタ、エディタ設定が違うから 開発者全員の開発環境をすべて統一しよう!それで全て解決! だけど・・・やっぱり使い慣れた環境で開発したい →ではどうするか
  15. 15. コードの統一化 テキストエディタやIDE設定 SCMの設定で解決できる問題もある Gitの場合 ・改行コード問題はgit configのcore.autocrlf、core.safecrlf SVNの場合 ・改行コード問題はsvn propsetのsvn:eol-style とりあえずの解決策 SCMに各エディタの設定ファイルも入れておく →みんなが同じエディタならそれで解決 →バラバラのエディタが使いたければ各エディタの設定を全部入れる? →設定を変えるとき全エディタ分変えないといけない →各エディタの設定が同じであるか管理するのが大変
  16. 16. コードの統一化 テキストエディタやIDE設定 EditorConfigを使おう http://editorconfig.org/ ・ルートディレクトリに.editorconfigというファイルを入れ、 それに設定を書いておけば良い。 ・Emacs,Vim,SublimeText,Atom,VisualStudio, IntelliJ等のJetBrains製IDEなどのエディタで対応。 (各エディタでEditorConfig対応Pluginを入れる必要があります。) ※Eclipse系はまだない? これで各々好きなエディタが使える! 一々プロダクトごとにスタイルを覚えなくても エディタが勝手にやってくれる! ※コード規約までは面倒を見てくれません。
  17. 17. アジェンダ ・Jenkins導入 ・コードの統一化 ・Jenkinsによるビルド・テスト ・Jenkinsによる分析 ・導入の実例
  18. 18. Jenkinsによるビルド・テスト Jenkinsビルドのながれ 1.ビルド対象の設定 ソース取得先のSCMまたはファイルの場所を指定 2.ビルドトリガー設定 ・一定の時間間隔でビルド(crontab的な設定が可能) ・SCMをポーリングし変更があればビルド ・WebUIから実行または、APIを叩いて実行 など 3.ビルド設定 ここがメイン!(後述) 4.ビルド後の設定 ・結果をメールする(失敗のときだけなど) ・結果を集計する ・成果物を保存する、どこかへアップロードする など
  19. 19. Jenkinsによるビルド・テスト JenkinsのビルドJenkinsは自動であれこれやってくれるが ビルドが出来る状態にするのは開発者の仕事 ソースがあるだけではビルドできない なにかしらビルドできる仕組みを入れる必要がある。 ビルドの際は対応するPluginがあると便利 PluginがなくてもシェルスクリプトやMS-DOSでもできる。 Maven → Maven Plugin Grunt、Gulp→NodeJS plugin Bundle → Ruby Plugin 必要なコンパイラやビルドツールのインストール、パスの設定も必要。 Jenkinsを動かしているユーザで実行できるようにする必要がある。 ※インストールやパス設定はある程度jenkins上でもできる。 なるべくそちらを使ったほうがパス関連の面倒が少ない。
  20. 20. Jenkinsによるビルド・テスト Jenkinsスレーブ チーム共有のJenkins上でうまくビルドできない・・・ 俺のローカルではビルドできるのに!!! →他の環境でもビルドできるように頑張る(でもおそらく大変) →自分のPCをスレーブ化してビルドしよう!
  21. 21. Jenkinsによるビルド・テスト Jenkinsスレーブ チーム共有の Jenkins 俺のPC上のJenkins スレーブ ビルドしなさい 結果でました
  22. 22. Jenkinsによるビルド・テスト Jenkinsスレーブ設定 設定はとっても簡単 Jenkinsマスターから Jenkinsの管理>ノードの管理>新規ノードの作成 スレーブ側はJreだけあればOK ・Jenkinsマスター(この場合はチーム共有Jenkins)からスレーブ側へssh 接続が可能な場合 sshの設定をノードに設定しておくだけ ・Jenkinsマスターから直接接続できないが、スレーブ側からhttp接続可 能な場合 表示されたことをするだけ
  23. 23. Jenkinsによるビルド・テスト Jenkinsスレーブ チーム共有のJenkins チームメンバーの開発PC (Windows) 検証用サーバ等(Linux) チームメンバーの開発PC (Mac) 検証用サーバ等(Windows Server) ジョブごとにビルドするスレーブを決めておけば Jenkinsマスターが勝手に選んでビルドさせる オフラインのスレーブ があっても他のスレー ブを選んでくれる
  24. 24. アジェンダ ・Jenkins導入 ・コードの統一化 ・Jenkinsによるビルド・テスト ・Jenkinsによる分析 ・導入の実例
  25. 25. Jenkinsによる分析 テスト結果 Jenkinsは標準でJUnit結果の集計Pluginがある。 AntやMavenでtest実行するとJUnit結果がXMLで吐かれるので それが集計される。 ※JenkinsはJavaで作られているのでJavaにやさしい Java以外の言語でもJUnit結果のXMLフォーマットのレポートを 出力できれば結果を取得できる。(そのようなライブラリがある) Pluginを入れれば他の形式も集計可能 ・NUnit Plugin ・TAP(Test Anything Protocol) Plugin など
  26. 26. Jenkinsによる分析 テスト以外の分析 ・コードカバレッジ ・未解決タスク(コード上のTODO、FIXMEなどの集計) ・
  27. 27. アジェンダ ・Jenkins導入 ・コードの統一化 ・Jenkinsによるビルド・テスト ・Jenkinsによる分析 ・導入の実例
  28. 28. 導入の実例1 Webアプリケーション Java、Maven使用 内容 ・コンパイル ・テスト ・CheckStyle ・FindBugs ・テストカバレッジ ・未解決(TODO)タスク集計 はじめはテストを書いていないプロダクトだったので コードカバレッジ計測を導入。 テストを書いていないクラスがどの 程度残っているかの指標にして共通関数系を中心に テストを増やしていくようにしている
  29. 29. 導入の実例2 Webアプリケーション(UIなし、XML-RPC) Java、Maven使用 内容 ・コンパイル ・テスト ・CheckStyle ・FindBugs ・テストカバレッジ ・未解決(TODO)タスク集計 このアプリケーション自体が多数の外部APIから情報を取得するので 外部APIはダミーを作成。 そのダミーが期待の値を返すかのテストもやってる。
  30. 30. 導入の実例3 Webアプリケーション Java、Maven使用 フロント側にはGrunt使用 内容 ・フロント側lessのコンパイル(Grunt) ・フロント側jsのテスト(Grunt) ・フロント側jsのcss,minify化(Grunt) ・Java側のwebappに配置(Grunt) ・Java側コンパイル、テスト(Maven) ・warファイル作成(Maven) ・検証用環境へデプロイ(ShellScript) 検証環境はCloudnのPaaSを使用(本番も同じ環境)。 PaaSにデプロイするツールもコードに含めShellScriptでデプロイ処理を 実行している。 gitへpushするだけで検証環境へ上がってくれるので一度構築すると非常 に楽
  31. 31. 導入の実例4 Webアプリケーション Node.js Grunt使用 内容 ・sassのコンパイル(Grunt) ・クライアント・サーバのjsテスト(Grunt) ・フロント側jsのcss,minify化(Grunt) ・tar.gzに固める(Grunt) ・デプロイスクリプトと一緒にscpで検証サーバへアップロード ・sshで検証サーバのデプロイスクリプトを叩く。 こちらもgitへpushで検証環境へデプロイされる
  32. 32. 導入の実例5 Webアプリケーション Node.js Grunt使用 本番サーバへデプロイ 内容 ・検証サーバにあるtar.gzとデプロイスクリプトを 本番サーバ達へコピー ・sshで本番サーバのデプロイスクリプトを叩く。(必要なサーバ分) 検証環境で確認がとれたtar.gzを本番に上げるだけ。 こちらは手動ビルド 手動ビルドと言ってもWebUI上の「ビルド実行」を押すだけの簡単なお 仕事
  33. 33. 導入の実例6 Webアプリケーション Node.js Grunt使用 vagrant ansible使用 内容 ・vagrant upを叩いてビルド・テスト用の仮想環境作成 ・vagrantのプロビジョニングでansible-playbookを実行させ、 必要な環境を構築する。 ・ビルドテスト実行 ・vagrant halt vagrantさえ動けばスレーブの環境に依存せずどこでも実行可能。 ここで使う仮想環境は開発にもそのまま使える。 初回vagrant up がものすごく時間がかかるという問題がある。
  34. 34. 導入の実例7 各サーバへ同じコマンドを打つだけ 内容 ・ansible-playbookを叩いて各サーバで同じことをさせる。 Heart bleedやShell shockなどで地道に各サーバで アップデートコマンドを打つ日々を改善すべく作成 必要なタスクを追加しSCMへコミット WebUI上の「ビルド実行」を押すだけの簡単なお仕事化に成功
  35. 35. 導入の実例 例外 別にjenkinsでなくてもいいけど こんな使い方もできるよというお話。 内容 ・SCM上にコミットされたらメールを送る。 とある理由で変更があったら通知が欲しいため設定。 内容 ・バッチを定期実行 crontab代わりに使用。
  36. 36. 今後やってみたいこと 今後やってみたいこと ・UIのテストをやらせたい。 Seleniumの勉強会が今度あるらしい。 ・vagrant、ansibleではなくdockerを使ってみるとどうか。 ・Herokuへのデプロイ

×