เบ„เบนเปˆเบกเบทเบเปˆเบฝเบงเบเบฑเบš CI/CD เปƒเบ™ GitLab เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ (เป€เบเบทเบญเบš).

เบซเบผเบทเบงเบดเบ—เบตเบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบš badges เบ—เบตเปˆเบชเบงเบเบ‡เบฒเบกเบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปƒเบ™เบ•เบญเบ™เปเบฅเบ‡เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ‡เปˆเบฒเบ

เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™, เบ—เบธเบเป†เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบตเปˆเบกเบตเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบชเบฑเบ”เบฅเป‰เบฝเบ‡เปƒเบ™เบšเบฒเบ‡เบˆเบธเบ”เบกเบตเบญเบฒเบเบฒเบ™เบ„เบฑเบ™เบเปˆเบฝเบงเบเบฑเบš badges เบ—เบตเปˆเบชเบงเบเบ‡เบฒเบกเบ—เบตเปˆเบกเบตเบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบš, เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบฅเบฐเบซเบฑเบ”, เบชเบฐเบšเบฑเบšเบŠเบธเบ”เปƒเบ™ nuget ... เปเบฅเบฐเบญเบฒเบเบฒเบ™เบ„เบฑเบ™เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เป‰เบญเบเบ‚เบฝเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰. เปƒเบ™เบเบฒเบ™เบเบฐเบเบฝเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เบกเบฑเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบ‡เบฒเบกเบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒ:

เบ„เบนเปˆเบกเบทเบเปˆเบฝเบงเบเบฑเบš CI/CD เปƒเบ™ GitLab เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ (เป€เบเบทเบญเบš).

เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบˆเบฐเปเบ™เบฐเบ™เปเบฒเบ—เปˆเบฒเบ™เบœเปˆเบฒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เปเบฅเบฐเบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบŠเบฑเป‰เบ™ .Net Core เปƒเบ™ GitLab, เป€เบœเบตเบเปเบœเปˆเป€เบญเบเบฐเบชเบฒเบ™เป„เบ›เบเบฑเบ‡ GitLab Pages, เปเบฅเบฐเบเบฒเบ™เบŠเบธเบเบเบนเป‰เบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป€เบ›เบฑเบ™เบญเบฒเบซเบฒเบ™เบชเปˆเบงเบ™เบ•เบปเบงเปƒเบ™ Azure DevOps.

เบฅเบฐเบซเบฑเบ” VS เบ–เบทเบเปƒเบŠเป‰เป€เบ›เบฑเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ”เป‰เบงเบเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบ GitLab Workflow (เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบšเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ”เบเบเบปเบ‡เบˆเบฒเบเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ).

เปเบ™เบฐเบ™เปเบฒเป‚เบ”เบเบซเบเปเป‰

CD - เบกเบฑเบ™เปเบกเปˆเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆ pushed, เปเบฅเบฐเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป„เบ”เป‰เบซเบผเบธเบ”เบฅเบปเบ‡เปเบฅเป‰เบงเบเปˆเบฝเบงเบเบฑเบšเบฅเบนเบเบ„เป‰เบฒ?

CI / CD เปเบกเปˆเบ™เบซเบเบฑเบ‡เปเบฅเบฐเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™ - เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” google เบกเบฑเบ™เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ. เบŠเบญเบเบซเบฒเป€เบญเบเบฐเบชเบฒเบ™เบ„เบปเบšเบ–เป‰เบงเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เปเปˆเปƒเบ™ GitLab เบเบฑเบ‡เบ‡เปˆเบฒเบ. เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ‚เป‰เบญเบเบˆเบฐเบชเบฑเป‰เบ™เป†เปเบฅเบฐเบ–เป‰เบฒเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เป‚เบ”เบเบšเปเปˆเบกเบตเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบญเบฐเบ—เบดเบšเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ‚เบญเบ‡เบ™เบปเบเบŠเบฐเบ™เบดเบ”:

  • เบœเบนเป‰โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เบชเบปเปˆเบ‡โ€‹เบ„เปเบฒโ€‹เบซเบกเบฑเป‰เบ™โ€‹เบชเบฑเบ™โ€‹เบเบฒโ€‹เบเบฑเบš repositoryโ€‹, เบชเป‰เบฒเบ‡โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบฅเบงเบกโ€‹เป‚เบ”เบโ€‹เบœเปˆเบฒเบ™โ€‹เป€เบงเบฑเบšโ€‹เป„เบŠโ€‹เป„เบ”เป‰โ€‹, เบซเบผเบทเปƒเบ™เบ—เบฒเบ‡เบญเบทเปˆเบ™, เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™ เบซเบผเบท implicitly เป€เบฅเบตเปˆเบกเบ—เปเปˆ,
  • เบงเบฝเบโ€‹เบ‡เบฒเบ™โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เปเบกเปˆเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ„เบฑเบ”โ€‹เป€เบฅเบทเบญเบโ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹, เป€เบ‡เบทเปˆเบญเบ™โ€‹เป„เบ‚โ€‹เบ—เบตเปˆโ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เปƒเบซเป‰โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบ›เบตเบ”โ€‹เบ•เบปเบงโ€‹เปƒเบ™โ€‹เบชเบฐโ€‹เบžเบฒเบšโ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹,
  • เบงเบฝเบโ€‹เบ‡เบฒเบ™โ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบˆเบฑเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ•เบฒเบกโ€‹เป„เบฅโ€‹เบเบฐโ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹,
  • เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™ - i.e. เบ‚เบฐเบซเบ™เบฒเบ™ เบงเบฝเบโ€‹เบ‡เบฒเบ™โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ‚เบญเบ‡โ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹,
  • เบ–เป‰เบฒเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบฅเบปเป‰เบกเป€เบซเบฅเบง (i.e., เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เป€เบงเบ—เบตเบฅเบปเป‰เบกเป€เบซเบฅเบง), เบ—เปเปˆเบˆเบฐเบขเบธเบ” (.เป€เบเบทเบญเบšเบชเบฐเป€เบซเบกเบต),
  • เบ–เป‰เบฒเบ—เบธเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบœเบปเบ™, เบ—เปเปˆเบ™เบฑเป‰เบ™เบ–เบทเบงเปˆเบฒเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบกเบต:

  • pipeline - เบŠเบธเบ”เบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™เบ—เบตเปˆเบˆเบฑเบ”เป€เบ›เบฑเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡, เบ—เบปเบ”เบชเบญเบš, เบฅเบฐเบซเบฑเบ”เบŠเบธเบ”, เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบฎเบนเบšเบเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบŸเบฑเบ‡, เปเบฅเบฐเบญเบทเปˆเบ™เป†.
  • เป€เบงเบ—เบต (เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™) โ€” เบซเบ™เปˆเบงเบโ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹เบ—เปเปˆโ€‹, เบ›เบฐโ€‹เบเบญเบšโ€‹เบ”เป‰เบงเบ 1+ เบงเบฝเบโ€‹เบ‡เบฒเบ™โ€‹,
  • เบงเบฝเบเบ‡เบฒเบ™ (เบงเบฝเบโ€‹เป€เบฎเบฑเบ”โ€‹เบ‡เบฒเบ™โ€‹เบ—เปเบฒ) เป€เบ›เบฑเบ™เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบ—เปเปˆ. เบกเบฑเบ™เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบชเบฐเบ„เบฃเบดเบš (เบšเบฑเบ‡เบ„เบฑเบš), เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบœเบตเบเปเบœเปˆ / เบเบฒเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ›เบญเบก, เปเบฅเบฐเบญเบทเปˆเบ™เป†เบญเบตเบ.

