ä»æ¥ã¯ã Octopus Deployå±éã·ã¹ãã ã«ã€ããŠã話ããŸãã çŸæç¹ã§ã¯ãHabréã®ãã®ãããã¯ã«é¢ãã玹ä»èšäºã¯1ã€ãããããŸããããããã£ãŠãç§ã®è³æã§ã¯ãã·ã¹ãã ã®èª¬æãæ¡åŒµãããã©ã€ããµã€ã¯ã«ããããã£ãã«ããªã©ã®éèŠãªæŠå¿µã«ã€ããŠè©³ãã説æããŸãã Octopusãã©ã®ããã«å®è£ ããŠäœ¿çšãããã
ç§ãã¡ã¯èª°ã§ãã
ç§ãã¡ã¯ç¬èªã®éçºéšéTinkoff.ruã§ãã ç§ãåãçµãã§ããããŒã ã¯ãWebOfficeã¯ã©ãŠãä»®æ³ãã¹ã¯ããããã©ãããã©ãŒã ãéçºããŠããŸãã çŸæç¹ã§ã¯ãAsp.Net MVCã¢ããªã±ãŒã·ã§ã³ãšãããã¯ãšã³ãã®ServiceStackããŒã¹ã®REST APIãããã³ããã³ãã®Angularã®SPAããããŸãã ããã«å ããŠãä»ã®éè¡ã·ã¹ãã ãšã®çµ±åã®ããã®SOAPãµãŒãã¹ãå®æçãªã¿ã¹ã¯ã®ããã®ãžã§ãã»ãã¥ãªãã£ãããã³.Net Core 2.0äžã®å€æ°ã®ãã€ã¯ããµãŒãã¹ããããŸãã
å€ãå±éããã»ã¹ã®åé¡
Tinkoffã«æ¥ããšããTeamCityïŒMSDeployã䜿çšããŠã·ã¹ãã ã®å±éãå®è¡ãããããŸããŸãªè€éãã®nçªç®ã®PowerShellã¹ã¯ãªããã䜿çšãããŸããã ãããžã§ã¯ãã®æ§ç¯ãšå±éãæ åœããæ§æãã«ãã¯ããã®æç¹ã§å©çšå¯èœãªèŒªéïŒQAãšProdïŒã«åŸã£ãŠã°ã«ãŒãåãããŸããã
ååè·¯ã®å€ãã¢ã»ã³ããªãšå±éããã»ã¹ã¯ã次ã®ããã«æ¡ä»¶ä»ãã§è¡šãããšãã§ããŸãïŒç¹å®ã®ç°å¢ã®ãããžã§ã¯ããåéããŸãïŒxmlæ§æã®é©åãªå€æãé©çšããŸãïŒâåä¿¡ããã¢ãŒãã£ãã¡ã¯ããããã€ãã®zipãã¡ã€ã«ã«åéããŸãïŒåå¥ã«å±éãããã¢ããªã±ãŒã·ã§ã³+ããŒã¿ããŒã¹ç§»è¡ã¹ã¯ãªãã+å±éã¹ã¯ãªããããšã«1ã€ïŒ ïŒâæå®ããããµãŒããŒç°å¢ã«æå®ãããå Žæã«ãããã€ããŸãã
äœæ¥ã§ã¯ãã©ãŒã«ããã¬ã©ã³ã¹ãšè² è·åæ£ã«è€æ°ã®ãµãŒããŒã䜿çšããŠãããããã¢ããªã±ãŒã·ã§ã³ãšãµãŒããŒãé çªã«åŠçãããããå±éããã»ã¹ã«ããªãã®æéãããããŸããïŒPowerShell䞊åéåæã¿ã¹ã¯ã®äœæã¯ããªãèŠçã§ãïŒã è¿œå ã®QA2ã«ãŒããšPreprodã«ãŒãã®è¿œå ã«ããããã«ãæ§æã®æ°ãå¢å ããç°ãªããã©ã¡ãŒã¿ãŒã«ããå±éèšå®ã®ç®¡çãããè€éã«ãªããŸããã
ç®ç
å±éããã»ã¹ãããŸããŸãªåè·¯ã«çµ±åããå¯èœãªå Žåã¯é«éåããããŒãžã§ã³ç®¡çã·ã¹ãã ã®ã¿ã€ãã«å¿ããŠãªãªãŒã¹é ä¿¡ããã»ã¹ãæšæºåããŸãããã¡ãžã£ãŒãªãªãŒã¹ã¯QAâPreâProdãããã€ããŒãªãªãŒã¹ã¯QA2âPreâProdãå®è¡ããå¿ èŠããããŸããããããã£ãã¯ã¹-PreâProdã
ããããã¹ãŠã®ãŠã£ãã·ã¥ãªã¹ãã§ãOctopus Deployã圹ã«ç«ã¡ãŸããã ãªãªãŒã¹é ä¿¡ããã»ã¹ã«å®è£ ããããšã§åŸãããäž»ãªå©ç¹ã¯æ¬¡ã®ãšããã§ãã
- ãã¹ãŠã®åè·¯ã®ã¢ããªã±ãŒã·ã§ã³å šäœã«å¯Ÿããåäžã®å±éããã»ã¹ã
- ã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ãã©ã¹ãã©ã¯ãã£èšå®ã®å€æ°ãä¿åããåäžã®å Žæã
- è€æ°ã®ãµãŒããŒãžã®äžŠåå±éã
- TeamCityã®ããŸããŸãªãã«ãæ§æã1ã€ã«æžãããŸãã
- éåžžã®ïŒæ£ããïŒãã«ãã©ã€ããµã€ã¯ã«ïŒåããã€ããªãæåã«QAã«å±éããã次ã«Preprodã«å±éããã次ã«Prodã«å±éãããå ŽåãTeamCityããŒãžã§ã³ã§ã¯ãç°å¢ããšã«åå¥ã®ãã«ãæ§æãæ§æãããŸããïŒã
- ãªã¢ãŒãã£ã³ã°ãã€ã³ãã£ã³ã°ãã¹ããŒããããšã«ããã«ã¹ã¿ã PowerShellã¹ã¯ãªããã®ç°¡çŽ åã
- ç°å¢ã®å¯èŠæ§ãå±éããã»ã¹ãç¹å®ã®å±éãæè»ã«æ§æããæ©èœã
- ãªãªãŒã¹ç®¡çã«å¯Ÿããã¢ã¯ã»ã¹æš©ã®æè»ãªå·®å¥åã
ã€ã³ã¹ããŒã«ãšã»ããã¢ãã
ã·ã¹ãã èªäœã®ã€ã³ã¹ããŒã«ã¯ç°¡åã§ç°¡åã§ããå€éšã®äŸåé¢ä¿ãããããŒã¿ããŒã¹ã®ä¿åã«å¿ èŠãªã®ã¯MS SQL Serverã®ã¿ã§ãã ããã«ãå±éãèšç»ããŠããåãµãŒããŒã«ãOctopus TentacleãšãŒãžã§ã³ããã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
ã€ã³ã¹ããŒã«ã¯èªååãããŠãããããäžå¿ èŠãªæåäœæ¥ããªããªããæ°ãããµãŒããŒãå±éããæºåãã§ããŸãã ãããè¡ãã«ã¯ãAnsibleã䜿çšããã¢ããªã±ãŒã·ã§ã³èªäœãã€ã³ã¹ããŒã«ããåŸããã®ãããªPowerShellã¹ã¯ãªããã䜿çšããŠæ§æãå®è¡ããŸãã
configure_tentacle.ps1
$tentacle = 'C:\Program Files\Octopus Deploy\Tentacle\Tentacle.exe' & $tentacle create-instance --instance "Tentacle" --config "C:\Octopus\Tentacle.config" --console & $tentacle import-certificate --instance "Tentacle" -f "C:\ansible_temp\tentacle_cert.txt" --console & $tentacle configure --instance "Tentacle" --reset-trust --console & $tentacle configure --instance "Tentacle" --home "C:\Octopus" --app "C:\Octopus\Applications" --port "10933" --console & $tentacle configure --instance "Tentacle" --trust "{{ octopus_thumbprint }}" --console & netsh advfirewall firewall add rule "name=Octopus Deploy Tentacle" dir=in action=allow protocol=TCP localport=10933 & $tentacle register-with --instance "Tentacle" --server "{{ octopus_server }}" --apiKey="{{ octopus_api_key }}" --role "{{ octopus_role }}" --environment "{{ octopus_env }}" --comms-style TentaclePassive --console & $tentacle service --instance "Tentacle" --install --start --console
ãã®çµæãæ°ãããµãŒããŒãäœæããåŸãèªåçã«ã¿ã³ã«ç»é²ãããããã«å±éã§ããŸãã ãšãŠãå¿«é©ã§ãã
ã©ã€ããµã€ã¯ã«
Octopus Deployã®éèŠãªãšã³ãã£ãã£ã®1ã€ã¯ã©ã€ããµã€ã¯ã«ã§ãã ãããã¯ãç°å¢éã§ãªãªãŒã¹ãèªåçã«ä¿é²ãããããããã³é©åãªãã¹ãã«åæ Œããåã«ã¢ããªã±ãŒã·ã§ã³ããããã€ã§ããç°å¢ãå¶éããããã«äœ¿çšãããŸãã
ããšãã°ãã¡ãžã£ãŒããŒãžã§ã³ã®å Žåãã·ã¹ãã ã®ã©ã€ããµã€ã¯ã«ã¯QAâPreâProdãšããŠå®çŸ©ãããŸãã ããã¯ããã¹ãããã³preprodåè·¯ã«é²ãåã«ãæ¬çªç°å¢ã«ããŒãžã§ã³ãå±éã§ããªãããšãæå³ããŸãã äžæ¹ããããããŒãžã§ã³ã®ã©ã€ããµã€ã¯ã«ã¯çããªããŸããPreâProdã ãããã¯ããªãããŒãã§ããã«ãã¹ããããŸãã
ãã£ã³ãã«
Octopusã®ãã£ãã«ã䜿çšãããšãåäžãããžã§ã¯ãã®è€æ°ã®ããŒãžã§ã³ãåå¥ã«å±éã§ããŸãã ããã±ãŒãžã®ããŒãžã§ã³ãå¶éããã«ãŒã«ã«å ããŠãåãã£ãã«ã«ã€ããŠããªãªãŒã¹ãä¿é²ããããã«äœ¿çšãããã©ã€ããµã€ã¯ã«ãæå®ããå±éããã»ã¹ãæ§æããŸãïŒåã¹ãããã«ã¯å®è¡ãããã£ãã«ã®èšå®ãããããïŒããŸããå€æ°ã®å€ã決å®ã§ããŸãã Octopus Deployã§äœæãããåãªãªãŒã¹ã¯ãå¿ ããã£ãã«ãåç §ããŸãã
ãã®ãããžã§ã¯ãã«ã¯ãã¡ãžã£ãŒããã€ããŒããããããŒãžã§ã³ã®ãã£ãã«ãšãä¿®æ£ããã°ã©ã ã®çŽæ¥èµ·åããã³çµ±åãã¹ãçšã®ã·ã¹ãã ã€ã³ã¹ã¿ã³ã¹ã®å±éã®ããã®å°çšãã£ãã«ããããŸãã
äž»ãªé åã¯ãé©åãªãã£ãã«ã§ãªãªãŒã¹ãèªåçã«äœæã§ããããšã§ãã ãããè¡ãã«ã¯ããã£ãã«ããããã£ã§ããã±ãŒãžããŒãžã§ã³ã®ç¯å²ãæå®ãïŒSemVerã¿ã°ã䜿çšã§ããŸãïŒããã®ãã£ãã«ã§ãªãªãŒã¹ãäœæããããã«äœ¿çšããå¿ èŠããããŸãã Octopusã¯ãææ°ããŒãžã§ã³ã®ããã±ãŒãžãèªåçã«éžæããŸãã
çŸåšãããŒãžã§ã³V10.1ããã³V11.0ããã¹ãããŠãããšããŸãã V10.1ãã©ã³ããããããžã§ã¯ãããã«ãããåŸãTeamCityã¯åéãããããã±ãŒãžïŒããã±ãŒãžã®ããŒãžã§ã³ã¯10.1.0.xxxxã«ãªããŸãïŒãOctopusã§ãã©ããã£ã³ã°ããããã€ããŒããªãªãŒã¹ã®ãã£ãã«ã§ãªãªãŒã¹ãäœæããŸãã åæã«ãããŒãžã§ã³10.1.0.xxxxã®ããã±ãŒãžã¯ãOctopusãããŒãžã§ã³11.0.0.yyyyã®æ°ããããã±ãŒãžãæ¢ã«æã£ãŠãããšããäºå®ã«ããããããããªãªãŒã¹ã«å ¥ããŸãã ããŒãžã§ã³ç¯å²ã§ã¯ãããã€ããŒããªãªãŒã¹ã®ãã£ãã«ã®ç¯å²ã¯[10.1.0.00000ã10.1.0.99999ïŒã§ãã
ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³ã®ç°ãªãããŒãžã§ã³ã¯ãã£ãã«å ã§å®å šã«å ±åããç°ãªãç°å¢ãžã®ç¬èªã®å±éããã»ã¹ã«åŸããŸãã
ãããžã§ã¯ãã³ã³ãããŒã«ããã«ã§ã®è¡šç€ºäŸã次ã«ç€ºããŸãã
éèŠïŒ å±éããã»ã¹ã«æ°ããæé ãè¿œå ããå Žåããã£ãã«ã«ãŒã«ã«æ°ããããã±ãŒãžãè¿œå ããŸãã ãã£ã³ãã«å ã®ããã±ãŒãžã«ããŒãžã§ã³å¶éãèšå®ãããŠããªãå ŽåãOctopusã¯ããã±ãŒãžã®ææ°ããŒãžã§ã³ã䜿çšããŸãã ã¢ããªã±ãŒã·ã§ã³ããŒãžã§ã³10.1ããããã€ããå ŽåããããŸãããããšãã°Octopusã«æ¢ã«ããå Žåã1ã€ã®ããã±ãŒãžã¯ããŒãžã§ã³11.0ã«ãªããŸãã
NuGetããã±ãŒãžã®äœæ
OctopackããŒã«ã䜿çšããŠããããžã§ã¯ãã®ãã«ãäžã«å±éçšã®ããã±ãŒãžãäœæã§ããŸãã ããã¯ãNuGetããã±ãŒãžãšããŠå¿ èŠãªãããžã§ã¯ãã«ã€ã³ã¹ããŒã«ãããŸããããã©ã«ãã®èšå®ã§åé¡ãªããã°ãä»ã«äœãããå¿ èŠã¯ãããŸããã
Octopackã¯ããããžã§ã¯ãã®çš®é¡ïŒã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ãWebã¢ããªã±ãŒã·ã§ã³ãWindowsãµãŒãã¹ïŒã«åºã¥ããŠãå±éäžã«å¿ èŠãªãã¡ã€ã«ãéžæããŸãã ããã±ãŒãžã«å«ãããã¡ã€ã«ãããã«åŸ®èª¿æŽããå¿ èŠãããå Žåã¯ãã«ã¹ã¿ã .nuspecãã¡ã€ã«ãäœæã§ããŸãã
TeamCityçµ±å
ããããæãèå³æ·±ãéšåã¯ãTeamCityã§ãããžã§ã¯ãããã«ãããåŸã«ãªãªãŒã¹ãäœæïŒããã³å±éïŒããããã»ã¹ãèªååãããšãã«å§ãŸããŸãã ãã®ããã»ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
- ã¬ãã¥ãŒåŸãéçºè ã¯èªåã®ã¿ã¹ã¯ãããŒãžã§ã³ãã©ã³ãã«ããŒãžããŸãã
- TeamCityã¯ãããžã§ã¯ããåéããã¢ã»ã³ããªãé 眮ãããã£ãã«ã決å®ããOctopus Deployã®å¿ èŠãªãã£ãã«ã§ãªãªãŒã¹ãäœæããŸãã
- æºåãã§ãããããã¹ã¿ãŒã¯Octopusã³ã³ãããŒã«ããã«ã®[å±é]ãã¿ã³ãã¯ãªãã¯ãããã®ãã£ãã«ã«å¯Ÿå¿ãããã¹ãç°å¢ã«ã¢ã»ã³ããªãå±éããŸãã
NuGetããã±ãŒãžãæºåããOctopusã«ã¢ããããŒããããªãªãŒã¹ãäœæããã¿ã¹ã¯ã®äžéšã¯ãTeamCityçšã®Octopus Deployãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããããšã«ãããéåžžã«ç°¡åã«å®è¡ã§ããŸãã ä»ã®ããã€ãã®æäœïŒããšãã°ããã£ãã«ã®ããŒãžã§ã³ç¯å²ã®èªåæŽæ°ïŒã®ããã«ãå°ããªPowerShellã¹ã¯ãªãããäœæããŸããã
ã¬ã€ãä»ãé害
å±éããã»ã¹äžã«ããããã®æé ã§ãšã©ãŒãçºçããå Žåãå±éå šäœãåæ¢ããèœäžãšããŠããŒã¯ãããŸãã ãã®åäœã¯åžžã«é¢é£ããŠããããã§ã¯ãããŸãããå±éã®ããã€ãã®ã¹ãããã§åé¡ã«å¯ŸåŠããæºåãã§ããŠããå ŽåããããŸãã ãããã®å Žåã«ã¯ãã¬ã€ãä»ãé害ãšåŒã°ããäœå¶ããããŸãã
ãªã³ã«ãªã£ãŠããŠãå±éäžã«ãšã©ãŒãçºçããå ŽåãOctopusã¯ãã¹ãŠã®æäœãäžæåæ¢ããç¹å¥ãªãŠã£ã³ããŠã衚瀺ããŸãã 調æ»ã®çµæã瀺ããå±éããã»ã¹ãç¶è¡ãããã©ããã決å®ã§ããŸãã å±éå±¥æŽã«ã¯ã誰ãããã€ãäœã決å®ãããã«ã€ããŠã®ã¡ã¢ããããŸãã
ããã±ãŒãžå ã®å±éã¹ã¯ãªãã
ã¢ããªã±ãŒã·ã§ã³ãšãµãŒãã¹ããããã€ããåã«ãè¿œå ã®ã¢ã¯ã·ã§ã³ãå®è¡ãããå ŽåããããŸãã ããšãã°ããµãŒãã¹ã¢ã«ãŠã³ãã«ä»£ãã£ãŠãã¢ããªã±ãŒã·ã§ã³ãèµ·åæã«ããŒãã«ã¢ã¯ã»ã¹ã§ããããšã確èªããŸãã ããã¯ãè¿œå ã®ã€ã³ã¹ããŒã«ã¹ã¯ãªããã䜿çšããŠè¡ãããšãã§ããŸãããã®ã¹ã¯ãªããã¯ãOctopus Webã€ã³ã¿ãŒãã§ã€ã¹ã§èšè¿°ã§ããå±éå¯èœãªã¢ããªã±ãŒã·ã§ã³ããã±ãŒãžã®äžéšã«ããããšãã§ããŸãã
ã¹ã¯ãªããã§ã¯ãPowerShellã®å€æ°ã®åœåèŠåã«åŸã£ãŠã¹ããŒãããã¿ã³å€æ°ã䜿çšã§ããŸãïŒãããããã®ä»ã®ç¹æ®æåã¯å€æ°åããåé€ããããããMyApp.ConnectionStringã¿ã³å€æ°ã¯$ MyAppConnectionStringãšããŠã¹ã¯ãªããã§äœ¿çšã§ããŸãïŒã
ãµãŒãã¹ã®ããŒãäºçŽãåé€ããã³è¿œå ããå±éåã¹ã¯ãªããã®äŸ
ä¿æããªã·ãŒ
ããæ¥ãããŒããã©ã€ããå®å šã«ãã£ã±ãã«ãªã£ãç¶æ³ã«ãªããªãããã«ãOctopusã¯ãå€ããªãªãŒã¹ã§äœ¿çšãããŠäžèŠã«ãªã£ãããã±ãŒãžãåé€ããã¡ã«ããºã ãæäŸããŸãã
ããã±ãŒãžã¹ãã¬ãŒãžããªã·ãŒã¯ã©ã€ããµã€ã¯ã«ã¬ãã«ã§èšè¿°ãããŸãããåã ã®ãã§ãŒãºã§åå®çŸ©ã§ããŸãã ãã®ãããããšãã°ããã¹ãç°å¢ãžã®ã¢ããªã±ãŒã·ã§ã³ã®å±éã®ãã¹ãŠã®æ®µéã§ãããã±ãŒãžã®ææ°ããŒãžã§ã³ã1ã€ã ãä¿åããŸãã
æŠéç°å¢ã§ã¯ããã®èšå®ããªãŒããŒã©ã€ãããæåŸã®5ã€ã®ãªãªãŒã¹ã®ããã±ãŒãžãæ ŒçŽããŸãïŒçªç¶ããŒã«ããã¯ããå¿ èŠãããå ŽåïŒã ãã·ã³èªäœã«ããã±ãŒãžãä¿åãããªãªãŒã¹ãæå®ããããšãã§ããŸãã ããŒã«ããã¯ãçºçããå ŽåãOctopusãµãŒããŒããããã±ãŒãžãåããŠã³ããŒãããæéãç¡é§ã«ããããšãªããããè¿ éã«å±éã§ããŸãã
è¿œå ã®èçŒã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãã·ã¹ãã ã§äœ¿çšããpowershellã¹ã¯ãªãããå ±æããŸãã ãããããã®ãŸãŸããŸãã¯äŸãšããŠäœ¿çšããŠãç¬èªã®ã¢ã€ãã¢ãå®è£ ã§ããŸãã
ãªãªãŒã¹ããŒãã®çæ
# Inspired by http://blogs.lessthandot.com/index.php/uncategorized/access-git-commits-during-a-teamcity-build-using-powershell/ function Get-CommitsFromGitLog([string] $StartCommit, [string] $EndCommit){ $taskRegex = "(WOF-\d+)" $Cmd = "& ""%vcsroot.agentGitPath%"" log --pretty=format:""%an: %s<br/>"" --encoding=cp866 --no-merges $StartCommit...$EndCommit" $Result = (Invoke-Expression $Cmd) -replace $taskRegex,'<a href="https://jira.tcsbank.ru/browse/$1">$1</a>' return $Result } function Get-TeamCityLastSuccessfulRun( [string] $TeamCityUrl, [string] $TeamCityBuildTypeId, [string] $TeamCityUsername, [string] $TeamCityPassword, [string] $TeamCityBranchName) { $Credentials = "$($TeamCityUsername):$($TeamCityPassword)" $AuthString = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("$Credentials")) $Url = "$($TeamCityUrl)/app/rest/buildTypes/id:$($TeamCityBuildTypeId)/builds/branch:name:$($TeamCityBranchName),status:SUCCESS" $Content = Invoke-WebRequest "$Url" -Headers @{"Authorization" = "Basic $AuthString"} -UseBasicParsing return $Content } $Run = Get-TeamCityLastSuccessfulRun -TeamCityUrl "%teamcity.serverUrl%" ` -TeamCityBuildTypeId "%system.teamcity.buildType.id%" ` -TeamCityUsername "%system.teamcity.auth.userId%" ` -TeamCityPassword "%system.teamcity.auth.password%" ` -TeamCityBranchName "%teamcity.build.branch%" $LatestCommitFromRun = (Select-Xml -Content "$Run" -Xpath "/build/revisions/revision/@version").Node.Value $CommitsSinceLastSuccess = Get-CommitsFromGitLog -StartCommit "$LatestCommitFromRun" ` -EndCommit "%build.vcs.number%" $CommitsSinceLastSuccess | Out-File releasenotes.txt -Force -Encoding utf8
ãã£ã³ãã«èšå®ã®æŽæ°ïŒAPIïŒ
function UpdateChannel ([string]$OctopusServer, [string]$ApiKey, [string]$ChannelId, [string]$MinVersion, [string]$MaxVersion) { $url = "$OctopusServer/api/{0}/{1}" $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $headers.Add("X-Octopus-ApiKey", $ApiKey) $channel = Invoke-RestMethod -Method Get -Uri ($url -f "channels", $ChannelId) -Headers $headers -ContentType 'application/json;charset=utf-8' $channel.Rules[0].VersionRange = "[{0},{1})" -f $MinVersion, $MaxVersion $utf8encodedString = [System.Text.Encoding]::UTF8.GetBytes(($channel | ConvertTo-Json -Depth 3)) Invoke-RestMethod -Method Put -Uri ($url -f "channels", $ChannelId) -Headers $headers -Body $utf8encodedString } $minVersion = ("%CalculatedBuildBranch%").Trim("V") + ".00000" $maxVersion = ("%CalculatedBuildBranch%").Trim("V") + ".99999" if("%TargetChannel%" -eq "%PatchChannelName%") { UpdateChannel %OctopusServer% %OctopusApiKey% %PatchChannelId% $minVersion $maxVersion } if("%TargetChannel%" -eq "%MinorChannelName%") { UpdateChannel %OctopusServer% %OctopusApiKey% %MinorChannelId% $minVersion $maxVersion } if("%TargetChannel%" -eq "%MajorChannelName%") { UpdateChannel %OctopusServer% %OctopusApiKey% %MajorChannelId% $minVersion $maxVersion }
ãããã«
1幎åã«Octopus Deployã®äœ¿çšãéå§ããçæéã®ãã¹ãæäœã®åŸããã¹ãŠã®ç°å¢ã«ã·ã¹ãã ããããã€ããããã«å®å šã«åãæ¿ããããšãéåžžã«å¬ããæããŸãã
ãã®ãããžã§ã¯ãã¯æŽ»çºã«éçºãããŠããããã€ããŒãªãªãŒã¹ã¯ã»ãŒæ¯é±å ¬éãããŠããŸãã æè¿ã®ããŒãžã§ã³ã§ã¯ãOctopus Deployã¯.netã³ã¢ããã³ã¢ãã©ã«ã¢ããªã±ãŒã·ã§ã³ãLinuxãã·ã³ã«ãããã€ããDockerã³ã³ããããããã€ããããšãåŠã³ãŸãããææ°ãªãªãŒã¹3.17ã§ã¯ãTomcatãRedHat JBOSSãWildflyã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãžã®Javaã¢ããªã±ãŒã·ã§ã³ã®ãããã€ã«å¯Ÿããäžæµã®ãµããŒããè¿œå ããŸããã
次ã®èšäºã§ã¯ããã©ã³ãã®æ©èœãããŒã«ã«OpenStackã¯ã©ãŠãã§èªåçã«çºçããåã ã®ä»®æ³ãã·ã³ã«å±éããããã»ã¹ãæŽçããŠãåã ã®ã¿ã¹ã¯ã®åé¢ãã¹ããå®æœããããã«äœ¿çšãããã«ãããã³ãå±éã«ã€ããŠèª¬æããŸãã