Upgrade to Pro — share decks privately, control downloads, hide ads and more …

近年の OSS 開発における CI 選択のベストプラクティス

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Pine Mizune Pine Mizune
December 10, 2016

近年の OSS 開発における CI 選択のベストプラクティス

YAPC::Hokkaido 2016 SAPPORO で発表した資料です。
http://yapcjapan.org/2016hokkaido/

Avatar for Pine Mizune

Pine Mizune

December 10, 2016
Tweet

More Decks by Pine Mizune

Other Decks in Programming

Transcript

  1. .Z1SPpMFશൠ q  )/1JOF.J[VOF ͽͶ  o  (JU)VC!QJOF o  5XJUUFS!QJOF q ॴଐ

    ג ϞόΠϧϑΝΫτϦʔ o  ৽ଔ೥໨ ֶ෦ଔ  o  ιʔγϟϧΞϓϦαʔόʔαΠυ 1FSM  .Z1SPpMF  
  2. q  OQNQJOF q  .BWFOQJOFN[ .Z1SPpMFr044׆ಈ q  $1"/1*/& o  %FWFM$PWFS3FQPSU$PEFDPW o 

    )BTI6UJM1JDL શϞδϡʔϧ શϞδϡʔϧ શύοέʔδ ࣳΛછΊΔͷ͕ੜ͖ߕ൹ͳλΠϓʜ .Z1SPpMF  
  3. .Z1SPpMFrίϛϡχςΟ׆ಈ .Z1SPpMF   ஍ҬܥษڧձͷӡӦ ౦ژ  o  (PUBOEBKTd o 

    (PUBOEBNPCJMF o  $SZTUBM+1d ֤छษڧձ΁ͷࢀՃɾൃද o  +BWB4DSJQU 1FSM FUD o  :"1$͸ॳొஃ ࢀՃ͸ճ໨ 
  4. ໨࣍ લ൒  近年の OSS 開発における CI について q $*ͱ͸Կ͔ q $*ͷ෼ྨ

    q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར఺ 5BCMFPG$POUFOUT  
  5. Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়

    q ෳ਺1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ໨࣍ ޙ൒  5BCMFPG$POUFOUT  
  6. ໨࣍ લ൒  近年の OSS 開発における CI について q $*ͱ͸Կ͔ q $*ͷ෼ྨ

    q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར఺
  7. ໨࣍ લ൒  近年の OSS 開発における CI について q $*ͱ͸Կ͔ q $*ͷ෼ྨ

    q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར఺
  8. ໨࣍ લ൒  近年の OSS 開発における CI について q $*ͱ͸Կ͔ q $*ͷ෼ྨ

    q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར఺
  9. ໨࣍ લ൒  近年の OSS 開発における CI について q $*ͱ͸Կ͔ q $*ͷ෼ྨ

    q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར఺
  10. $*πʔϧɾαʔϏεͷ۩ମྫ ࣗಈϏϧυɾςετ ෼ੳɾϨϏϡʔ Ϋ ϥ ΢ υ  ࣗ લ

    ϗ ε τ  取り上げるのはクラウド型の CI (小規模 OSS で自前でサーバー持つ必要ない…)
  11. ໨࣍ લ൒  近年の OSS 開発における CI について q $*ͱ͸Կ͔ q $*ͷ෼ྨ

    q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར఺
  12. Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়

    q ෳ਺1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ໨࣍ ޙ൒ 
  13. Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়

    q ෳ਺1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ໨࣍ ޙ൒ 
  14. 1FSMͷςετख๏ use strict; use warnings; use Test::More; subtest basic =>

    sub { ok 1; }; done_testing; UϑΝΠϧʹςετΛهड़ ςετΛ࣮ߦ $ prove -lv t/basic.t ͓޷ΈͷϥΠϒϥϦͰ
  15. Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়

    q ෳ਺1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ໨࣍ ޙ൒ 
  16. $1"/5FTUFST $1"/5FTUFSTͱ͸  q  ༗ࢤͷςελʔ͕$1"/ϞδϡʔϧΛςετ q  ෳ਺όʔδϣϯYෳ਺؀ڥͰͷςετ݁Ռ͕·ͱ·͍ͬͯΔ o  1FSMW o 

    1FSMW o  1FSMW o  1FSMW  o  -JOVY o  8JOEPXT o  NBD04 o  'SFF#4%  ૊Έ߹Θͤ
  17. Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়

    q ෳ਺1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ໨࣍ ޙ൒ 
  18. ࢀߟ$*ͷ1FSMαϙʔτͷݱঢ় 5SBWJT $* $JSDMF $* "QQ 7FZPS 8FSDLFS 4IJQ QBCMF

    $PEF TIJQ 4FNB QIPSF %SPOF .BHOVN $* 4OBQ$* 7FYPS 1FSM ˓ ˓ 3VCZ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 1ZUIPO ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 1)1 ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ /PEF ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ +BWB ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 4DBMB ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ (P ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˞αʔϏεͰެࣜʹαϙʔτ͍ͯ͠Δͱ໌ݴ͕͋ΔՕॴʹ˓Λهࡌ
  19. ࢀߟ$*ͷ1FSMαϙʔτͷݱঢ় 5SBWJT $* $JSDMF $* "QQ 7FZPS 8FSDLFS 4IJQ QBCMF

    $PEF TIJQ 4FNB QIPSF %SPOF .BHOVN $* 4OBQ$* 7FYPS 1FSM ˓ ˓ 3VCZ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 1ZUIPO ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 1)1 ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ /PEF ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ +BWB ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 4DBMB ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ (P ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˞αʔϏεͰެࣜʹαϙʔτ͍ͯ͠Δͱ໌ݴ͕͋ΔՕॴʹ˓Λهࡌ 世知辛い世の中ですね…
  20. ࢀߟ$*ͷ1FSMαϙʔτͷݱঢ় 5SBWJT $* $JSDMF $* "QQ 7FZPS 8FSDLFS 4IJQ QBCMF

    $PEF TIJQ 4FNB QIPSF %SPOF .BHOVN $* 4OBQ$* 7FYPS 1FSM ˓ ˓ 3VCZ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 1ZUIPO ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 1)1 ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ /PEF ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ +BWB ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 4DBMB ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ (P ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˞αʔϏεͰެࣜʹαϙʔτ͍ͯ͠Δͱ໌ݴ͕͋ΔՕॴʹ˓Λهࡌ 最もサポートされているのは Ruby でした
  21. Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়

    q ෳ਺1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ໨࣍ ޙ൒  5BCMFPG$POUFOUT  
  22. 5SBWJT$* q  044ͷςετͰΑ͘࢖ΘΕΔ࿝ฮ$* o  5SBWJT$*͕ແ͚Ε͹ɺࠓͷ8FC͸ແ͍Ϩϕϧ q  ୅දతͳϓϩδΣΫτ o  K2VFSZ 3VCZPO3BJMT

    "NPO FUD 5SBWJT$*ͱ͸  q  -JOVY.BD049྆ରԠ q  #VJME.BUSJY͕૊ΊΔ ͦͷଞͷಛ௃ ޙ΄Ͳղઆ
  23. 5SBWJT$*ͷ࢖͍ํ ઃఆϑΝΠϧ USBWJTZNM  language: perl sudo: false perl: -

    "5.12” - "5.16” - "5.20” - "5.24” notifications: slack: - secure: ”XXXX"
  24. 5SBWJT$*ͷ࢖͍ํ ઃఆϑΝΠϧ USBWJTZNM  language: perl sudo: false perl: -

    "5.12” - "5.16” - "5.20” - "5.24” notifications: slack: - secure: ”XXXX" 複数 Perl バージョンをまとめてテストできる
  25. 5SBWJT$*ͷ࢖͍ํ ઃఆϑΝΠϧ USBWJTZNM  language: perl sudo: false perl: -

    "5.12” - "5.16” - "5.20” - "5.24” notifications: slack: - secure: ”XXXX" ビルド結果を Slack に投稿するように連携できる
  26. Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়

    q ෳ਺1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ໨࣍ ޙ൒ 
  27. $PEFDPWͷ࢖͍ํ ΧόϨοδΛܭଌ͢Δ $ cpanm Devel::Cover $ perl Build.PL && ./Build

    build $ cover -test  q  %FWFM$PWFSϞδϡʔϧΛ࢖͏ q  ΧόϨοδΛଌఆ͢Δͱςετ͕஗͘ͳΔͷ͕೉఺ ଌఆ࣌ʹ࣮ߦ͢ΔίϚϯυ
  28. $PEFDPWͷ࢖͍ํ ΧόϨοδΛ$PEFDPW΁ૹ৴͢Δ $ cpanm Devel::Cover::Report::Codecov $ cover -report codecov q 

    Devel::Cover::Report::CodecovϞδϡʔϧΛ࢖͏ q  5SBWJT$*ͳͲͰΧόϨοδଌఆޙʹૹ৴͢Δ ૹ৴࣌ʹ࣮ߦ͢ΔίϚϯυ
  29. Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়

    q ෳ਺1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ໨࣍ ޙ൒ 
  30. 8JOEPXTNBD04Ͱͷ$* -JOVYҎ֎ͷ؀ڥͰͷςετ͸ඞཁ  q  ඇରԠ؀ڥͱͯ͠໌͍ࣔͯ͠ͳ͚Ε͹ɺςετ͢΂͖ o  ಈ͔ͳ͍ͷ͸؀ڥґଘͷίʔυ͕͋Δ͔Β o  'JMF4QFDͳͲɺґଘΛٵऩ͢ΔϥΠϒϥϦΛ࢖͓͏ 8JOEPXT͔Β࢖͏Ϣʔβʔ͸ډΔͷ͔

     ࢀߟIUUQTHJUIVCDPN[LBUUBMLTCMPCNBTUFSOPEFGFTUTMJEFTNECFUUFSXJOEPXTTVQQPSU q  OQNͷ৔߹ɺμ΢ϯϩʔυͷ͸8JOEPXT͔Β o  $1"/ͷ৔߹ɺײ֮஋ͱͯ͠͸΋ͬͱগͳ͍ͱࢥ͏͕
  31. "QQ7FZPSͷ࢖͍ํ install: - ps: Invoke-WebRequest -Uri http://strawberryperl.com/download/5.24.0.1/strawberry-perl-5.24.0.1-64bit .msi -OutFile strawberry-perl-5.24.0.1-64bit.msi

    - ps: Start-Process msiexec.exe -ArgumentList @("/package", "strawberry- perl-5.24.0.1-64bit.msi", "/qn", "INSTALLDIR=C:\strawberry") –Wait - SET PATH=C:¥strawberry¥c¥bin;C:¥strawberry¥perl¥site¥bin;C:¥strawberry ¥perl¥bin;%PATH% - cpanm --notest --quiet Carton - carton install --without develop test_script: - SET PATH=%CD%¥local¥bin;%PATH% - SET PERL5LIB=%CD%¥local¥lib¥perl5;%PERL5LIB% - perl Build.PL - Build - Build test ઃఆϑΝΠϧ BQQWFZPSZNM 
  32. "QQ7FZPSͷ࢖͍ํ install: - ps: Invoke-WebRequest -Uri http://strawberryperl.com/download/5.24.0.1/strawberry-perl-5.24.0.1-64bit .msi -OutFile strawberry-perl-5.24.0.1-64bit.msi

    - ps: Start-Process msiexec.exe -ArgumentList @("/package", "strawberry- perl-5.24.0.1-64bit.msi", "/qn", "INSTALLDIR=C:\strawberry") –Wait - SET PATH=C:¥strawberry¥c¥bin;C:¥strawberry¥perl¥site¥bin;C:¥strawberry ¥perl¥bin;%PATH% - cpanm --notest --quiet Carton - carton install --without develop test_script: - SET PATH=%CD%¥local¥bin;%PATH% - SET PERL5LIB=%CD%¥local¥lib¥perl5;%PERL5LIB% - perl Build.PL - Build - Build test ઃఆϑΝΠϧ BQQWFZPSZNM  PowerShell のコマンドで StrawberryPerl をダウンロード
  33. "QQ7FZPSͷ࢖͍ํ install: - ps: Invoke-WebRequest -Uri http://strawberryperl.com/download/5.24.0.1/strawberry-perl-5.24.0.1-64bit .msi -OutFile strawberry-perl-5.24.0.1-64bit.msi

    - ps: Start-Process msiexec.exe -ArgumentList @("/package", "strawberry- perl-5.24.0.1-64bit.msi", "/qn", "INSTALLDIR=C:\strawberry") –Wait - SET PATH=C:¥strawberry¥c¥bin;C:¥strawberry¥perl¥site¥bin;C:¥strawberry ¥perl¥bin;%PATH% - cpanm --notest --quiet Carton - carton install --without develop test_script: - SET PATH=%CD%¥local¥bin;%PATH% - SET PERL5LIB=%CD%¥local¥lib¥perl5;%PERL5LIB% - perl Build.PL - Build - Build test ઃఆϑΝΠϧ BQQWFZPSZNM  インストーラー (.msi) を無人インストール
  34. "QQ7FZPSͷ࢖͍ํ install: - ps: Invoke-WebRequest -Uri http://strawberryperl.com/download/5.24.0.1/strawberry-perl-5.24.0.1-64bit .msi -OutFile strawberry-perl-5.24.0.1-64bit.msi

    - ps: Start-Process msiexec.exe -ArgumentList @("/package", "strawberry- perl-5.24.0.1-64bit.msi", "/qn", "INSTALLDIR=C:\strawberry") –Wait - SET PATH=C:¥strawberry¥c¥bin;C:¥strawberry¥perl¥site¥bin;C:¥strawberry ¥perl¥bin;%PATH% - cpanm --notest --quiet Carton - carton install --without develop test_script: - SET PATH=%CD%¥local¥bin;%PATH% - SET PERL5LIB=%CD%¥local¥lib¥perl5;%PERL5LIB% - perl Build.PL - Build - Build test ઃఆϑΝΠϧ BQQWFZPSZNM  依存モジュールをインストール
  35. "QQ7FZPSͷ࢖͍ํ install: - ps: Invoke-WebRequest -Uri http://strawberryperl.com/download/5.24.0.1/strawberry-perl-5.24.0.1-64bit .msi -OutFile strawberry-perl-5.24.0.1-64bit.msi

    - ps: Start-Process msiexec.exe -ArgumentList @("/package", "strawberry- perl-5.24.0.1-64bit.msi", "/qn", "INSTALLDIR=C:\strawberry") –Wait - SET PATH=C:¥strawberry¥c¥bin;C:¥strawberry¥perl¥site¥bin;C:¥strawberry ¥perl¥bin;%PATH% - cpanm --notest --quiet Carton - carton install --without develop test_script: - SET PATH=%CD%¥local¥bin;%PATH% - SET PERL5LIB=%CD%¥local¥lib¥perl5;%PERL5LIB% - perl Build.PL - Build - Build test ઃఆϑΝΠϧ BQQWFZPSZNM  インストールした Perl でテストを実行
  36. NBD04Ͱͷ$* NBD04Ͱ$*Λఏڙ͢Δʹ͸น͕͋Δ q  ϥΠηϯε্ɺ.BDͷϚγϯ্Ͱ͔͠ಈ͔ͤͳ͍ o  -JOVY্ͷ7.Ͱಈ࡞ͤ͞Δ͜ͱ͸Ͱ͖ͳ͍ NBD04ʹରԠͨ͠$*͸গͳ͍͕ଘࡏ͢Δ q  5SBWJT$* o 

    -JOVYϏϧυͱͷಉ࣌ར༻͸ɺجຊతʹ͸Ͱ͖ͳ͍ ڐՄ੍  q  #JUSJTF o  J04"OESPJEΞϓϦͷϏϧυΛ໨తͱͨ͠αʔϏε 併用ができるこちらをオススメ
  37. NBD04Ͱͷ$* NBD04Ͱ$*Λఏڙ͢Δʹ͸น͕͋Δ q  ϥΠηϯε্ɺ.BDͷϚγϯ্Ͱ͔͠ಈ͔ͤͳ͍ o  -JOVY্ͷ7.Ͱಈ࡞ͤ͞Δ͜ͱ͸Ͱ͖ͳ͍ NBD04ʹରԠͨ͠$*͸গͳ͍͕ଘࡏ͢Δ q  5SBWJT$* o 

    -JOVYϏϧυͱͷಉ࣌ར༻͸ɺجຊతʹ͸Ͱ͖ͳ͍ ڐՄ੍  q  #JUSJTF o  J04"OESPJEΞϓϦͷϏϧυΛ໨తͱͨ͠αʔϏε 詳しい使い方は割愛