เบ•เบฒเบกโ€‹เบ™เบฑเป‰เบ™โ€‹เปเบฅเป‰เบง, เบงเบฝเบโ€‹เบ‡เบฒเบ™โ€‹เป€เบกเบทเปˆเบญโ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบฑเป‰เบ‡ CI/CD เบฅเบปเบ‡โ€‹เบกเบฒโ€‹เปเบกเปˆเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบฑเป‰เบ‡โ€‹เปœเป‰เบฒโ€‹เบ—เบตเปˆโ€‹เบ›เบฐเบ•เบดเบšเบฑเบ”โ€‹เบšเบฑเบ™เบ”เบฒโ€‹เบเบฒเบ™โ€‹เบเบฐเบ—เบณโ€‹เบ—เบตเปˆโ€‹เบˆเบณโ€‹เป€เบ›เบฑเบ™โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบเปเปˆเบชเป‰เบฒเบ‡, เบ—เบปเบ”โ€‹เบชเบญเบš โ€‹เปเบฅเบฐ โ€‹เป€เบœเบตเบโ€‹เปเบœเปˆโ€‹เบšเบฑเบ™เบ”เบฒโ€‹เบ‚เปเป‰โ€‹เบเบณเบ™เบปเบ” โ€‹เปเบฅเบฐ เบงเบฑเบ”เบ–เบธโ€‹เบžเบฑเบ™.

เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™: เป€เบ›เบฑเบ™เบซเบเบฑเบ‡?

  • เป€เบ›เบฑเบ™เบซเบเบฑเบ‡ Gitlab?

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡ repositories เป€เบญเบเบฐเบŠเบปเบ™เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบชเบฑเบ”เบฅเป‰เบฝเบ‡, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบฎเบฑเบšเบ„เปˆเบฒเบˆเป‰เบฒเบ‡เปƒเบ™ GitHub, เปเบฅเบฐเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒ greedy. repositories เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบšเปเปˆเป€เบชเบเบ„เปˆเบฒ, เปเบ•เปˆเบกเบฒเบฎเบญเบ”เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ™เบตเป‰เบšเปเปˆเบกเบตเป€เบซเบ”เบœเบปเบ™เบžเบฝเบ‡เบžเปเบชเปเบฒเบฅเบฑเบšเบ‚เป‰เบญเบเบ—เบตเปˆเบˆเบฐเบเป‰เบฒเบเป„เบ› GitHub.

  • เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบšเปเปˆ Azure DevOps Pipelines?

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบกเปˆเบ™เบ›เบฐเบ–เบปเบก - เบ„เบงเบฒเบกเบฎเบนเป‰เบ‚เบญเบ‡เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เปเบกเปˆเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™. เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบเบฑเบšเบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™ git เบžเบฒเบเบ™เบญเบ - เปƒเบ™เบชเบญเบ‡เบชเบฒเบกเบ„เบฅเบดเบ, เบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบเบฐเปเบˆ SSH เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบเบฑเบš repository - เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™, เบ—เปเปˆเป„เบ”เป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป„เบ”เป‰เบ‡เปˆเบฒเบเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบšเปเปˆเป„เบ”เป‰เบกเบฒเบˆเบฒเบเปเบกเปˆเปเบšเบš.

เบ•เปเบฒเปเบซเบ™เปˆเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™: เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบกเบตเปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบกเบต:

  • repository เปƒเบ™ GitLab.

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™:

  • เบเบฒเบ™เบ›เบฐเบเบญเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบœเบฐเบชเบปเบกเบœเบฐเบชเบฒเบ™,
  • เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบŠเบธเบ”โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹เบเบฒเบ™โ€‹เบœเบฐโ€‹เบชเบปเบกโ€‹เบœเบฐโ€‹เบชเบฒเบ™โ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบ„เบปเบ™โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบŠเบธเบโ€‹เบเบนเป‰โ€‹เปƒเบซเป‰โ€‹เปเบกเปˆโ€‹เบšเบปเบ”โ€‹, เบชเบฐโ€‹เบซเบ™เบญเบ‡โ€‹เปƒเบซเป‰โ€‹เบงเปˆเบฒโ€‹เบกเบตโ€‹เป€เบชเบฑเป‰เบ™โ€‹เบชเบฐโ€‹เป€เบžเบฒเบฐโ€‹เปƒเบ”โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เปƒเบ™โ€‹เบ‚เปเป‰โ€‹เบ„เบงเบฒเบกโ€‹เบ„เปเบฒโ€‹เบซเบกเบฑเป‰เบ™โ€‹เบชเบฑเบ™โ€‹เบเบฒโ€‹,
  • เบเบฒเบ™เบชเบปเปˆเบ‡เบŠเบธเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป„เบ›เบซเบฒเบญเบฒเบซเบฒเบ™เบชเปˆเบงเบ™เบ•เบปเบงเปƒเบ™ Azure DevOps,
  • เบเบฒเบ™เบ›เบฐเบเบญเบšเป€เบญเบเบฐเบชเบฒเบ™เปเบฅเบฐเบเบฒเบ™เบžเบดเบกเป€เบœเบตเบเปเบœเปˆเปƒเบ™ GitLab Pages,
  • เบ›เป‰เบฒเบ!11

เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เป‚เบ”เบเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เปเปˆเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เบ‚เบฑเป‰เบ™เบ•เบญเบ™ 1 - เบชเบฐเบžเบฒเปเบซเปˆเบ‡
    • เบžเบงเบเป€เบฎเบปเบฒเป€เบเบฑเบšเบเปเบฒเบฅเบฐเบซเบฑเบ”, เป€เบœเบตเบเปเบœเปˆเป„เบŸเบฅเปŒเบœเบปเบ™เบœเบฐเบฅเบดเบ”เป€เบ›เบฑเบ™เบ›เบญเบก
  • เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ—เบต 2 - เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹
    • เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบชเบดเปˆเบ‡เบ›เบฐเบ”เบดเบ”เบˆเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡, เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบฅเบฐเบซเบฑเบ”
  • เบ‚เบฑเป‰เบ™เบ•เบญเบ™ 3 - เบชเบปเปˆเบ‡
    • เบงเบฝเบเบ—เบตเปˆ 1 - เบชเป‰เบฒเบ‡เบŠเบธเบ” nuget เปเบฅเบฐเบชเบปเปˆเบ‡เป„เบ›เบ—เบตเปˆ Azure DevOps
    • เบงเบฝเบเบ‡เบฒเบ™ 2 - เบžเบงเบเป€เบฎเบปเบฒเป€เบเบฑเบšเบเปเบฒเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบˆเบฒเบ xmldoc เปƒเบ™เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปเบฅเบฐเป€เบœเบตเบเปเบœเปˆเปƒเบ™ GitLab Pages

เปƒเบซเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™!

เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹

เบเบณเบฅเบฑเบ‡เบเบฐเบเบฝเบกเบšเบฑเบ™เบŠเบต

  1. เบชเป‰เบฒเบ‡เบšเบฑเบ™เบŠเบตเปƒเบ™ Microsoft Azure

  2. เป„เบ›โ€‹เบซเบฒ Azure DevOps

  3. เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เปƒเบซเบกเปˆ

    1. เบŠเบทเปˆ - เปƒเบ”
    2. เบเบฒเบ™เป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™ - เปƒเบ”
      เบ„เบนเปˆเบกเบทเบเปˆเบฝเบงเบเบฑเบš CI/CD เปƒเบ™ GitLab เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ (เป€เบเบทเบญเบš).

  4. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบ„เบฅเบดเบเปƒเบชเปˆเบ›เบธเปˆเบกเบชเป‰เบฒเบ‡, เป‚เบ„เบ‡เบเบฒเบ™เบˆเบฐเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เปเบฅเบฐเบ—เปˆเบฒเบ™เบˆเบฐเบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒเบซเบ™เป‰เบฒเบ‚เบญเบ‡เบกเบฑเบ™. เปƒเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบดเบ”เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป‚เบ”เบเบเบฒเบ™เป„เบ›เบ—เบตเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™ (เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ•เปˆเปเบฒเบเบงเปˆเบฒเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบฒเบ‡เบŠเป‰เบฒเบ -> เบžเบฒเบšเบฅเบงเบก -> Azure DevOps Services block)
    เบ„เบนเปˆเบกเบทเบเปˆเบฝเบงเบเบฑเบš CI/CD เปƒเบ™ GitLab เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ (เป€เบเบทเบญเบš).

  5. เป„เบ›เบ—เบตเปˆ Attrifacts, เบ„เบฅเบดเบ เบชเป‰เบฒเบ‡ feed

    1. เปƒเบชเปˆเบŠเบทเปˆเบ‚เบญเบ‡เปเบซเบผเปˆเบ‡
    2. เป€เบฅเบทเบญเบเบเบฒเบ™เป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™
    3. เบเบปเบเป€เบฅเบตเบเบเบฒเบ™เป€เบฅเบทเบญเบ เบฅเบงเบกเป€เบญเบปเบฒเปเบžเบฑเบเป€เบเบ”เบˆเบฒเบเปเบซเบผเปˆเบ‡เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเบ—เบปเปˆเบงเป„เบ›, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปเบซเบผเปˆเบ‡เบšเปเปˆเป„เบ”เป‰เบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ clone nuget dump
      เบ„เบนเปˆเบกเบทเบเปˆเบฝเบงเบเบฑเบš CI/CD เปƒเบ™ GitLab เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ (เป€เบเบทเบญเบš).

  6. เบเบปเบ” Connect to feed, เป€เบฅเบทเบญเบ Visual Studio, เบ„เบฑเบ”เบฅเบญเบเปเบซเบผเปˆเบ‡เบ—เบตเปˆเบกเบฒเบˆเบฒเบเบšเบฅเบฑเบญเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป€เบ„เบทเปˆเบญเบ‡
    เบ„เบนเปˆเบกเบทเบเปˆเบฝเบงเบเบฑเบš CI/CD เปƒเบ™ GitLab เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ (เป€เบเบทเบญเบš).

  7. เป„เบ›เบ—เบตเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบšเบฑเบ™เบŠเบต, เป€เบฅเบทเบญเบ Personal Access Token
    เบ„เบนเปˆเบกเบทเบเปˆเบฝเบงเบเบฑเบš CI/CD เปƒเบ™ GitLab เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ (เป€เบเบทเบญเบš).

  8. เบชเป‰เบฒเบ‡เป‚เบ—เป€เบ„เบฑเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เปƒเปเปˆ

    1. เบŠเบทเปˆ - เบกเบฑเบ
    2. เบญเบปเบ‡เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡ - เบ›เบฐเบˆเบธเบšเบฑเบ™
    3. เปƒเบŠเป‰เป„เบ”เป‰เบชเบนเบ‡เบชเบธเบ” 1 เบ›เบต
    4. เบ‚เบญเบšเป€เบ‚เบ” - เบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆ / เบญเปˆเบฒเบ™เปเบฅเบฐเบ‚เบฝเบ™
      เบ„เบนเปˆเบกเบทเบเปˆเบฝเบงเบเบฑเบš CI/CD เปƒเบ™ GitLab เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ (เป€เบเบทเบญเบš).

  9. เบชเบณเป€เบ™เบปเบฒ token เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™ - เบซเบผเบฑเบ‡เบˆเบฒเบเบ›เปˆเบญเบ‡เบขเป‰เบฝเบก modal เบ–เบทเบเบ›เบดเบ”, เบกเบนเบ™เบ„เปˆเบฒเบˆเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰

  10. เป„เบ›เบ—เบตเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ repository เปƒเบ™ GitLab, เป€เบฅเบทเบญเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ CI / CD
    เบ„เบนเปˆเบกเบทเบเปˆเบฝเบงเบเบฑเบš CI/CD เปƒเบ™ GitLab เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ (เป€เบเบทเบญเบš).

  11. เบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเปเบ›, เป€เบžเบตเปˆเบกเบญเบฑเบ™เปƒเปเปˆ

    1. เบŠเบทเปˆ - เปƒเบ”เป†เบ—เบตเปˆเบšเปเปˆเบกเบตเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡ (เบˆเบฐเบกเบตเบขเบนเปˆเปƒเบ™ shell เบ„เปเบฒเบชเบฑเปˆเบ‡)
    2. เบกเบนเบ™เบ„เปˆเบฒ - token เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบˆเบฒเบเบงเบฑเบ 9
    3. เป€เบฅเบทเบญเบเบ•เบปเบงเปเบ› Mask
      เบ„เบนเปˆเบกเบทเบเปˆเบฝเบงเบเบฑเบš CI/CD เปƒเบ™ GitLab เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ (เป€เบเบทเบญเบš).

เบ™เบตเป‰เป€เบฎเบฑเบ”เบชเปเบฒเป€เบฅเบฑเบ”เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเปˆเบญเบ™.

เบเบฒเบ™เบเบฐเบเบฝเบกเบเบญเบšเบเบฒเบ™เบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒ

เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ CI/CD เปƒเบ™ GitLab เปƒเบŠเป‰เป„เบŸเบฅเปŒ .gitlab-ci.yml เบˆเบฒเบเบฎเบฒเบเบ‚เบญเบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™. เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เป€เบชเบฑเป‰เบ™โ€‹เบ—เบฒเบ‡โ€‹เบ—เบตเปˆโ€‹เบ•เบปเบ™โ€‹เป€เบญเบ‡โ€‹เบ‚เบญเบ‡โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบ™เบตเป‰โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒ repositoryโ€‹, เปเบ•เปˆโ€‹เปƒเบ™โ€‹เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹เบ™เบตเป‰โ€‹เบกเบฑเบ™โ€‹เบšเปเปˆโ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹.

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบˆเบฒเบเบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ, เป„เบŸเบฅเปŒเบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบ™เบฎเบนเบšเปเบšเบš YAML. เป€เบญเบเบฐเบชเบฒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบงเปˆเบฒเบเบฐเปเบˆเปƒเบ”เบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบˆเบธเป„เบ”เป‰เปƒเบ™เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เปเบฅเบฐเปƒเบ™เปเบ•เปˆเบฅเบฐเบฅเบฐเบ”เบฑเบšเบ—เบตเปˆเบ•เบดเบ”เบเบฑเบ™.

เบ—เปเบฒเบญเบดเบ”, เปƒเบซเป‰เป€เบžเบตเปˆเบกเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบฎเบนเบšเบžเบฒเบš docker เปƒเบ™เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เปƒเบ™เบ—เบตเปˆเบงเบฝเบเบ‡เบฒเบ™เบ•เปˆเบฒเบ‡เป†เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เบชเปเบฒเบฅเบฑเบšเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบŠเบญเบเบซเบฒ เปœเป‰เบฒเบฎเบนเบšเบžเบฒเบšเบซเบผเบฑเบ .Net เปƒเบ™ Docker Hub. เบเบฒเบ™ GitHub เบกเบตเบ„เบนเปˆเบกเบทเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบˆเบฐเป€เบฅเบทเบญเบเป€เบญเบปเบฒเบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบกเบต .Net Core 3.1 เปเบกเปˆเบ™เป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฐเบฅเบธเบ™เบฒเป€เบžเบตเปˆเบกเปเบ–เบงเบ—เปเบฒเบญเบดเบ”เปƒเบชเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ.

image: mcr.microsoft.com/dotnet/core/sdk:3.1

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เป€เบกเบทเปˆเบญเบ—เปเปˆเบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเบˆเบฒเบเบšเปˆเบญเบ™เป€เบเบฑเบšเบฎเบนเบšเบžเบฒเบšเบ‚เบญเบ‡ Microsoft, เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบฅเบฐเบšเบธเบˆเบฐเบ–เบทเบเบ”เบฒเบงเป‚เบซเบฅเบ”, เป€เบŠเบดเปˆเบ‡เปƒเบ™เบซเบ™เป‰เบฒเบงเบฝเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฒเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เบเบฒเบ™เป€เบžเบตเปˆเบก เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™'s. เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, GitLab เบเปเบฒเบ™เบปเบ” 5 เบ‚เบฑเป‰เบ™เบ•เบญเบ™:

  • .pre - เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เป€เบ–เบดเบ‡โ€‹เบ—เบธเบโ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹,
  • .post - เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เป„เบฅโ€‹เบเบฐโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹,
  • build - เบ—เปเบฒเบญเบดเบ”เบซเบผเบฑเบ‡เบˆเบฒเบ .pre เป€เบงเบ—เบต,
  • test - เป„เบฅโ€‹เบเบฐโ€‹เบ—เบตโ€‹เบชเบญเบ‡โ€‹,
  • deploy - เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ—เบตโ€‹เบชเบฒเบกโ€‹.

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบ—เปˆเบฒเบ™เบˆเบฒเบเบเบฒเบ™เบ›เบฐเบเบฒเบ”เบžเบงเบเบกเบฑเบ™เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡. เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ–เบทเบเบฅเบฐเบšเบธเป„เบงเป‰เบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบชเบปเบกเบšเบนเบ™, เปƒเบซเป‰เบ•เบทเปˆเบกเปƒเบชเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ:

stages:
  - build
  - test
  - deploy

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ debugging, เบกเบฑเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเบงเบฝเบเบ‡เบฒเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เปƒเบซเป‰เป€เบžเบตเปˆเบกเบŠเบธเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบปเปˆเบงเป‚เบฅเบเบ—เบตเปˆเบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบงเบฝเบเปเบ•เปˆเบฅเบฐเบ„เบปเบ™ before_script:

before_script:
  - $PSVersionTable.PSVersion
  - dotnet --version
  - nuget help | select-string Version

เบกเบฑเบ™เบเบฑเบ‡เบ„เบปเบ‡เบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡เบซเบ™เป‰เบฒเบงเบฝเบเป€เบžเบทเปˆเบญเบงเปˆเบฒเป€เบกเบทเปˆเบญเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบ–เบทเบเบชเบปเปˆเบ‡, เบ—เปเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เบ•เบญเบ™เบ™เบตเป‰, เปƒเบซเป‰เป€เบžเบตเปˆเบกเปœเป‰เบฒเบงเบฝเบเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒเป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡:

dummy job:
  script:
    - echo ok

เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบš, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบงเปˆเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ”เบต, เบžเบงเบเป€เบฎเบปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบเบนเป‰, เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบŠเบ—เปŒ ... เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” script - 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

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบšเปเปˆโ€‹เป€เบ›เบฑเบ™โ€‹เบ›เบฐโ€‹เป‚เบซเบเบ”โ€‹เป‚เบ”เบโ€‹เบชเบฐโ€‹เป€เบžเบฒเบฐโ€‹เปเบกเปˆเบ™โ€‹, เปเบ•เปˆโ€‹เบขเปˆเบฒเบ‡โ€‹เปƒเบ”โ€‹เบเปโ€‹เบ•เบฒเบกโ€‹เบ—เปเปˆโ€‹เบ—เบตเปˆโ€‹เบ–เบทเบโ€‹เบ•เป‰เบญเบ‡โ€‹.

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ triggers

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เปƒเบ”เบซเบ™เบถเปˆเบ‡, เบ—เปเปˆเบˆเบฐ เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆ เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบธเบเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบ–เบทเบ pushed เบเบฑเบš repository. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบžเบถเบ”เบ•เบดเบเปเบฒเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบปเบงเบเบญเบ‡เบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบงเบฝเบเบ‡เบฒเบ™.

เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบ™เบชเบญเบ‡เบฎเบนเบšเปเบšเบš: เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™/เบเบปเบเป€เบงเบฑเป‰เบ™ ะธ เบเบปเบ”เบฅเบฐเบšเบฝเบš. เป‚เบ”เบเบซเบเปเป‰, only/except เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เป‚เบ”เบ triggers (merge_request, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡ - เบเปเบฒเบ™เบปเบ”เบงเบฝเบเบ‡เบฒเบ™เบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบธเบเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เปเบฅเบฐเบ—เบธเบเบ„เบฑเป‰เบ‡ commits เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบชเบฒเบ‚เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป merge) เปเบฅเบฐเบŠเบทเปˆเบชเบฒเบ‚เบฒ (เบฅเบงเบกเบ—เบฑเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด); rules เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบ›เบฑเบšเปเบ•เปˆเบ‡เบŠเบธเบ”เบ‚เบญเบ‡เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เปเบฅเบฐ, เบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบ›เปˆเบฝเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบฝเบเบ‡เบฒเบ™เป‚เบ”เบเบญเบตเบ‡เบ•เบฒเบกเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ (when เปƒเบ™ GitLab CI/CD).

