Slide 1

Slide 1 text

ChatOpsͰ շదϦϦʔεੜ׆ #symfony_meetup 2015.09.06 @qckanemoto

Slide 2

Slide 2 text

• ໊ݹ԰͔Βདྷ·ͨ͠ • (ג)ΧϧςοτίϛϡχέʔγϣϯζCTO • PHPྺ3.5೥, Symfonyྺ1೥ʢROMઐʣ • #nagoyaphp, #symfony-meetup @qckanemoto

Slide 3

Slide 3 text

Χϧςοτίϛϡχέʔγϣϯζ • PHPerืूதʂ • ໊ݹ԰ʢϦϞʔτՄʣ • PHPϝϯλʔζ@hidenorigoto͞ΜJoined • ϦεςΟϯά޿ࠂӡ༻πʔϧʮLisketʯ

Slide 4

Slide 4 text

ΤϯδχΞͷಇ͖΍͢͞௒େࣄʹͯ͠·͢ Χϧςοτίϛϡχέʔγϣϯζ

Slide 5

Slide 5 text

SNS͔ϝʔϧͰ͓ؾܰʹ͝࿈བྷ͍ͩ͘͞✨ Χϧςοτίϛϡχέʔγϣϯζ

Slide 6

Slide 6 text

ຊ୊

Slide 7

Slide 7 text

ฐࣾͷϦϦʔεϓϩηεͷมભ 1 FTP ࣄނଟൃ / ڪා 2 git pull ໘౗ / ෆ҆ 3 cap deploy ϩά࢒Βͣ / QAඍົ 4 ŴƅŧŖ ϩά࢒Δ / QA҆৺

Slide 8

Slide 8 text

ŴƅŧŖ ͷ΍Γํʹ͍ͭͯ࿩͠·͢

Slide 9

Slide 9 text

ߏ੒ PR࡞੒ ௨஌ σϓϩΠ • GitHub • CircleCI • Capistrano • Hubot • Slack

Slide 10

Slide 10 text

Step1. CIಋೖ

Slide 11

Slide 11 text

CI as a Service • ฐࣾͰ͸CircleCIΛ࢖ͬͯ·͢ • Travis CIͰ΋JenkinsͰ΋ԿͰ΋͍͍Ͱ͢ • ઃఆํ๏ͳͲ͸ࠓճ͸ׂѪ͠·͢

Slide 12

Slide 12 text

Step2. Capistranoಋೖ

Slide 13

Slide 13 text

Capistrano • ʮΧϐετϥʔϊʯ • σϓϩΠπʔϧ • ίϚϯυҰൃͰαʔό΁σϓϩΠՄೳ

Slide 14

Slide 14 text

Πϯετʔϧ $ gem install capistrano $ cd /path/to/project $ cap install # 設定ファイルのひな形を作成

Slide 15

Slide 15 text

ΠϯετʔϧʢSymfonyͷ৔߹ʣ $ cd /path/to/project $ cap install # 設定ファイルのひな形を作成 $ gem install capistrano $ gem install capistrano-symfony # 設定ファイルの場所を変更 $ mv config/* app/config/ $ rm -rf config

Slide 16

Slide 16 text

ઃఆϑΝΠϧ $ tree . ├── Capfile ├── app │ └── config │ ├── deploy │ │ ├── production.rb │ │ └── staging.rb │ ├── deploy.rb │ : :

Slide 17

Slide 17 text

• ҎԼͷ3ߦΛ௥ه • ઃఆϑΝΠϧͷ৔ॴͷมߋΛ༗ޮԽ • capistrano/symfonyΛϩʔυ set :deploy_config_path, 'app/config/deploy.rb' set :stage_config_path, 'app/config/deploy' require 'capistrano/symfony' ઃఆྫʢCapfileʣ

Slide 18

Slide 18 text

