ãŸãã¯ãäžæ©ã®ç°¡åãªã³ãŒãã£ã³ã°ã§ãããžã§ã¯ãã®çŸãããããžãååŸããæ¹æ³
ãããããå°ãªããšã XNUMX ã€ã®ããã ãããžã§ã¯ããæã£ãŠãããã¹ãŠã®éçºè ã¯ãnuget ã®ã¹ããŒã¿ã¹ãã³ãŒã ã«ãã¬ããžãããã±ãŒãž ããŒãžã§ã³ãå«ãçŸãããããžã«æ©ãŸãããããšãããã§ããã...ãããŠããã®ããã¿ãç§ã«ãã®èšäºãæžããã£ãããäžããŸããã ãã®èšäºãæžãæºåãããŠãããšãã«ãç§ã¯èªåã®ãããžã§ã¯ãã® XNUMX ã€ã§ãã®çŸãããæã«å ¥ããŸããã
ãã®èšäºã§ã¯ãGitLab ã§ã® .Net Core ã¯ã©ã¹ ã©ã€ãã©ãª ãããžã§ã¯ãã®ç¶ç¶ççµ±åãšé ä¿¡ã®åºæ¬çãªèšå®ãGitLab Pages ãžã®ããã¥ã¡ã³ãã®çºè¡ãAzure DevOps ã®ãã©ã€ããŒã ãã£ãŒããžã®ãã«ããããããã±ãŒãžã®ããã·ã¥ã«ã€ããŠèª¬æããŸãã
éçºç°å¢ãšããŠVS Codeã䜿çšããæ¡åŒµæ©èœãè¿œå ããŸããã
ç°¡åãªçŽ¹ä»
CD - ããã·ã¥ããã°ããã§ããã¹ãŠããã§ã«ã¯ã©ã€ã¢ã³ãã«èœã¡ãŠãããšãã§ãã?
CI / CD ãšã¯äœãããªããããå¿
èŠãªã®ã - ç°¡åã« Google ã§æ€çŽ¢ã§ããŸãã GitLab ã§ãã€ãã©ã€ã³ã®æ§æã«é¢ããå®å
šãªããã¥ã¡ã³ããæ€çŽ¢ããŸãã
- éçºè ã¯ãªããžããªã«ã³ããããéä¿¡ãããµã€ããéããŠããŒãžãªã¯ãšã¹ããäœæããŸãã ãŸãã¯ä»ã®æ¹æ³ã§ãæ瀺çãŸãã¯æé»çã«ãã€ãã©ã€ã³ãéå§ããŸãã,
- ãã¹ãŠã®ã¿ã¹ã¯ã¯èšå®ããââéžæããããã®æ¡ä»¶ã«ããç¹å®ã®ã³ã³ããã¹ãã§ã¿ã¹ã¯ãèµ·åã§ããŸãã
- ã¿ã¹ã¯ã¯æ®µéã«å¿ããŠæŽçãããŠããã
- ã¹ããŒãžã¯é çªã«å®è¡ãããŸããã€ãŸãã ã«å¹³è¡ ãã®æ®µéã®ãã¹ãŠã®ã¿ã¹ã¯ãå®äºãããšã
- ã¹ããŒãžã倱æãããš (ã€ãŸããã¹ããŒãžã®ã¿ã¹ã¯ã®å°ãªããšã XNUMX ã€ã倱æãããš)ããã€ãã©ã€ã³ã¯åæ¢ããŸã (ã»ãšãã©ãã€ã),
- ãã¹ãŠã®ã¹ããŒãžãæ£åžžã«å®äºãããšããã€ãã©ã€ã³ã¯æåãããšã¿ãªãããŸãã
ãããã£ãŠã次ã®ããã«ãªããŸãã
- ãã€ãã©ã€ã³ - ã³ãŒãã®ãã«ãããã¹ããããã±ãŒãžåãå®æãããã«ãã®ã¯ã©ãŠã ãµãŒãã¹ãžã®ãããã€ãªã©ãè¡ãããšãã§ãã段éã«ç·šæãããäžé£ã®ã¿ã¹ã¯ã
- ã¹ããŒãžïŒã¹ããŒãž) â ãã€ãã©ã€ã³çµç¹åäœã1 ã€ä»¥äžã®ã¿ã¹ã¯ãå«ãŸããŸãã
- ã¿ã¹ã¯ ïŒãžã§ã) ã¯ãã€ãã©ã€ã³å ã®äœæ¥åäœã§ãã ããã¯ãã¹ã¯ãªãã (å¿ é )ãèµ·åæ¡ä»¶ãã¢ãŒãã£ãã¡ã¯ãã®å ¬é/ãã£ãã·ã¥ã®èšå®ãªã©ã§æ§æãããŸãã
ãããã£ãŠãCI/CD ãã»ããã¢ãããããšãã®ã¿ã¹ã¯ã¯ãã³ãŒããšã¢ãŒãã£ãã¡ã¯ãã®æ§ç¯ããã¹ããå ¬éã«å¿ èŠãªãã¹ãŠã®ã¢ã¯ã·ã§ã³ãå®è£ ããäžé£ã®ã¿ã¹ã¯ãäœæããããšã«ãªããŸãã
å§ããåã«: ãªãã§ãã?
- ãªã Gitlab ãªã®ã?
ãªããªããããããããžã§ã¯ãçšã«ãã©ã€ããŒããªããžããªãäœæããå¿ èŠãçãããšããããã㯠GitHub ã§æ¯æãããç§ã¯è²ªæ¬²ã ã£ãããã§ãã ãªããžããªã¯ç¡æã«ãªããŸããããä»ã®ãšãããããã¯ç§ã GitHub ã«ç§»è¡ããååãªçç±ã«ã¯ãªããŸããã
- ãªã Azure DevOps ãã€ãã©ã€ã³ã䜿çšããªãã®ã§ãããã?
ãã®èšå®ã¯åºæ¬çãªãã®ã§ãããããã³ãã³ã ã©ã€ã³ã®ç¥èããå¿ èŠãããŸããã å€éš git ãããã€ããŒãšã®çµ±å - æ°åã¯ãªãã¯ããã ãã§ãSSH ããŒãã€ã³ããŒãããŠãªããžããªã«ã³ããããéä¿¡ã§ããŸãããŸãããã€ãã©ã€ã³ã¯ãã³ãã¬ãŒãããã§ãªããŠãç°¡åã«æ§æã§ããŸãã
ã¹ã¿ãŒãå°ç¹ïŒæã£ãŠãããã®ãšæ¬²ãããã®
æã ã¯æã£ãŠããŸãïŒ
- GitLab ã®ãªããžããªã
ç§ãã¡ãæãã§ããã®ã¯:
- åããŒãžãªã¯ãšã¹ãã®èªåã¢ã»ã³ããªãšãã¹ãã
- ã³ãããã¡ãã»ãŒãžã«ç¹å®ã®è¡ãããã°ãããŒãžãªã¯ãšã¹ãããšã«ããã±ãŒãžãæ§ç¯ããŠãã¹ã¿ãŒã«ããã·ã¥ããŸãã
- ãã«ããããããã±ãŒãžã Azure DevOps ã®ãã©ã€ããŒã ãã£ãŒãã«éä¿¡ããã
- ããã¥ã¡ã³ãã®ã¢ã»ã³ããªãš GitLab Pages ã§ã®å ¬éã
- ãããž!11
説æãããŠããèŠä»¶ã¯ã次ã®ãã€ãã©ã€ã³ ã¢ãã«ã«ææ©çã«åœãŠã¯ãŸããŸãã
- ã¹ããŒãž 1 - çµã¿ç«ãŠ
- ã³ãŒããåéããåºåãã¡ã€ã«ãã¢ãŒãã£ãã¡ã¯ããšããŠå ¬éããŸã
- ã¹ããŒãž 2 - ãã¹ã
- ãã«ã段éããææç©ãååŸãããã¹ããå®è¡ããã³ãŒãã«ãã¬ããžããŒã¿ãåéããŸãã
- ã¹ããŒãž 3 - éä¿¡
- ã¿ã¹ã¯ 1 - nuget ããã±ãŒãžããã«ãã㊠Azure DevOps ã«éä¿¡ãã
- ã¿ã¹ã¯ 2 - ãœãŒã¹ ã³ãŒãå ã® xmldoc ãããµã€ããåéããGitLab Pages ã§å ¬éããŸãã
å§ããŸãããïŒ
èšå®ã®åé
ã¢ã«ãŠã³ãã®æºå
-
ã§ã¢ã«ãŠã³ããäœæããŸã
Microsoft Azure -
ã«è¡ã
Azure DevOps -
æ°ãããããžã§ã¯ããäœæããŸã
- åå - ä»»æ
- å¯èŠæ§ - ä»»æ
-
ãäœæããã¿ã³ãã¯ãªãã¯ãããšããããžã§ã¯ããäœæããããã®ããŒãžã«ãªãã€ã¬ã¯ããããŸãã ãã®ããŒãžã§ã¯ããããžã§ã¯ãèšå® (å·ŠåŽã®ãªã¹ãã®äžã®ãªã³ã¯ -> æŠèŠ -> Azure DevOps Services ãããã¯) ã«ç§»åããŠãäžèŠãªæ©èœãç¡å¹ã«ããããšãã§ããŸãã
-
ãå±æ§ãã«ç§»åããããã£ãŒãã®äœæããã¯ãªãã¯ããŸãã
- ãœãŒã¹ã®ååãå ¥åããŠãã ãã
- å¯èŠæ§ã®éžæ
- ãã§ãã¯ãå€ããŸã äžè¬çãªãããªã㯠ãœãŒã¹ããã®ããã±ãŒãžãå«ããããœãŒã¹ããã³ã nuget ã¯ããŒã³ã«ãªããªãããã«ãããã
-
[ãã£ãŒãã«æ¥ç¶] ãã¯ãªãã¯ããVisual Studio ãéžæãããã·ã³ ã»ããã¢ãã ãããã¯ãããœãŒã¹ãã³ããŒããŸãã
-
ã¢ã«ãŠã³ãèšå®ã«ç§»åããããŒãœãã«ã¢ã¯ã»ã¹ããŒã¯ã³ãéžæããŸã
-
æ°ããã¢ã¯ã»ã¹ããŒã¯ã³ãäœæãã
- åå - ä»»æ
- çµç¹ - çŸåš
- æé·1幎éæå¹
- ç¯å² - ããã±ãŒãžå/èªã¿åãããã³æžã蟌ã¿
-
äœæããããŒã¯ã³ãã³ããŒããŸã - ã¢ãŒãã«ãŠã£ã³ããŠãéãããããšãå€ã¯äœ¿çšã§ããªããªããŸã
-
GitLab ã®ãªããžããªèšå®ã«ç§»åããCI / CD èšå®ãéžæããŸãã
-
å€æ°ãããã¯ãå±éããæ°ããå€æ°ãããã¯ãè¿œå ããŸã
- åå - ã¹ããŒã¹ãå«ãŸãªãä»»æã®åå (ã³ãã³ã ã·ã§ã«ã§äœ¿çšå¯èœ)
- å€ - æ®µèœ 9 ã®ã¢ã¯ã»ã¹ ããŒã¯ã³
- ãã¹ã¯å€æ°ã®éžæ
ããã§äºåèšå®ã¯å®äºã§ãã
æ§æãã¬ãŒã ã¯ãŒã¯ã®æºå
ããã©ã«ãã§ã¯ãGitLab ã® CI/CD æ§æã§ã¯æ¬¡ã®ãã¡ã€ã«ã䜿çšãããŸãã .gitlab-ci.yml
ãªããžããªã®ã«ãŒãããã ãªããžããªèšå®ã§ãã®ãã¡ã€ã«ãžã®ä»»æã®ãã¹ãèšå®ã§ããŸããããã®å Žåã¯å¿
èŠãããŸããã
æ¡åŒµåãããããããã«ããã®ãã¡ã€ã«ã«ã¯æ¬¡ã®åœ¢åŒã®èšå®ãå«ãŸããŠããŸãã YAML
ã ããã¥ã¡ã³ãã«ã¯ãæ§æã®æäžäœã¬ãã«ããã³ãã¹ããããåã¬ãã«ã«ã©ã®ããŒãå«ããããšãã§ãããã詳ãã説æãããŠããŸãã
ãŸããã¿ã¹ã¯ãå®è¡ãããæ§æãã¡ã€ã«ã« Docker ã€ã¡ãŒãžãžã®ãªã³ã¯ãè¿œå ããŸãããã ãã®ããã«ãç§ãã¡ã¯èŠã€ããŸã
image: mcr.microsoft.com/dotnet/core/sdk:3.1
ããã§ããã€ãã©ã€ã³ã Microsoft ã€ã¡ãŒãž ãªããžããªããèµ·åããããšãæå®ãããã€ã¡ãŒãžãããŠã³ããŒããããããã§æ§æã®ãã¹ãŠã®ã¿ã¹ã¯ãå®è¡ãããŸãã
次ã®ã¹ãããã¯è¿œå ããããšã§ã ã¹ããŒãžããã®ã ããã©ã«ãã§ã¯ãGitLab 㯠5 ã€ã®ã¹ããŒãžãå®çŸ©ããŸãã
.pre
- ãã¹ãŠã®ã¹ããŒãžãŸã§å®è¡ããã.post
- ãã¹ãŠã®ã¹ããŒãžã®åŸã«å®è¡ãããŸããbuild
- æåã®åŸã®.pre
ã¹ããŒãžãtest
- 第äºæ®µéãdeploy
- 第äžæ®µéã
ãã ããããããæ瀺çã«å®£èšããããšã劚ãããã®ã¯ãããŸããã ã¹ãããããªã¹ããããŠããé åºã¯ãã¹ããããå®è¡ãããé åºã«åœ±é¿ããŸãã å®å šãæãããã«ãæ§æã«è¿œå ããŸãããã
stages:
- build
- test
- deploy
ãããã°ã®å Žåãã¿ã¹ã¯ãå®è¡ãããç°å¢ã«é¢ããæ
å ±ãååŸããããšã¯æå³ããããŸãã åã¿ã¹ã¯ã®åã«å®è¡ãããã³ãã³ãã®ã°ããŒãã« ã»ãããè¿œå ããŸãããã before_script
:
before_script:
- $PSVersionTable.PSVersion
- dotnet --version
- nuget help | select-string Version
ã³ããããéä¿¡ããããšãã«ãã€ãã©ã€ã³ãéå§ãããããã«ãå°ãªããšã XNUMX ã€ã®ã¿ã¹ã¯ãè¿œå ããå¿ èŠããããŸãã ããã§ã¯ã空ã®ã¿ã¹ã¯ãè¿œå ããŠãã¢ã³ã¹ãã¬ãŒã·ã§ã³ããŠã¿ãŸãããã
dummy job:
script:
- echo ok
æ€èšŒãéå§ãããã¹ãŠãæ£åžžã§ãããšããã¡ãã»ãŒãžãåãåããã³ãããããããã·ã¥ãããµã€ãã§çµæã確èªããŸã...ãããŠã¹ã¯ãªãã ãšã©ãŒãçºçããŸã - bash: .PSVersion: command not found
ã WTFïŒ
ãã¹ãŠãè«ççã§ã - ããã©ã«ãã§ã¯ãã©ã³ã㌠(ã¿ã¹ã¯ ã¹ã¯ãªããã®å®è¡ãæ
åœããGitLab ã«ãã£ãŠæäŸããã) ã¯ä»¥äžã䜿çšããŸãã bash
ã³ãã³ããå®è¡ããŸãã ãããä¿®æ£ããã«ã¯ãã¿ã¹ã¯ã®èª¬æã§ãå®è¡äžã®ãã€ãã©ã€ã³ ã©ã³ããŒã«ã©ã®ã¿ã°ãä»ããå¿
èŠãããããæ瀺çã«æå®ããŸãã
dummy job on windows:
script:
- echo ok
tags:
- windows
çŽ æŽãããïŒ ãã€ãã©ã€ã³ãå®è¡äžã§ãã
泚ææ·±ãèªè
ã¯ã瀺ãããæé ãç¹°ãè¿ããšããã®æ®µéã§ã¿ã¹ã¯ãå®äºããããšã«æ°ã¥ãã§ãããã test
ãã¹ããŒãžã¯ç¹å®ããŸããã§ãããã ãæ³åã®ãšãã test
ã¯ããã©ã«ãã®ã¹ãããã§ãã
äžèšã®ãã¹ãŠã®ã¿ã¹ã¯ãè¿œå ããŠãæ§æã¹ã±ã«ãã³ã®äœæãç¶ããŸãããã
build job:
script:
- echo "building..."
tags:
- windows
stage: build
test and cover job:
script:
- echo "running tests and coverage analysis..."
tags:
- windows
stage: test
pack and deploy job:
script:
- echo "packing and pushing to nuget..."
tags:
- windows
stage: deploy
pages:
script:
- echo "creating docs..."
tags:
- windows
stage: deploy
ç¹ã«æ©èœçã§ã¯ãããŸããããããã§ãæ£ãããã€ãã©ã€ã³ãå®æããŸããã
ããªã¬ãŒã®èšå®
ã©ã®ã¿ã¹ã¯ã«ãããªã¬ãŒ ãã£ã«ã¿ãŒãæå®ãããŠããªãããããã€ãã©ã€ã³ã¯ åå ã³ãããããªããžããªã«ããã·ã¥ããããã³ã«å®è¡ãããŸãã ããã¯äžè¬ã«æãŸããåäœã§ã¯ãªããããã¿ã¹ã¯ã®ããªã¬ãŒ ãã£ã«ã¿ãŒãèšå®ããŸãã
ãã£ã«ã¿ãŒã¯ XNUMX ã€ã®åœ¢åŒã§æ§æã§ããŸãã only/except
ããªã¬ãŒã«ãã£ãŠãã£ã«ã¿ãŒãèšå®ã§ããŸã (merge_request
äŸ: ãã« ãªã¯ãšã¹ããäœæããããã³ãããã³ããŒãž ãªã¯ãšã¹ãã®ãœãŒã¹ã§ãããã©ã³ãã«ã³ããããéä¿¡ããããã³ã«å®è¡ãããã¿ã¹ã¯) ãšãã©ã³ãå (æ£èŠè¡šçŸã®äœ¿çšãå«ã) ãèšå®ããŸãã rules
äžé£ã®æ¡ä»¶ãã«ã¹ã¿ãã€ãºããå¿
èŠã«å¿ããŠãåã®ã¿ã¹ã¯ã®æåã«å¿ããŠã¿ã¹ã¯ã®å®è¡æ¡ä»¶ãå€æŽã§ããŸã (when
GitLab CI/CD å
äžé£ã®èŠä»¶ - ããŒãž ãªã¯ãšã¹ãã®ã¿ã®ã¢ã»ã³ããªãšãã¹ããããŒãž ãªã¯ãšã¹ããšãã¹ã¿ãŒãžã®ããã·ã¥ã®å Žåã®ããã±ãŒãžåãš Azure DevOps ãžã®éä¿¡ããã¹ã¿ãŒãžã®ããã·ã¥ã®å Žåã®ããã¥ã¡ã³ãçæ - ãæãåºããŠãã ããã
ãŸããããŒãž ãªã¯ãšã¹ãã§ã®ã¿èµ·åããã«ãŒã«ãè¿œå ããŠãã³ãŒã ãã«ã ã¿ã¹ã¯ãèšå®ããŸãããã
build job:
# snip
only:
- merge_request
次ã«ãããŒãž ãªã¯ãšã¹ãã§èµ·åãããã¹ã¿ãŒã«ã³ããããè¿œå ããããã«ããã±ãŒãžã³ã° ã¿ã¹ã¯ãèšå®ããŸãããã
pack and deploy job:
# snip
only:
- merge_request
- master
ã芧ã®ãšããããã¹ãŠãã·ã³ãã«ã§ç°¡åã§ãã
ããŒãž ãªã¯ãšã¹ããç¹å®ã®ã¿ãŒã²ãããŸãã¯ãœãŒã¹ ãã©ã³ãã§äœæãããå Žåã«ã®ã¿ã¿ã¹ã¯ãèµ·åããããã«èšå®ããããšãã§ããŸãã
rules:
- if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"
æ¡ä»¶ä»ãã§ãå©çšããã ããŸã rules
ã«ãŒã«ã«é©åããªã only/except
.
ã¢ãŒãã£ãã¡ã¯ãã®ä¿åã®æ§æ
ã¿ã¹ã¯äž build job
åŸç¶ã®ã¿ã¹ã¯ã§åå©çšã§ãããã«ã ã¢ãŒãã£ãã¡ã¯ããåŸãããŸãã ãããè¡ãã«ã¯ãã¿ã¹ã¯èšå®ãžã®ãã¹ãã€ãŸã次ã®ã¿ã¹ã¯ã§ä¿åããŠåå©çšããå¿
èŠããããã¡ã€ã«ãžã®ãã¹ãããŒã«è¿œå ããå¿
èŠããããŸãã artifacts
build job:
# snip
artifacts:
paths:
- path/to/build/artifacts
- another/path
- MyCoolLib.*/bin/Release/*
ãã¹ã¯ã¯ã€ã«ãã«ãŒãããµããŒãããŠãããããèšå®ãç°¡åã«ãªããŸãã
ã¿ã¹ã¯ãã¢ãŒãã£ãã¡ã¯ããäœæãããšãåŸç¶ã®åã¿ã¹ã¯ã¯ã¢ãŒãã£ãã¡ã¯ãã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸããã¢ãŒãã£ãã¡ã¯ãã¯ãå ã®ã¿ã¹ã¯ããåéããããªããžã㪠ã«ãŒãã«å¯ŸããŠçžå¯Ÿçãªåããã¹ã«æ²¿ã£ãŠé 眮ãããŸãã ã¢ãŒãã£ãã¡ã¯ãã¯ãµã€ãããããŠã³ããŒãããããšãã§ããŸãã
æ§æãã¬ãŒã ã¯ãŒã¯ã®æºåãã§ãã (ãããŠãã¹ãããã) ã®ã§ãå®éã«ã¿ã¹ã¯çšã®ã¹ã¯ãªãããäœæããããšã«é²ãããšãã§ããŸãã
ç§ãã¡ã¯èæ¬ãæžããŸã
ãããããã¯ããæãã¯ãã圌æ¹ã®é河系ã§ãã³ãã³ã ã©ã€ã³ãããããžã§ã¯ã (.net äžã®ãããžã§ã¯ããå«ã) ãæ§ç¯ããã®ã¯èŠçã ã£ãã®ã§ãããã ããã§ã3 ã€ã®ããŒã ã§ãããžã§ã¯ããæ§ç¯ããã¹ããå ¬éã§ããããã«ãªããŸããã
dotnet build
dotnet test
dotnet pack
åœç¶ã®ããšãªãããããã€ãã®ãã¥ã¢ã³ã¹ããããããã³ãã³ããå€å°è€éã«ãªããŸãã
- ãããã° ãã«ãã§ã¯ãªããªãªãŒã¹ ãã«ããå¿
èŠãªã®ã§ãåã³ãã³ãã«è¿œå ããŸãã
-c Release
- ãã¹ãæã«ã³ãŒã ã«ãã¬ããž ããŒã¿ãåéããå¿
èŠãããããããã¹ã ã©ã€ãã©ãªã«ã«ãã¬ããž ã¢ãã©ã€ã¶ãŒãå«ããå¿
èŠããããŸãã
- ãã¹ãŠã®ãã¹ã ã©ã€ãã©ãªã«ããã±ãŒãžãè¿œå ãã
coverlet.msbuild
:dotnet add package coverlet.msbuild
ãããžã§ã¯ããã©ã«ããŒãã - ãã¹ãå®è¡ã³ãã³ãã«è¿œå
/p:CollectCoverage=true
- ã«ãã¬ããžçµæãååŸããã«ã¯ããã¹ã ã¿ã¹ã¯æ§æã«ããŒãè¿œå ããŸã (äžèšãåç §)ã
- ãã¹ãŠã®ãã¹ã ã©ã€ãã©ãªã«ããã±ãŒãžãè¿œå ãã
- ã³ãŒãã nuget ããã±ãŒãžã«ããã¯ãããšãã¯ãããã±ãŒãžã®åºåãã£ã¬ã¯ããªãèšå®ããŸãã
-o .
ã³ãŒãã«ãã¬ããžããŒã¿ã®åé
ãã¹ãã®å®è¡åŸãCoverlet ã¯å®è¡çµ±èšãã³ã³ãœãŒã«ã«åºåããŸãã
Calculating coverage result...
Generating report 'C:Usersxxxsourcereposmy-projectmyProject.testscoverage.json'
+-------------+--------+--------+--------+
| Module | Line | Branch | Method |
+-------------+--------+--------+--------+
| project 1 | 83,24% | 66,66% | 92,1% |
+-------------+--------+--------+--------+
| project 2 | 87,5% | 50% | 100% |
+-------------+--------+--------+--------+
| project 3 | 100% | 83,33% | 100% |
+-------------+--------+--------+--------+
+---------+--------+--------+--------+
| | Line | Branch | Method |
+---------+--------+--------+--------+
| Total | 84,27% | 65,76% | 92,94% |
+---------+--------+--------+--------+
| Average | 90,24% | 66,66% | 97,36% |
+---------+--------+--------+--------+
GitLab ã§ã¯ãæ£èŠè¡šçŸãæå®ããŠçµ±èšãååŸã§ããçµ±èšã¯ãããžã®åœ¢åŒã§ååŸã§ããŸãã æ£èŠè¡šçŸã¯ã¿ã¹ã¯èšå®ã§ããŒã䜿çšããŠæå®ãããŸãã coverage
; åŒã«ã¯ãã£ãã㣠ã°ã«ãŒããå«ãŸããŠããå¿
èŠãããããã®å€ããããžã«æž¡ãããŸãã
test and cover job:
# snip
coverage: /|s*Totals*|s*(d+[,.]d+%)/
ããã§ã¯ãåèšã©ã€ã³ ã«ãã¬ããžãæã€ã©ã€ã³ããçµ±èšãååŸããŸãã
ããã±ãŒãžãšããã¥ã¡ã³ããå ¬éãã
ã©ã¡ãã®ã¢ã¯ã·ã§ã³ããã€ãã©ã€ã³ã®æçµæ®µéã§ã¹ã±ãžã¥ãŒã«ãããŠããŸããã¢ã»ã³ããªãšãã¹ããå®äºããã®ã§ãéçºå 容ãäžçãšå ±æã§ããŸãã
ãŸããããã±ãŒãž ãœãŒã¹ã«å ¬éããããšãæ€èšããŠãã ããã
-
ãããžã§ã¯ãã« nuget æ§æãã¡ã€ã«ããªãå Žå (
nuget.config
)ãæ°ãããã®ãäœæããŸããdotnet new nugetconfig
äœã®ããã«ïŒ ã€ã¡ãŒãžã«ã¯ãã°ããŒãã« (ãŠãŒã¶ãŒããã³ãã·ã³) æ§æãžã®æžã蟌ã¿ã¢ã¯ã»ã¹æš©ããªãå¯èœæ§ããããŸãã ãšã©ãŒãæ€åºããªãããã«ããããã«ãæ°ããããŒã«ã«æ§æãäœæãããããæäœããã ãã§ãã
- æ°ããããã±ãŒãž ãœãŒã¹ãããŒã«ã«æ§æã«è¿œå ããŸãããã
nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
name
- ããŒã«ã«ãœãŒã¹åãéèŠã§ã¯ãããŸããurl
- ãã¢ã«ãŠã³ãã®æºåã段éã®ãœãŒã¹ã® URL (p. 6)organization
- Azure DevOps ã®çµç¹ågitlab variable
- GitLab ã«è¿œå ãããã¢ã¯ã»ã¹ ããŒã¯ã³ãå«ãå€æ°ã®åå (ãã¢ã«ãŠã³ãã®æºåãã11 ããŒãž)ã åœç¶ãã©ãŒãããçã«ã¯$variableName
-StorePasswordInClearText
- ã¢ã¯ã»ã¹æåŠãšã©ãŒãåé¿ãããã㯠(ãã®çæãèžãã ã®ã¯ç§ãåããŠã§ã¯ãããŸãã )- ãšã©ãŒãçºçããå Žåã¯ã次ã®ããã«è¿œå ãããšåœ¹ç«ã€å ŽåããããŸã
-verbosity detailed
- ããã±ãŒãžããœãŒã¹ã«éä¿¡ããŸãã
nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
- ãã¹ãŠã®ããã±ãŒãžã¯çŸåšã®ãã£ã¬ã¯ããªããéä¿¡ãããããã
*.nupkg
. name
- äžèšã®ã¹ããããããkey
- ä»»æã®è¡ã Azure DevOps ã® [ãã£ãŒãã«æ¥ç¶] ãŠã£ã³ããŠã§ã¯ãäŸã¯åžžã«æ¬¡ã®è¡ã«ãªããŸããaz
.-skipduplicate
- ãã®ããŒãªãã§æ¢åã®ããã±ãŒãžãéä¿¡ããããšãããšããœãŒã¹ã¯ãšã©ãŒãè¿ããŸãã409 Conflict
; ããŒãæŒããšéä¿¡ãã¹ããããããŸãã
- ãã¹ãŠã®ããã±ãŒãžã¯çŸåšã®ãã£ã¬ã¯ããªããéä¿¡ãããããã
次ã«ãããã¥ã¡ã³ãã®äœæãèšå®ããŸãããã
- ãŸãããªããžããªã® master ãã©ã³ã㧠docfx ãããžã§ã¯ããåæåããŸãã ãããè¡ãã«ã¯ãã«ãŒãããã³ãã³ããå®è¡ããŸãã
docfx init
ããã¥ã¡ã³ããæ§ç¯ããããã®äž»èŠãªãã©ã¡ãŒã¿ã察話çã«èšå®ããŸãã ãããžã§ã¯ãã®æå°ã»ããã¢ããã®è©³çŽ°ãªèª¬æãã㧠.- æ§æãããšãã¯ãåºåãã£ã¬ã¯ããªãæå®ããããšãéèŠã§ã
..public
- GitLab ã¯ããã©ã«ãã§ããªããžããªã®ã«ãŒãã«ãããããªã㯠ãã©ã«ããŒã®å 容ã Pages ã®ãœãŒã¹ãšããŠååŸããŸãã ãªããªããããžã§ã¯ãã¯ãªããžããªå ã«ãã¹ãããããã©ã«ããŒã«é 眮ãããŸãããã¹ã®äžäœã¬ãã«ã«åºåãè¿œå ããŸãã
- æ§æãããšãã¯ãåºåãã£ã¬ã¯ããªãæå®ããããšãéèŠã§ã
- å€æŽã GitLab ã«ããã·ã¥ããŸãããã
- ãã€ãã©ã€ã³æ§æã«ã¿ã¹ã¯ãè¿œå ãã
pages
(GitLab Pages ã§ã®ãµã€ãå ¬éã¿ã¹ã¯ã®äºçŽèª):- èæ¬ïŒ
nuget install docfx.console -version 2.51.0
- docFX ãã€ã³ã¹ããŒã«ããŸãã ããŒãžã§ã³ã¯ãããã±ãŒãžã®ã€ã³ã¹ããŒã« ãã¹ãæ£ããããšã確èªããããã«æå®ãããŸãã.docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json
- ææžã®åé
- ããŒãã¢ãŒãã£ãã¡ã¯ã:
- èæ¬ïŒ
pages:
# snip
artifacts:
paths:
- public
docfx ã«ã€ããŠã®æè©ã®äœè«
以åã¯ããããžã§ã¯ããã»ããã¢ãããããšãã«ãããã¥ã¡ã³ãã®ã³ãŒã ãœãŒã¹ããœãªã¥ãŒã·ã§ã³ ãã¡ã€ã«ãšããŠæå®ããŸããã äž»ãªæ¬ ç¹ã¯ãããã¥ã¡ã³ãããã¹ã ãããžã§ã¯ãçšã«ãäœæãããããšã§ãã ãããå¿
èŠã§ãªãå Žåã¯ããã®å€ãããŒãã«èšå®ã§ããŸãã metadata.src
:
{
"metadata": [
{
"src": [
{
"src": "../",
"files": [
"**/*.csproj"
],
"exclude":[
"*.tests*/**"
]
}
],
// --- snip ---
},
// --- snip ---
],
// --- snip ---
}
metadata.src.src: "../"
- å Žæã«å¯Ÿã㊠XNUMX ã¬ãã«äžã«ç§»åããŸãdocfx.json
ã ãªããªããã¿ãŒã³ã§ã¯ããã£ã¬ã¯ã㪠ããªãŒã®æ€çŽ¢ã¯æ©èœããŸãããmetadata.src.files: ["**/*.csproj"]
- ã°ããŒãã« ãã¿ãŒã³ããã¹ãŠã®ãã£ã¬ã¯ããªãããã¹ãŠã® C# ãããžã§ã¯ããåéããŸããmetadata.src.exclude: ["*.tests*/**"]
- ã°ããŒãã« ãã¿ãŒã³ã次ã®ãã©ã«ããŒãããã¹ãŠãé€å€ããŸãã.tests
ååã«
å°èš
ãã®ãããªã·ã³ãã«ãªæ§æã¯ãããã XNUMX åãšã³ãŒã㌠XNUMX æ¯ã§äœæã§ããŸããããã«ãããã³ãŒãããã«ããããŠãã¹ãã«åæ Œããããšã確èªããããæ°ããããã±ãŒãžããã«ãããããããã¥ã¡ã³ããæŽæ°ããããçŸãããã®ã§ç®ã楜ããŸããããšãã§ããŸããåããŒãž ãªã¯ãšã¹ããšãšãã«ãããžã§ã¯ãã® README ã«ãããžãè¿œå ããããã¹ã¿ãŒã«éä¿¡ãããŸãã
æçµç㪠.gitlab-ci.yml
image: mcr.microsoft.com/dotnet/core/sdk:3.1
before_script:
- $PSVersionTable.PSVersion
- dotnet --version
- nuget help | select-string Version
stages:
- build
- test
- deploy
build job:
stage: build
script:
- dotnet build -c Release
tags:
- windows
only:
- merge_requests
- master
artifacts:
paths:
- your/path/to/binaries
test and cover job:
stage: test
tags:
- windows
script:
- dotnet test -c Release /p:CollectCoverage=true
coverage: /|s*Totals*|s*(d+[,.]d+%)/
only:
- merge_requests
- master
pack and deploy job:
stage: deploy
tags:
- windows
script:
- dotnet pack -c Release -o .
- dotnet new nugetconfig
- nuget sources add -name feedName -source https://pkgs.dev.azure.com/your-organization/_packaging/your-feed/nuget/v3/index.json -username your-organization -password $nugetFeedToken -configfile nuget.config -StorePasswordInClearText
- nuget push -source feedName -skipduplicate -apikey az *.nupkg
only:
- master
pages:
tags:
- windows
stage: deploy
script:
- nuget install docfx.console -version 2.51.0
- $env:path = "$env:path;$($(get-location).Path)"
- .docfx.console.2.51.0toolsdocfx.exe .docfxdocfx.json
artifacts:
paths:
- public
only:
- master
ãããžãšããã°
çµå±ã®ãšããããã¹ãŠã¯åœŒãã®ãããã§å§ãŸããŸããïŒ
ãã€ãã©ã€ã³ ã¹ããŒã¿ã¹ãšã³ãŒã ã«ãã¬ããžã瀺ããããžã¯ãGitLab ã® Gtntral ãã€ãã©ã€ã³ ãããã¯ã® CI/CD èšå®ã§å©çšã§ããŸãã
ãã©ãããã©ãŒã äžã®ããã¥ã¡ã³ããžã®ãªã³ã¯ãå«ããããžãäœæããŸãã
![ÐÑÐžÐŒÐµÑ Ñ Shields.io](https://img.shields.io/badge/custom-badge-blue)
Azure DevOps Artifacts ã䜿çšãããšãææ°ããŒãžã§ã³ã®ããã±ãŒãžã®ãããžãäœæããããšãã§ããŸãã ãããè¡ãã«ã¯ãAzure DevOps ãµã€ãã®ãœãŒã¹ã§ãéžæããããã±ãŒãžã® [ãããžã®äœæ] ãã¯ãªãã¯ããããŒã¯ããŠã³ ããŒã¯ã¢ãããã³ããŒããå¿ èŠããããŸãã
çŸãããå ãã
å ±éã®æ§æãã©ã°ã¡ã³ãã®åŒ·èª¿è¡šç€º
æ§æãäœæããããã¥ã¡ã³ããæ€çŽ¢ããŠãããšãã«ãYAML ã®èå³æ·±ãæ©èœãã€ãŸããã©ã°ã¡ã³ãã®åå©çšãçºèŠããŸããã
ã¿ã¹ã¯èšå®ãããããããã«ããã¹ãŠã®ã¿ã¹ã¯ã«ã¿ã°ãå¿
èŠã§ã windows
ã©ã³ããŒã§å®è¡ãããããŒãž ãªã¯ãšã¹ãããã¹ã¿ãŒã«éä¿¡ãŸãã¯äœæããããšãã«ããªã¬ãŒãããŸã (ããã¥ã¡ã³ããé€ã)ã ãããåå©çšãããã©ã°ã¡ã³ãã«è¿œå ããŸãããã
.common_tags: &common_tags
tags:
- windows
.common_only: &common_only
only:
- merge_requests
- master
ããã§ãã¿ã¹ã¯ã®èª¬æã§åã«å®£èšãããã©ã°ã¡ã³ããæ¿å ¥ã§ããããã«ãªããŸããã
build job:
<<: *common_tags
<<: *common_only
ã¿ã¹ã¯ãšããŠè§£éãããªãããã«ããã©ã°ã¡ã³ãåã¯ãããã§å§ãŸãå¿ èŠããããŸãã
ããã±ãŒãžã®ããŒãžã§ã³ç®¡ç
ããã±ãŒãžãäœæãããšããã³ã³ãã€ã©ã¯ã³ãã³ã ã©ã€ã³ ã¹ã€ããããã§ãã¯ããã³ãã³ã ã©ã€ã³ ã¹ã€ããããªãå Žåã¯ãããžã§ã¯ã ãã¡ã€ã«ããã§ãã¯ããŸãã Version ããŒããèŠã€ãããšããã®å€ããã«ãäžã®ããã±ãŒãžã®ããŒãžã§ã³ãšããŠåãåããŸãã æ°ããããŒãžã§ã³ã§ããã±ãŒãžããã«ãããã«ã¯ããããžã§ã¯ã ãã¡ã€ã«å ã§ããã±ãŒãžãæŽæ°ããããã³ãã³ã ã©ã€ã³åŒæ°ãšããŠæž¡ãå¿ èŠãããããšãããããŸããã
ãŠã£ãã·ã¥ãªã¹ãããã XNUMX ã€è¿œå ããŸããããããŒãžã§ã³å ã®ãã€ã㌠XNUMX ã€ã®æ°åãããã±ãŒãžã®å¹Žãšãã«ãæ¥ãšãããã¬ãªãªãŒã¹ ããŒãžã§ã³ãè¿œå ããŸãã ãã¡ããããã®ããŒã¿ããããžã§ã¯ã ãã¡ã€ã«ã«è¿œå ããŠãåéä¿¡åã«ãã§ãã¯ããããšãã§ããŸããããã€ãã©ã€ã³ã§å®è¡ããŠãã³ã³ããã¹ãããããã±ãŒãžã®ããŒãžã§ã³ãåéãããããã³ãã³ã ã©ã€ã³åŒæ°ãéããŠæž¡ãããšãã§ããŸãã
ã³ãããã¡ãã»ãŒãžã«æ¬¡ã®ãããªè¡ãå«ãŸããŠããå Žåã«åæããŸãããã release (v./ver./version) <version number> (rev./revision <revision>)?
次ã«ããã®è¡ããããã±ãŒãžã®ããŒãžã§ã³ãååŸããçŸåšã®æ¥ä»ãè£è¶³ããŠããããã³ãã³ãã®åŒæ°ãšããŠæž¡ããŸãã dotnet pack
ã ã©ã€ã³ããªãå Žåã¯ãè·ç©ã®ååã¯è¡ããŸããã
次ã®ã¹ã¯ãªããã¯ãã®åé¡ã解決ããŸãã
# ÑегÑлÑÑМПе вÑÑажеМОе ÐŽÐ»Ñ Ð¿ÐŸÐžÑка ÑÑÑПкО Ñ Ð²ÐµÑÑОей
$rx = "releases+(v.?|ver.?|version)s*(?<maj>d+)(?<min>.d+)?(?<rel>.d+)?s*((rev.?|revision)?s+(?<rev>[a-zA-Z0-9-_]+))?"
# ОÑеЌ ÑÑÑÐŸÐºÑ Ð² ÑППбÑеМОО кПЌЌОÑа, пеÑеЎаваеЌПЌ в ПЎМПй Оз пÑеЎПпÑеЎелÑеЌÑÑ
GitLab'ПЌ пеÑеЌеММÑÑ
$found = $env:CI_COMMIT_MESSAGE -match $rx
# ÑПвпаЎеМОй ÐœÐµÑ - вÑÑ
ПЎОЌ
if (!$found) { Write-Output "no release info found, aborting"; exit }
# ОзвлекаеЌ ЌажПÑÐœÑÑ Ðž ЌОМПÑÐœÑÑ Ð²ÐµÑÑОО
$maj = $matches['maj']
$min = $matches['min']
# еÑлО ÑÑÑПка ÑПЎеÑÐ¶ÐžÑ ÐœÐŸÐŒÐµÑ ÑелОза - ОÑпПлÑзÑеЌ егП, ОМаÑе - ÑекÑÑОй гПЎ
if ($matches.ContainsKey('rel')) { $rel = $matches['rel'] } else { $rel = ".$(get-date -format "yyyy")" }
# в каÑеÑÑве МПЌеÑа ÑбПÑкО - ÑекÑÑОе ЌеÑÑÑ Ðž ЎеМÑ
$bld = $(get-date -format "MMdd")
# еÑлО еÑÑÑ ÐŽÐ°ÐœÐœÑе пП пÑеÑелОзМПй веÑÑОО - вклÑÑаеЌ ОÑ
в веÑÑОÑ
if ($matches.ContainsKey('rev')) { $rev = "-$($matches['rev'])" } else { $rev = '' }
# ÑПбОÑаеЌ еЎОМÑÑ ÑÑÑÐŸÐºÑ Ð²ÐµÑÑОО
$version = "$maj$min$rel.$bld$rev"
# ÑПбОÑаеЌ пакеÑÑ
dotnet pack -c Release -o . /p:Version=$version
ã¿ã¹ã¯ãžã®ã¹ã¯ãªããã®è¿œå pack and deploy job
ãããŠãã³ããã ã¡ãã»ãŒãžã«æå®ãããæååãååšããå Žåã®ããã±ãŒãžã®ã¢ã»ã³ããªãå³å¯ã«èŠ³å¯ããŸãã
åèšã§
æ§æã®äœæãããŒã«ã« PowerShell ã§ã®ãããã°ããããŠå Žåã«ãã£ãŠã¯æ°åã®èµ·åã®å€±æã«çŽ XNUMX åãã XNUMX æéãè²»ãããåŸãæ¥åžžçãªã¿ã¹ã¯ãèªååããããã®ã·ã³ãã«ãªæ§æãååŸããŸããã
ãã¡ãããGitLab CI / CD ã¯ããã®ã¬ã€ããèªãã åŸã«æããããããã¯ããã«åºç¯å²ã§å€é¢çã§ãã
ã¢ããªã±ãŒã·ã§ã³ãèªåçã«æ€åºãæ§ç¯ããã¹ããå±éãç£èŠããŸã
çŸåšã®èšç»ã§ã¯ãPulumi ã䜿çšããŠã¿ãŒã²ããç°å¢ãèªåçã«æ±ºå®ããã¢ããªã±ãŒã·ã§ã³ã Azure ã«ãããã€ããããã®ãã€ãã©ã€ã³ãæ§æããäºå®ã§ããããã«ã€ããŠã¯æ¬¡ã®èšäºã§èª¬æããŸãã
åºæïŒ habr.com