เบ‚เปเปƒเบซเป‰เบˆเบทเปˆเบˆเปเบฒเบŠเบธเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™ - เบเบฒเบ™เบ›เบฐเบเบญเบšเปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบœเบฐเบชเบปเบกเบœเบฐเบชเบฒเบ™, เบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆเปเบฅเบฐเบเบฒเบ™เบชเบปเปˆเบ‡เบเบฑเบš Azure DevOps - เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบฅเบงเบกเปเบฅเบฐ pushes เบเบฑเบšเปเบกเปˆเบšเบปเบ”, เบเบฒเบ™เบœเบฐเบฅเบดเบ”เป€เบญเบเบฐเบชเบฒเบ™ - เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ pushes เบเบฑเบšเปเบกเปˆเบšเบปเบ”.

เบ—เปเบฒเบญเบดเบ”, เปƒเบซเป‰เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบงเบฝเบเบ‡เบฒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบกเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบตเปˆเป„เบŸเป„เบซเบกเป‰เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบฅเบงเบก:

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.

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบ›เบฐเบซเบเบฑเบ” Artifact

เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบงเบฝเบเบ‡เบฒเบ™ build job เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบˆเบฐโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบเปเปˆโ€‹เบชเป‰เบฒเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบ›เบญเบกโ€‹เบ—เบตเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ„เบทเบ™โ€‹เปƒเบซเบกเปˆโ€‹เปƒเบ™โ€‹เบงเบฝเบโ€‹เบ‡เบฒเบ™โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบžเบตเปˆเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบซเบ™เป‰เบฒเบงเบฝเบ, เป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบˆเบฐเบ•เป‰เบญเบ‡เบšเบฑเบ™เบ—เบถเบเปเบฅเบฐเปƒเบŠเป‰เบ„เบทเบ™เปƒเบซเบกเปˆเปƒเบ™เบซเบ™เป‰เบฒเบงเบฝเบเบ•เปเปˆเป„เบ›เบ™เบตเป‰, เป„เบ›เบซเบฒเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™. artifacts:

build job:
  # snip
  artifacts:
    paths:
      - path/to/build/artifacts
      - another/path
      - MyCoolLib.*/bin/Release/*

Paths เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ wildcards, เป€เบŠเบดเปˆเบ‡เปเบ™เปˆเบ™เบญเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ.

เบ–เป‰เบฒเบงเบฝเบเบ‡เบฒเบ™เบซเบ™เบถเปˆเบ‡เบชเป‰เบฒเบ‡เบชเบดเปˆเบ‡เบ›เบฐเบ”เบดเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปเบ•เปˆเบฅเบฐเบงเบฝเบเบ‡เบฒเบ™เบ•เปเปˆเบกเบฒเบˆเบฐเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบžเบงเบเบกเบฑเบ™เป„เบ”เป‰ - เบžเบงเบเบกเบฑเบ™เบˆเบฐเบ•เบฑเป‰เบ‡เบขเบนเปˆเบ•เบฒเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบฎเบฒเบเบ‚เบญเบ‡ repository เบ—เบตเปˆเป€เบเบฑเบšเบเปเบฒเบˆเบฒเบเบงเบฝเบเบ‡เบฒเบ™เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš. เบชเบดเปˆเบ‡เบ›เบฐเบ”เบดเบ”เบเบฑเบ‡เบกเบตเปƒเบซเป‰เบ”เบฒเบงเป‚เบซเบผเบ”เบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบŠ.

เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบเบญเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบžเป‰เบญเบก (เปเบฅเบฐเบ—เบปเบ”เบชเบญเบš), เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ‚เบฝเบ™ scripts เบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบ•เบปเบงเบˆเบดเบ‡.

เบžเบงเบเป€เบฎเบปเบฒเบ‚เบฝเบ™เบชเบฐเบ„เบดเบš

เบšเบฒเบ‡เบ—เบต, เปƒเบ™เบ„เบฑเป‰เบ‡เบซเบ™เบถเปˆเบ‡, เปƒเบ™ galaxy เป„เบ, เบซเปˆเบฒเบ‡เป„เบ, เป‚เบ„เบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ (เบฅเบงเบกเบ—เบฑเบ‡เบขเบนเปˆเปƒเบ™ .net) เบˆเบฒเบเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เปเบกเปˆเบ™เป€เบˆเบฑเบšเบ›เบงเบ”. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡, เบ—เบปเบ”เบชเบญเบšเปเบฅเบฐเป€เบœเบตเบเปเบœเปˆเป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™ 3 เบ—เบตเบก:

dotnet build
dotnet test
dotnet pack

เบ•เบฒเบกเบ—เปเบฒเบกเบฐเบŠเบฒเบ”, เบกเบตเบšเบฒเบ‡ nuances เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐ complicate เบ„เปเบฒเบชเบฑเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡.

  1. เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฒเบ™เบ›เปˆเบญเบ, เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡ debug, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป€เบžเบตเปˆเบกเปƒเบชเปˆเปเบ•เปˆเบฅเบฐเบ„เปเบฒเบชเบฑเปˆเบ‡ -c Release
  2. เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบฅเบฐเบซเบฑเบ”, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฅเบงเบกเป€เบญเบปเบฒเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš:
    1. เป€เบžเบตเปˆเบกเบŠเบธเบ”เปƒเบชเปˆเบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เบ—เบปเบ”เบชเบญเบšเบ—เบฑเบ‡เปเบปเบ” coverlet.msbuild: dotnet add package coverlet.msbuild เบˆเบฒเบเป‚เบŸเบ™เป€เบ”เบตเป‚เบ„เบ‡เบเบฒเบ™
    2. เป€เบžเบตเปˆเบกเปƒเบชเปˆเบ„เปเบฒเบชเบฑเปˆเบ‡เปเบฅเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš /p:CollectCoverage=true
    3. เป€เบžเบตเปˆเบกเบเบฐเปเบˆเปƒเบชเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปœเป‰เบฒเบงเบฝเบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบœเบปเบ™เบเบฒเบ™เบ„เบญเบšเบ„เบธเบก (เป€เบšเบดเปˆเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰)
  3. เป€เบกเบทเปˆเบญเบšเบฑเบ™เบˆเบธเบฅเบฐเบซเบฑเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบŠเบธเบ” nuget, เบเปเบฒเบ™เบปเบ”เบฅเบฒเบเบเบฒเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบชเปเบฒเบฅเบฑเบšเบŠเบธเบ”: -o .

เป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบฅเบฐเบซเบฑเบ”

เบซเบผเบฑเบ‡เบˆเบฒเบเปเบฅเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, Coverlet prints เปเบฅเปˆเบ™เบชเบฐเบ–เบดเบ•เบดเป„เบ›เบซเบฒ console:

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 เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบฅเบฐเบšเบธเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบฎเบฑเบšเบชเบฐเบ–เบดเบ•เบด, เป€เบŠเบดเปˆเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ badge. เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบœเบปเบ™เบ›เบปเบเบเบฐเบ•เบดเปเบกเปˆเบ™เบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปœเป‰เบฒเบงเบฝเบเบ”เป‰เบงเบเบ›เบธเปˆเบกเบเบปเบ” coverage; เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบœเบปเบ™เบ•เป‰เบญเบ‡เบกเบตเบเบธเปˆเบก capture, เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒ badge:

test and cover job:
  # snip
  coverage: /|s*Totals*|s*(d+[,.]d+%)/

เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบชเบฐเบ–เบดเบ•เบดเบˆเบฒเบเป€เบชเบฑเป‰เบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เป€เบชเบฑเป‰เบ™เบ—เบฑเบ‡เบซเบกเบปเบ”.

เป€เบœเบตเบเปเบœเปˆเปเบžเบฑเบเป€เบเบ” เปเบฅเบฐเป€เบญเบเบฐเบชเบฒเบ™

เบ—เบฑเบ‡เบชเบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบกเปˆเบ™เบเปเบฒเบ™เบปเบ”เบชเปเบฒเบฅเบฑเบšเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เบ—เปเปˆ - เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบเบฒเบ™เบ›เบฐเบเบญเบšเปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป„เบ”เป‰เบœเปˆเบฒเบ™เป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปเบšเปˆเบ‡เบ›เบฑเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบšเป‚เบฅเบ.

เบ—เปเบฒเบญเบดเบ”, เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบเบฒเบ™เป€เบœเบตเบเปเบœเปˆเบเบฑเบšเปเบซเบผเปˆเบ‡เบŠเบธเบ”:

  1. เบ–เป‰เบฒเป‚เบ„เบ‡เบเบฒเบ™เบšเปเปˆเบกเบตเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ nuget (nuget.config), เบชเป‰เบฒเบ‡เบญเบฑเบ™เปƒเบซเบกเปˆ: dotnet new nugetconfig

    เป€เบžเบทเปˆเบญโ€‹เบซเบเบฑเบ‡: เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เบญเบฒเบ”โ€‹เบˆเบฐโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบ‚เบฝเบ™โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป€เบ–เบดเบ‡โ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบ—เบปเปˆเบงโ€‹เป‚เบฅเบ (เบœเบนเป‰โ€‹เปƒเบŠเป‰โ€‹เปเบฅเบฐโ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹)โ€‹. เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบˆเบฑเบšเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”, เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบชเป‰เบฒเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปƒเบซเบกเปˆเปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบกเบฑเบ™.

  2. เบกเบฒเป€เบžเบตเปˆเบกเปเบซเบผเปˆเบ‡เปเบžเบฑเบเป€เบเบ”เปƒเปเปˆเปƒเบชเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - เบŠเบทเปˆเปเบซเบผเปˆเบ‡เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™, เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™
    2. url - URL เบ‚เบญเบ‡เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™ "เบเบฒเบ™เบเบฐเบเบฝเบกเบšเบฑเบ™เบŠเบต", เบซเบ™เป‰เบฒ 6
    3. organization - เบŠเบทเปˆเบญเบปเบ‡เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เปƒเบ™ Azure DevOps
    4. gitlab variable - เบŠเบทเปˆเบ‚เบญเบ‡เบ•เบปเบงเปเบ›เบ—เบตเปˆเบกเบต token เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ—เบตเปˆเป€เบžเบตเปˆเบกเปƒเบชเปˆ GitLab ("เบเบฒเบ™เบเบฐเบเบฝเบกเบšเบฑเบ™เบŠเบต", เบซเบ™เป‰เบฒ 11). เบ•เบฒเบกเบ—เปเบฒเบกเบฐเบŠเบฒเบ”, เปƒเบ™เบฎเบนเบšเปเบšเบš $variableName
    5. -StorePasswordInClearText - hack เป€เบžเบทเปˆเบญโ€‹เบ‚เป‰เบฒเบกโ€‹เบเบฒเบ™โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป€เบ–เบดเบ‡โ€‹เบ‚เปเป‰โ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เบ–เบทเบโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เป€เบชเบ” (เบ‚เป‰เบญเบเบšเปเปˆเปเบกเปˆเบ™เบ„เบปเบ™เบ—เบณเบญเบดเบ”เบ—เบตเปˆเบˆเบฐเบเป‰เบฒเบงเบ‚เบถเป‰เบ™เบ„เป‰เบญเบเบ™เบตเป‰)
    6. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”, เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบก -verbosity detailed
  3. เบเบฒเบ™เบชเบปเปˆเบ‡เบŠเบธเบ”เป„เบ›เบซเบฒเปเบซเบผเปˆเบ‡: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. เบžเบงเบเป€เบฎเบปเบฒเบชเบปเปˆเบ‡เบŠเบธเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ›เบฐเบˆเบธเบšเบฑเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ *.nupkg.
    2. name - เบˆเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡.
    3. key - เบชเบฒเบเปƒเบ”. เปƒเบ™ Azure DevOps, เบขเบนเปˆเปƒเบ™เบ›เปˆเบญเบ‡เบขเป‰เบฝเบก Connect to feed, เบ•เบปเบงเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เป€เบชเบฑเป‰เบ™เบชเบฐเป€เบซเบกเบต az.
    4. -skipduplicate - เป€เบกเบทเปˆเบญเบžเบฐเบเบฒเบเบฒเบกเบชเบปเปˆเบ‡เบŠเบธเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฐเปเบˆเบ™เบตเป‰, เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบกเบฒเบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ” 409 Conflict; เบ”เป‰เบงเบเบเบฐเปเบˆ, เบเบฒเบ™เบชเบปเปˆเบ‡เบˆเบฐเบ–เบทเบเบ‚เป‰เบฒเบกเป„เบ›.

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบชเป‰เบฒเบ‡เป€เบญเบเบฐเบชเบฒเบ™:

  1. เบ—เปเบฒเบญเบดเบ”, เปƒเบ™ repository, เปƒเบ™เบชเบฒเบ‚เบฒเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš, เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป‚เบ„เบ‡เบเบฒเบ™ docfx. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบˆเบฒเบเบฎเบฒเบ docfx init เปเบฅเบฐเป‚เบ•เป‰เบ•เบญเบšเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เป€เบญเบเบฐเบชเบฒเบ™. เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ•เปเบฒเปˆเบชเบธเบ”เบ—เบตเปˆ เบ—เบตเปˆเบ™เบตเป‰.
    1. เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒ, เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐเบฅเบฐเบšเบธเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบœเบปเบ™เบœเบฐเบฅเบดเบ” ..public - GitLab เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฐเป€เบญเบปเบฒเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เป‚เบŸเบ™เป€เบ”เบตเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเบขเบนเปˆเปƒเบ™เบฎเบฒเบเบ‚เบญเบ‡ repository เป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เบชเปเบฒเบฅเบฑเบš Pages. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ”เบฑเปˆเบ‡โ€‹เบเปˆเบฒเบงโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เป‚เบŸเบ™โ€‹เป€เบ”เบตโ€‹เบ—เบตเปˆโ€‹เบ•เบฑเป‰เบ‡โ€‹เบขเบนเปˆโ€‹เปƒเบ™ repository - เป€เบžเบตเปˆเบกโ€‹เบœเบปเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบ”เบฑเบšโ€‹เบ‚เบถเป‰เบ™โ€‹เปƒเบ™โ€‹เป€เบชเบฑเป‰เบ™โ€‹เบ—เบฒเบ‡โ€‹.
  2. เปƒเบซเป‰เบŠเบธเบเบเบนเป‰เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบเบฑเบš GitLab.
  3. เป€เบžเบตเปˆเบกเปœเป‰เบฒเบงเบฝเบเปƒเบชเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เปเปˆ pages (เบ„เปเบฒเบชเบฐเบซเบ‡เบงเบ™เป„เบงเป‰เบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบเบฒเบ™เป€เบœเบตเบเปเบœเปˆเป€เบงเบฑเบšเป„เบŠเบ—เปŒเปƒเบ™ GitLab Pages):
    1. เบชเบฐเบ„เบฃเบดเบš:
      1. nuget install docfx.console -version 2.51.0 - เบ•เบดเบ”เบ•เบฑเป‰เบ‡ docfx; เบชเบฐเบšเบฑเบšเป„เบ”เป‰เบ–เบทเบเบฅเบฐเบšเบธเป€เบžเบทเปˆเบญเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบ–เบทเบเบ•เป‰เบญเบ‡.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™โ€‹
    2. Node artifacts:

pages:
  # snip
  artifacts:
    paths:
      - public

เบเบฒเบ™เบซเบเปเป‰เบ—เปเป‰เบ‚เบญเบ‡เป€เบ™เบทเป‰เบญเป€เบžเบ‡เบเปˆเบฝเบงเบเบฑเบš docfx

เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เป€เบกเบทเปˆเบญเบ•เบฑเป‰เบ‡เป‚เบ„เบ‡เบเบฒเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบฅเบฐเบšเบธเปเบซเบผเปˆเบ‡เบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบšเป€เบญเบเบฐเบชเบฒเบ™เป€เบ›เบฑเบ™เป„เบŸเบฅเปŒเบเบฒเบ™เปเบเป‰เป„เบ‚. เบ‚เปเป‰เป€เบชเบเบ›เบฝเบšเบ•เบปเป‰เบ™เบ•เปเปเบกเปˆเบ™เบงเปˆเบฒเป€เบญเบเบฐเบชเบฒเบ™เบเบฑเบ‡เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš. เปƒเบ™โ€‹เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹เบ™เบตเป‰โ€‹เบšเปเปˆโ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹, เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบ„เปˆเบฒโ€‹เบ™เบตเป‰โ€‹เบเบฑเบš node เป„เบ”เป‰โ€‹ metadata.src:

{
  "metadata": [
    {
      "src": [
        {
          "src": "../",
          "files": [
            "**/*.csproj"
          ],
          "exclude":[
            "*.tests*/**"
          ]
        }
      ],
      // --- snip ---
    },
    // --- snip ---
  ],
  // --- snip ---
}

  1. metadata.src.src: "../" - เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบ”เบฑเบšโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบชเบฐโ€‹เบ–เบฒเบ™โ€‹เบ—เบตเปˆโ€‹ docfx.json, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ เปƒเบ™โ€‹เบฎเบนเบšโ€‹เปเบšเบšโ€‹, เบเบฒเบ™โ€‹เบŠเบญเบโ€‹เบซเบฒโ€‹เบ•เบปเป‰เบ™โ€‹เป„เบกเป‰โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹.
  2. metadata.src.files: ["**/*.csproj"] - เบฎเบนเบšเปเบšเบšเบ—เบปเปˆเบงเป‚เบฅเบ, เบžเบงเบเป€เบฎเบปเบฒเป€เบเบฑเบšเบเปเบฒเป‚เบ„เบ‡เบเบฒเบ™ C # เบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบฑเบ‡เบซเบกเบปเบ”.
  3. metadata.src.exclude: ["*.tests*/**"] - เบฎเบนเบšเปเบšเบšเบ—เบปเปˆเบงเป‚เบฅเบ, เบเบปเบเป€เบงเบฑเป‰เบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฒเบเป‚เบŸเบ™เป€เบ”เบตเบ—เบตเปˆเบกเบต .tests เปƒเบ™เบซเบปเบงเบ‚เปเป‰