lock '3.4.0' set :repo_url, '[email protected]:your/project.git' set :keep_releases, 3 set :linked_files, fetch(:linked_files, []).push('app/config/parameters.yml') set :ssh_options, { # 環境変数CAP_PRIVATE_KEYでssh鍵のパスを受け取る keys: [ENV['CAP_PRIVATE_KEY']], forward_agent: true } # マイグレーションタスクを定義 namespace :deploy do task :migrate do invoke 'symfony:console', 'doctrine:migrations:migrate', '--no-interaction' end end after 'deploy:updated', 'composer:install' after 'composer:install', 'symfony:assetic:dump' after 'composer:install', 'deploy:migrate' after 'deploy:finishing', 'deploy:cleanup' ઃఆྫʢdeploy.rbʣ

Slide 19

Slide 19 text

• ର৅αʔόͱsshϢʔβ • ର৅ϒϥϯνʢmasterʣ • σϓϩΠઌσΟϨΫτϦύε ઃఆྫʢstaging.rbʣ server 'stage.sample.com', user: 'ssh-user' set :branch, 'master' set :deploy_to, '/var/www/html/sample'

Slide 20

Slide 20 text

• ର৅αʔόͱsshϢʔβ • ର৅ϒϥϯνʢreleaseʣ • σϓϩΠઌσΟϨΫτϦύε ઃఆྫʢproduction.rbʣ server 'sample.com', user: 'ssh-user' set :branch, 'release' set :deploy_to, '/var/www/html/sample'

Slide 21

Slide 21 text

࣮ߦ $ export CAP_PRIVATE_KEY=~/.ssh/id_rsa $ cap staging deploy $ cap production deploy

Slide 22

Slide 22 text

࣮ߦ ίϚϯυҰൃͰσϓϩΠ׬ྃ $ export CAP_PRIVATE_KEY=~/.ssh/id_rsa $ cap staging deploy $ cap production deploy

Slide 23

Slide 23 text

Step3. σϓϩΠࣗಈԽ

Slide 24

Slide 24 text

CircleCIʹσϓϩΠͤ͞Δ • cap deployίϚϯυͷ࣮ߦΛCircleCIʹ೚ͤΔ • PRΛϚʔδ͢Δ͚ͩͰࣗಈͰσϓϩΠ • masterͷϏϧυޙʹcap staging deploy • releaseͷϏϧυޙʹcap production deploy

Slide 25

Slide 25 text

circle.yml deployment: production: branch: release commands: - bundle install - bundle exec cap production deploy staging: branch: master commands: - bundle install - bundle exec cap staging deploy

Slide 26

Slide 26 text

Gemfile source "https://rubygems.org" gem "capistrano" gem "capistrano-symfony"

Slide 27

Slide 27 text

Step4. ϦϦʔεChatOpsԽ

Slide 28

Slide 28 text

ϦϦʔεPR͕QAͮ͠Β͍໰୊ • ʮϦϦʔεPRʯʹ master -> releaseͷPR • લճϦϦʔεͱͷࠩ෼͕શ෦ೖΔͷͰPRͱ͠ ͯ͸݁ߏڊେ • ಺༰ͷ֬ೝɺQAνΣοΫ͕೉͍͠

Slide 29

Slide 29 text

πʔϧͰղܾ • git-pr-releaseίϚϯυ
 https://github.com/motemen/git-pr-release $ cd /path/to/project $ git-pr-release

Slide 30

Slide 30 text

πʔϧͰղܾ

Slide 31

Slide 31 text

Ͳ͏ͤͳΒSlack͔Β࣮ߦ͍ͨ͠ • Hubotʹ࣮ߦͤ͞Α͏ • git-pr-release inspiredͳgithub-pr-releaseͱ ͍͏NodeϞδϡʔϧ͕͋ͬͨ
 https://github.com/uiureo/github-pr-release • HubotεΫϦϓτʹͨ͠
 https://github.com/qckanemoto/hubot-github-pr-release

Slide 32

Slide 32 text

࣮ߦ

Slide 33

Slide 33 text

ϦϦʔε

Slide 34

Slide 34 text

·ͱΊ

Slide 35

Slide 35 text

ࡶײ • ϦϦʔεϓϩηεΛ࠷దԽ͢Δͱɺ • ࣄނ͕ݮΔ • ։ൃʹूதͰ͖Δ • ୯७ʹؾ͍͍࣋ͪ

Slide 36

Slide 36 text

՝୊ • masterʹϚʔδ͞Ε͍ͯΔPRͷ͏ͪҰ෦͚ͩ ΛϦϦʔε͔ͨͬͨ͠Γ͢Δ໰୊ • Capistrano͸σϓϩΠઌαʔόͰgit clone→ Ϗϧυʢgulp/gruntʣ͢ΔͷͰαʔόͷෛՙ ͕ߴ͘ͳΔ໰୊ • ·ͩ·ͩվળͷ༨஍͸͋Γ·͢

Slide 37

Slide 37 text

ϒϩάʹ·ͱΊ·ͨ͠ • ৄࡉΛϒϩάʹ·ͱΊͨͷͰɺΑΖ͚͠Ε͹ ͝ࢀর͍ͩ͘͞
 http://tech.quartetcom.co.jp/2015/09/07/chatops-release/

Slide 38

Slide 38 text

Thanks ;)