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

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

Pine Mizune
December 10, 2016

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

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

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ΞϓϦͷϏϧυΛ໨తͱͨ͠αʔϏε 詳しい使い方は割愛