Subtotal

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป„เบ”เป‰เปƒเบ™เป€เบงเบฅเบฒเบžเบฝเบ‡เปเบ•เปˆเป€เบ„เบดเปˆเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡เปเบฅเบฐเบชเบญเบ‡เบชเบฒเบกเบˆเบญเบเบเบฒเป€เบŸ, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบœเปˆเบฒเบ™, เบชเป‰เบฒเบ‡เบŠเบธเบ”เปƒเบซเบกเปˆ, เบ›เบฑเบšเบ›เบธเบ‡เป€เบญเบเบฐเบชเบฒเบ™เปเบฅเบฐเบเบฐเบฅเบธเบ™เบฒเบ•เบฒเบ—เบตเปˆเบชเบงเบเบ‡เบฒเบก. badges เปƒเบ™ 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 เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ CI/CD เปƒเบ™เบšเบฅเบฑเบญเบเบ—เปเปˆ Gtntral:

เบ„เบนเปˆเบกเบทเบเปˆเบฝเบงเบเบฑเบš CI/CD เปƒเบ™ GitLab เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ (เป€เบเบทเบญเบš).

เบ‚เป‰เบญเบเบชเป‰เบฒเบ‡เบ›เป‰เบฒเบเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป€เบญเบเบฐเบชเบฒเบ™เปƒเบ™เป€เบงเบ—เบต shields.io - เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบเบปเบ‡เป„เบ›เบเบปเบ‡เบกเบฒเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบ›เป‰เบฒเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเบกเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป.

