Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
デプロイツール FabricFabric便利だよっていう話。
例えばアプリをデプロイするとして
1. 対象ホストその1にログインして
1. 対象ホストその1にログインして2. 今動いてるアプリをバックアップして
1. 対象ホストその1にログインして2. 今動いてるアプリをバックアップして3. リソースをアップロードして (あるいはgit pull)
1. 対象ホストその1にログインして2. 今動いてるアプリをバックアップして3. リソースをアップロードして (あるいはgit pull)4. アプリを再起動して (あるいはシンボリックリンク切り替えて)
1. 対象ホストその1にログインして2. 今動いてるアプリをバックアップして3. リソースをアップロードして (あるいはgit pull)4. アプリを再起動して (あるいはシンボリックリンク切り替えて)5. アプリが正常に立ち上がったことを確...
1. 対象ホストその1にログインして2. 今動いてるアプリをバックアップして3. リソースをアップロードして (あるいはgit pull)4. アプリを再起動して (あるいはシンボリックリンク切り替えて)5. アプリが正常に立ち上がったことを確...
例えばアプリを起動するとして
$ java
$ java ¥–Xms512M
$ java ¥–Xms512M –Xmx1024M
$ java ¥–Xms512M –Xmx1024M ¥–cp /path/to/classpath/*
$ java ¥–Xms512M –Xmx1024M ¥–cp /path/to/classpath/* ¥com.example.project.Application
$ java ¥–Xms512M –Xmx1024M ¥–cp /path/to/classpath/* ¥com.example.project.Application ¥arg_of_app1
$ java ¥–Xms512M –Xmx1024M ¥–cp /path/to/classpath/* ¥com.example.project.Application ¥arg_of_app1 ¥arg_of_app2
$ java ¥–Xms512M –Xmx1024M ¥–cp /path/to/classpath/* ¥com.example.project.Application ¥arg_of_app1 ¥arg_of_app2 ¥arg_of_ap...
Fabric使いましょう
What is the “Fabric”Fabric 何
Fabric 何 デプロイツール? 要は”すごいシェルスクリプト” シェルスクリプトを独自言語パイソンでラップしたようなもの シェルスクリプトでできる事は何でもできる いろいろ便利なAPI
Fabric 何 独自DSL? いいえ、ただのPythonです Pythonの強力な機能が使える 変数、リスト、辞書、関数、for文、if文、例外and more…
How to start to using導入
$ pip install fabric
完
完(使いたいモジュールがある場合は別途pipなりでインストールしましょう)
How to use使いかた
使いかた 適当なディレクトリ(プロジェクトのルートとか)にfabfile.pyを作成 名前はなんでもいいです が、名前変えた場合はfabコマンドの引数で明示的にスクリプトファイル名を指定しないといけないです。
使いかた こんな感じ
使いかた こんな感じリモートで指定したコマンドを実行する関数
使いかた 実行するにはfabコマンドを使います fabfileの関数名がそのままタスク名になるます $ fab –H hoge01.host show_host -Hオプションで実行するホスト名を指定 --hostsオプションなら複数...
使いかた ホスト指定するのだるい人は
使いかた ホスト指定するのだるい人は指定したホストそれぞれでコマンドを実行するようになる
使いかた ホスト指定するのだるい人は指定したホストそれぞれでコマンドを実行するようになる$ fab show_hostで実行できるようになる
使いかた 基本的な使いかたはこれくらい シェルスクリプト(コマンド)をrun関数に置き換えるだけなので楽(sudoの場合はsudo()関数) 概念がすごくシンプルなので理解するのが容易 便利なAPIがたくさんあります(詳しくはdocum...
Application半歩すすんでみる
半歩すすんでみる タスクは一度に複数指定できる $ fab task1 task2 task3 task1 task2 task3の順番に実行 コマンド実行先ホストを定義するタスクを作っておくと捗る
半歩すすんでみる こんな感じにして
半歩すすんでみる $ fab dev show_host
半歩すすんでみる $ fab dev show_hostこれが実行(envを設定)されて
半歩すすんでみる $ fab dev show_hostこれが実行される(envのhosts先でrun)
半歩すすんでみる $ fab prod show_hostこれが実kk(ry
Application furtherもうちょっとすすんでみる
タスクが増えてfabfileが肥大してきたよ
分割しましょう
もうちょっとすすんでみる 複数のファイルにタスクを分割できる fabfileディレクトリを作る fabfileディレクトリに__init__.pyを置く __init__.pyで分割先のファイルをimportする __init__.p...
もうちょっとすすんでみる こんな感じ
もうちょっとすすんでみる 複数のファイルにタスクを分割すると 見通しが良くなってメンテしやすく 関数のスコープが分かれるので名前被り気にして冗長な名前を付けなくても良くなる ファイルを分割した場合は@taskデコレータ付けないとタスクと...
Conclusionまとめ
まとめ 定形作業を省力化、自動化したいけど
まとめ 定形作業を省力化、自動化したいけど シェルスクリプトぢからが足りないので
まとめ 定形作業を省力化、自動化したいけど シェルスクリプトぢからが足りないので Fabricを使っている
まとめ 定形作業を省力化、自動化したいけど シェルスクリプトぢからが足りないので Fabricを使っている ゆとりが
まとめ 定形作業を省力化、自動化したいけど シェルスクリプトぢからが足りないので Fabricを使っている ゆとりが ぼくです
まとめ あと、タスクの並列実行までいく余力がなかった
おわり
Upcoming SlideShare
Loading in …5
×

デプロイツールFabric

社内LT資料

デプロイツールFabric

  1. 1. デプロイツール FabricFabric便利だよっていう話。
  2. 2. 例えばアプリをデプロイするとして
  3. 3. 1. 対象ホストその1にログインして
  4. 4. 1. 対象ホストその1にログインして2. 今動いてるアプリをバックアップして
  5. 5. 1. 対象ホストその1にログインして2. 今動いてるアプリをバックアップして3. リソースをアップロードして (あるいはgit pull)
  6. 6. 1. 対象ホストその1にログインして2. 今動いてるアプリをバックアップして3. リソースをアップロードして (あるいはgit pull)4. アプリを再起動して (あるいはシンボリックリンク切り替えて)
  7. 7. 1. 対象ホストその1にログインして2. 今動いてるアプリをバックアップして3. リソースをアップロードして (あるいはgit pull)4. アプリを再起動して (あるいはシンボリックリンク切り替えて)5. アプリが正常に立ち上がったことを確認して
  8. 8. 1. 対象ホストその1にログインして2. 今動いてるアプリをバックアップして3. リソースをアップロードして (あるいはgit pull)4. アプリを再起動して (あるいはシンボリックリンク切り替えて)5. アプリが正常に立ち上がったことを確認して6. (以下サーバn台に繰り返し)
  9. 9. 例えばアプリを起動するとして
  10. 10. $ java
  11. 11. $ java ¥–Xms512M
  12. 12. $ java ¥–Xms512M –Xmx1024M
  13. 13. $ java ¥–Xms512M –Xmx1024M ¥–cp /path/to/classpath/*
  14. 14. $ java ¥–Xms512M –Xmx1024M ¥–cp /path/to/classpath/* ¥com.example.project.Application
  15. 15. $ java ¥–Xms512M –Xmx1024M ¥–cp /path/to/classpath/* ¥com.example.project.Application ¥arg_of_app1
  16. 16. $ java ¥–Xms512M –Xmx1024M ¥–cp /path/to/classpath/* ¥com.example.project.Application ¥arg_of_app1 ¥arg_of_app2
  17. 17. $ java ¥–Xms512M –Xmx1024M ¥–cp /path/to/classpath/* ¥com.example.project.Application ¥arg_of_app1 ¥arg_of_app2 ¥arg_of_app3 …
  18. 18. Fabric使いましょう
  19. 19. What is the “Fabric”Fabric 何
  20. 20. Fabric 何 デプロイツール? 要は”すごいシェルスクリプト” シェルスクリプトを独自言語パイソンでラップしたようなもの シェルスクリプトでできる事は何でもできる いろいろ便利なAPI
  21. 21. Fabric 何 独自DSL? いいえ、ただのPythonです Pythonの強力な機能が使える 変数、リスト、辞書、関数、for文、if文、例外and more…
  22. 22. How to start to using導入
  23. 23. $ pip install fabric
  24. 24.
  25. 25. 完(使いたいモジュールがある場合は別途pipなりでインストールしましょう)
  26. 26. How to use使いかた
  27. 27. 使いかた 適当なディレクトリ(プロジェクトのルートとか)にfabfile.pyを作成 名前はなんでもいいです が、名前変えた場合はfabコマンドの引数で明示的にスクリプトファイル名を指定しないといけないです。
  28. 28. 使いかた こんな感じ
  29. 29. 使いかた こんな感じリモートで指定したコマンドを実行する関数
  30. 30. 使いかた 実行するにはfabコマンドを使います fabfileの関数名がそのままタスク名になるます $ fab –H hoge01.host show_host -Hオプションで実行するホスト名を指定 --hostsオプションなら複数ホストを一括指定(カンマ区切り)
  31. 31. 使いかた ホスト指定するのだるい人は
  32. 32. 使いかた ホスト指定するのだるい人は指定したホストそれぞれでコマンドを実行するようになる
  33. 33. 使いかた ホスト指定するのだるい人は指定したホストそれぞれでコマンドを実行するようになる$ fab show_hostで実行できるようになる
  34. 34. 使いかた 基本的な使いかたはこれくらい シェルスクリプト(コマンド)をrun関数に置き換えるだけなので楽(sudoの場合はsudo()関数) 概念がすごくシンプルなので理解するのが容易 便利なAPIがたくさんあります(詳しくはdocument見てください)
  35. 35. Application半歩すすんでみる
  36. 36. 半歩すすんでみる タスクは一度に複数指定できる $ fab task1 task2 task3 task1 task2 task3の順番に実行 コマンド実行先ホストを定義するタスクを作っておくと捗る
  37. 37. 半歩すすんでみる こんな感じにして
  38. 38. 半歩すすんでみる $ fab dev show_host
  39. 39. 半歩すすんでみる $ fab dev show_hostこれが実行(envを設定)されて
  40. 40. 半歩すすんでみる $ fab dev show_hostこれが実行される(envのhosts先でrun)
  41. 41. 半歩すすんでみる $ fab prod show_hostこれが実kk(ry
  42. 42. Application furtherもうちょっとすすんでみる
  43. 43. タスクが増えてfabfileが肥大してきたよ
  44. 44. 分割しましょう
  45. 45. もうちょっとすすんでみる 複数のファイルにタスクを分割できる fabfileディレクトリを作る fabfileディレクトリに__init__.pyを置く __init__.pyで分割先のファイルをimportする __init__.pyにfabfile.pyの内容をまるっとコピーするだけでもとりあえずは動く
  46. 46. もうちょっとすすんでみる こんな感じ
  47. 47. もうちょっとすすんでみる 複数のファイルにタスクを分割すると 見通しが良くなってメンテしやすく 関数のスコープが分かれるので名前被り気にして冗長な名前を付けなくても良くなる ファイルを分割した場合は@taskデコレータ付けないとタスクとして認識されないよ
  48. 48. Conclusionまとめ
  49. 49. まとめ 定形作業を省力化、自動化したいけど
  50. 50. まとめ 定形作業を省力化、自動化したいけど シェルスクリプトぢからが足りないので
  51. 51. まとめ 定形作業を省力化、自動化したいけど シェルスクリプトぢからが足りないので Fabricを使っている
  52. 52. まとめ 定形作業を省力化、自動化したいけど シェルスクリプトぢからが足りないので Fabricを使っている ゆとりが
  53. 53. まとめ 定形作業を省力化、自動化したいけど シェルスクリプトぢからが足りないので Fabricを使っている ゆとりが ぼくです
  54. 54. まとめ あと、タスクの並列実行までいく余力がなかった
  55. 55. おわり

×