![ะŸั€ะธะผะตั€ ั Shields.io](https://img.shields.io/badge/custom-badge-blue)

เบ„เบนเปˆเบกเบทเบเปˆเบฝเบงเบเบฑเบš CI/CD เปƒเบ™ GitLab เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ (เป€เบเบทเบญเบš).

Azure DevOps Artifacts เบเบฑเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡ badges เบชเปเบฒเบฅเบฑเบšเปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบกเบตเบชเบฐเบšเบฑเบšเบซเบฅเป‰เบฒเบชเบธเบ”. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เปƒเบ™เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบŠเบ—เปŒ Azure DevOps, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ„เบฅเบดเบเปƒเบชเปˆ เบชเป‰เบฒเบ‡ badge เบชเปเบฒเบฅเบฑเบšเบŠเบธเบ”เบ—เบตเปˆเป€เบฅเบทเบญเบเปเบฅเบฐเบ„เบฑเบ”เบฅเบญเบ markup markup:

เบ„เบนเปˆเบกเบทเบเปˆเบฝเบงเบเบฑเบš CI/CD เปƒเบ™ GitLab เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ (เป€เบเบทเบญเบš).

เบ„เบนเปˆเบกเบทเบเปˆเบฝเบงเบเบฑเบš CI/CD เปƒเบ™ GitLab เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ (เป€เบเบทเบญเบš).

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ‡เบฒเบก

เป€เบ™เบฑเป‰เบ™เปƒเบชเปˆเบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบปเปˆเบงเป„เบ›

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ‚เบฝเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบฅเบฐเบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบœเปˆเบฒเบ™เป€เบญเบเบฐเบชเบฒเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบžเบปเบšเป€เบซเบฑเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบ‚เบญเบ‡ YAML - reusing fragments .

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบˆเบฒเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบซเบ™เป‰เบฒเบงเบฝเบ, เบžเบงเบเป€เบ‚เบปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ•เป‰เบญเบ‡เบเบฒเบ™เปเบ—เบฑเบ windows เบขเบนเปˆเบ—เบตเปˆเบ•เบปเบงเปเบฅเปˆเบ™, เปเบฅเบฐเบ–เบทเบเบเบฐเบ•เบธเป‰เบ™เป€เบกเบทเปˆเบญเบกเบตเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบฅเบงเบกเบเบฑเบ™เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเปเบกเปˆเบšเบปเบ” / เบชเป‰เบฒเบ‡ (เบเบปเบเป€เบงเบฑเป‰เบ™เป€เบญเบเบฐเบชเบฒเบ™). เปƒเบซเป‰เป€เบžเบตเปˆเบกเบ™เบตเป‰เปƒเบชเปˆเบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰เบ„เบทเบ™:

.common_tags: &common_tags
  tags:
    - windows
.common_only: &common_only
  only:
    - merge_requests
    - master

เปเบฅเบฐเบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปƒเบชเปˆเบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบ—เบตเปˆเบ›เบฐเบเบฒเบ”เป„เบงเป‰เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เปƒเบ™เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบซเบ™เป‰เบฒเบงเบฝเบ:

build job:
  <<: *common_tags
  <<: *common_only

เบŠเบทเปˆเบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบ•เป‰เบญเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบˆเบธเบ”, เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบ–เบทเบเบ•เบตเบ„เบงเบฒเบกเปเบฒเบเบงเปˆเบฒเป€เบ›เบฑเบ™เปœเป‰เบฒเบงเบฝเบ.

เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบžเบฑเบเป€เบเบ”

เป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡เบŠเบธเบ”, compiler เบเบงเบ”เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡, เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบšเปเปˆเบกเบต, เป„เบŸเบฅเปŒเป‚เบ„เบ‡เบเบฒเบ™; เป€เบกเบทเปˆเบญเบกเบฑเบ™เบžเบปเบšเป€เบงเบตเบŠเบฑเปˆเบ™ node, เบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบกเบฑเบ™เป€เบ—เบปเปˆเบฒเบเบฑเบšเป€เบงเบตเบŠเบฑเบ™เบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™. เบกเบฑเบ™เบ›เบฐเบเบปเบ”เบงเปˆเบฒเป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบŠเบธเบ”เบ—เบตเปˆเบกเบตเบฎเบธเปˆเบ™เปƒเบซเบกเปˆ, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ›เบฑเบšเบ›เบธเบ‡เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เป„เบŸเบฅเปŒเป‚เบ„เบ‡เบเบฒเบ™เบซเบผเบทเบœเปˆเบฒเบ™เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡.

เบ‚เปเปƒเบซเป‰เป€เบžเบตเปˆเบกเบฅเบฒเบเบเบฒเบ™เบ—เบตเปˆเบขเบฒเบเป„เบ”เป‰เบญเบตเบเบญเบฑเบ™เปœเบถเปˆเบ‡ - เปƒเบซเป‰เบ•เบปเบงเป€เบฅเบเบ™เป‰เบญเบเบชเบญเบ‡เบ•เบปเบงเป€เบฅเบเปƒเบ™เบฎเบธเปˆเบ™เป€เบ›เบฑเบ™เบ›เบต เปเบฅเบฐเบงเบฑเบ™เบ—เบตเบชเป‰เบฒเบ‡เบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ”, เปเบฅเบฐเป€เบžเบตเปˆเบกเป€เบงเบตเบŠเบฑเบ™เบ—เบตเปˆเบ›เปˆเบญเบเบญเบญเบเบกเบฒเบเปˆเบญเบ™. เปเบ™เปˆเบ™เบญเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป„เบŸเบฅเปŒเป‚เบ„เบ‡เบเบฒเบ™เปเบฅเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡ - เปเบ•เปˆเบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ—เปเปˆ, เป€เบเบฑเบšเบเปเบฒเบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบŠเบธเบ”เบˆเบฒเบเบชเบฐเบžเบฒเบšเบเบฒเบ™เปเบฅเบฐเบœเปˆเบฒเบ™เบกเบฑเบ™เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡.

เปƒเบซเป‰เบ‚เบญเบ‡เบ•เบปเบเบฅเบปเบ‡เบเบฑเบ™เบงเปˆเบฒเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเป€เบชเบฑเป‰เบ™เบ„เป‰เบฒเบเบ„เบท 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 เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปเบฅเบฐ, เบšเบฒเบ‡เบ—เบต, เบชเบญเบ‡เบชเบฒเบกเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบšเปเปˆเบชเปเบฒเป€เบฅเบฑเบ”, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‡เปˆเบฒเบเป†เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบงเบฝเบเบ‡เบฒเบ™เบ›เบปเบเบเบฐเบ•เบดเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”.

เปเบ™เปˆเบ™เบญเบ™, GitLab CI / CD เปเบกเปˆเบ™เบเบงเป‰เบฒเบ‡เบ‚เบงเบฒเบ‡เปเบฅเบฐเบซเบผเบฒเบเบฎเบนเบšเปเบšเบšเบซเบผเบฒเบเบเปˆเบงเบฒเบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบญเปˆเบฒเบ™เบ„เบนเปˆเบกเบทเบ™เบตเป‰ - เบ™เบฑเป‰เบ™เบšเปเปˆเปเบกเปˆเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เป€เบฅเบตเบ. เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™ Auto DevOps เปเบกเปˆเบ™เบญเบฐเบ™เบธเบเบฒเบ”

เบเบงเบ”เบซเบฒ, เบชเป‰เบฒเบ‡, เบ—เบปเบ”เบชเบญเบš, เบ™เบณเปƒเบŠเป‰, เปเบฅเบฐเบ•เบดเบ”เบ•เบฒเบกเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปเบœเบ™เบเบฒเบ™เปเบกเปˆเบ™เบˆเบฐเบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒเบ—เปเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบเบฑเบš Azure, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Pulumi เปเบฅเบฐเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบเบงเบกเป€เบญเบปเบฒเปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ•เปเปˆเป„เบ›.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™