(เชฒเช—เชญเช—) เชธเช‚เชชเซ‚เชฐเซเชฃ เชถเชฟเช–เชพเช‰ เชฎเชพเชฃเชธ เชฎเชพเชŸเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ CI/CD เชฎเชพเชŸเซ‡เชจเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

เช…เชฅเชตเชพ เชธเชฐเชณ เช•เซ‹เชกเชฟเช‚เช—เชจเซ€ เชเช• เชธเชพเช‚เชœเซ‡ เชคเชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เชธเซเช‚เชฆเชฐ เชฌเซ‡เชœ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ€

เชธเช‚เชญเชตเชคเชƒ, เชฆเชฐเซ‡เช• เชกเซ‡เชตเชฒเชชเชฐ เช•เซ‡ เชœเซ‡เชฎเชจเซ€ เชชเชพเชธเซ‡ เช•เซ‹เชˆเช• เชธเชฎเชฏเซ‡ เช“เช›เชพเชฎเชพเช‚ เช“เช›เซเช‚ เชเช• เชชเชพเชฒเชคเซ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช›เซ‡, เชคเซ‡ เชธเซเชฅเชฟเชคเชฟเช“, เช•เซ‹เชก เช•เชตเชฐเซ‡เชœ, เชจเซเชฏเซเช—เซ‡เชŸเชฎเชพเช‚ เชชเซ‡เช•เซ‡เชœ เชธเช‚เชธเซเช•เชฐเชฃเซ‹ เชธเชพเชฅเซ‡เชจเชพ เชธเซเช‚เชฆเชฐ เชฌเซ‡เชœเซ‡เชธ เชตเชฟเชถเซ‡ เช–เช‚เชœเชตเชพเชณ เชงเชฐเชพเชตเซ‡ เช›เซ‡ ... เช…เชจเซ‡ เช† เช–เช‚เชœเชตเชพเชณ เชฎเชจเซ‡ เช† เชฒเซ‡เช– เชฒเช–เชตเชพ เชคเชฐเชซ เชฆเซ‹เชฐเซ€ เชœเชพเชฏ เช›เซ‡. เชคเซ‡เชจเซ‡ เชฒเช–เชตเชพเชจเซ€ เชคเซˆเชฏเชพเชฐเซ€เชฎเชพเช‚, เชฎเชจเซ‡ เชฎเชพเชฐเชพ เชเช• เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เช† เชธเซเช‚เชฆเชฐเชคเชพ เชฎเชณเซ€:

(เชฒเช—เชญเช—) เชธเช‚เชชเซ‚เชฐเซเชฃ เชถเชฟเช–เชพเช‰ เชฎเชพเชฃเชธ เชฎเชพเชŸเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ CI/CD เชฎเชพเชŸเซ‡เชจเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

เช† เชฒเซ‡เช– เชคเชฎเชจเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ .เชจเซ‡เชŸ เช•เซ‹เชฐ เช•เซเชฒเชพเชธ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ เช…เชจเซ‡ เชกเชฟเชฒเชฟเชตเชฐเซ€เชจเชพ เชฎเซ‚เชณเชญเซ‚เชค เชธเซ‡เชŸเช…เชช, เช—เชฟเชŸเชฒเซ‡เชฌ เชชเซƒเชทเซเช เซ‹ เชชเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเชตเชพ เช…เชจเซ‡ Azure DevOps เชฎเชพเช‚ เช–เชพเชจเช—เซ€ เชซเซ€เชกเชฎเชพเช‚ เชฌเชฟเชฒเซเชŸ เชชเซ‡เช•เซ‡เชœเซ‹เชจเซ‡ เชฆเชฌเชพเชฃ เช•เชฐเชตเชพ เชตเชฟเชถเซ‡ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชจ เช†เชชเชถเซ‡.

VS เช•เซ‹เชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ เชธเชพเชฅเซ‡ เชตเชฟเช•เชพเชธ เชตเชพเชคเชพเชตเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹ GitLab เชตเชฐเซเช•เชซเซเชฒเซ‹ (เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เชเชจเซเชตเชพเชฏเชฐเซเชจเชฎเซ‡เชจเซเชŸเชฎเชพเช‚เชฅเซ€ เชธเซ€เชงเชพ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชซเชพเช‡เชฒเชจเซ‡ เชฎเชพเชจเซเชฏ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡).

เชธเช‚เช•เซเชทเชฟเชชเซเชค เชชเชฐเชฟเชšเชฏ

เชธเซ€เชกเซ€ - เชถเซเช‚ เชคเซ‡ เช›เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชนเชฎเชฃเชพเช‚ เชœ เชฆเชฌเชพเชฃ เช•เชฐเซเชฏเซเช‚, เช…เชจเซ‡ เชฌเชงเซเช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช•เซเชฒเชพเชฏเช‚เชŸ เชชเชฐ เช†เชตเซ€ เช—เชฏเซเช‚ เช›เซ‡?

CI/CD เชถเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชคเชฎเชจเซ‡ เชคเซ‡เชจเซ€ เชถเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐ เช›เซ‡ - เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ เช—เซ‚เช—เชฒ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. GitLab เชฎเชพเช‚ เชชเชพเชˆเชชเชฒเชพเชˆเชจ เช—เซ‹เช เชตเชตเชพ เชชเชฐ เชธเช‚เชชเซ‚เชฐเซเชฃ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹ เชถเซ‹เชงเซ‹ เชชเชฃ เชธเชฐเชณ. เช…เชนเซ€เช‚ เชนเซเช‚ เชธเช‚เช•เซเชทเชฟเชชเซเชคเชฎเชพเช‚ เช…เชจเซ‡, เชœเซ‹ เชถเช•เซเชฏ เชนเซ‹เชฏ เชคเซ‹, เชชเช•เซเชทเซ€เช“เชจเซ€ เช†เช‚เช–เชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€ เชธเชฟเชธเซเชŸเชฎเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชญเซ‚เชฒเซ‹ เชตเชฟเชจเชพ เชตเชฐเซเชฃเชตเซ€เชถ:

  • เชกเซ‡เชตเชฒเชชเชฐ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ‡ เช•เชฎเชฟเชŸ เชฎเซ‹เช•เชฒเซ‡ เช›เซ‡, เชธเชพเช‡เชŸ เชฆเซเชตเชพเชฐเชพ เชฎเชฐเซเชœ เชตเชฟเชจเช‚เชคเซ€ เชฌเชจเชพเชตเซ‡ เช›เซ‡, เช…เชฅเชตเชพ เช…เชจเซเชฏ เช•เซ‹เชˆ เชฐเซ€เชคเซ‡, เชธเซเชชเชทเซเชŸ เช…เชฅเชตเชพ เช—เชฐเซเชญเชฟเชค เชฐเซ€เชคเซ‡ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡,
  • เชฌเชงเชพ เช•เชพเชฐเซเชฏเซ‹ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚เชฅเซ€ เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡เชจเซ€ เชถเชฐเชคเซ‹ เชคเซ‡เชฎเชจเซ‡ เช†เชชเซ‡เชฒ เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚ เชถเชฐเซ‚ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡,
  • เช•เชพเชฐเซเชฏเซ‹ เชคเซ‡เชฎเชจเชพ เชคเชฌเช•เซเช•เชพเช“ เช…เชจเซเชธเชพเชฐ เช—เซ‹เช เชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡,
  • เชคเชฌเช•เซเช•เชพเช“ เชฌเชฆเชฒเชพเชฎเชพเช‚ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ - เชเชŸเชฒเซ‡ เช•เซ‡ เชธเชฎเชพเช‚เชคเชฐ เช† เชคเชฌเช•เซเช•เชพเชจเชพ เชคเชฎเชพเชฎ เช•เชพเชฐเซเชฏเซ‹ เชชเซ‚เชฐเซเชฃ เชฅเชฏเชพ เช›เซ‡,
  • เชœเซ‹ เชธเซเชŸเซ‡เชœ เชจเชฟเชทเซเชซเชณ เชœเชพเชฏ (เชเชŸเชฒเซ‡ โ€‹โ€‹โ€‹โ€‹เช•เซ‡, เชธเซเชŸเซ‡เชœเชจเซเช‚ เช“เช›เชพเชฎเชพเช‚ เช“เช›เซเช‚ เชเช• เช•เชพเชฐเซเชฏ เชจเชฟเชทเซเชซเชณ เชœเชพเชฏ), เชคเซ‹ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เช…เชŸเช•เซ€ เชœเชพเชฏ เช›เซ‡ (เชฎเซ‹เชŸเซ‡ เชญเชพเช—เซ‡ เชนเช‚เชฎเซ‡เชถเชพ),
  • เชœเซ‹ เชคเชฎเชพเชฎ เชคเชฌเช•เซเช•เชพเช“ เชธเชซเชณเชคเชพเชชเซ‚เชฐเซเชตเช• เชชเซ‚เชฐเซเชฃ เชฅเชพเชฏ, เชคเซ‹ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชธเชซเชณ เช—เชฃเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เช†เชฎ, เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช›เซ‡:

  • เชชเชพเช‡เชชเชฒเชพเช‡เชจ - เชคเชฌเช•เซเช•เชพเชฎเชพเช‚ เช—เซ‹เช เชตเชพเชฏเซ‡เชฒเชพ เช•เชพเชฐเซเชฏเซ‹เชจเซ‹ เชธเชฎเซ‚เชน เชœเซ‡เชฎเชพเช‚ เชคเชฎเซ‡ เชฌเชฟเชฒเซเชก เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชชเซ‡เช•เซ‡เชœ เช•เซ‹เชก เชฌเชจเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹, เช•เซเชฒเชพเช‰เชก เชธเซ‡เชตเชพเชฎเชพเช‚ เชธเชฎเชพเชชเซเชค เชฌเชฟเชฒเซเชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชตเช—เซ‡เชฐเซ‡.
  • เชธเซเชŸเซ‡เชœ (เชฎเช‚เชš) โ€” เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชธเช‚เชธเซเชฅเชพ เชเช•เชฎ, 1+ เช•เชพเชฐเซเชฏ เชธเชฎเชพเชตเซ‡ เช›เซ‡,
  • เช•เชพเชฐเซเชฏ (เช•เชพเชฎ) เช เชชเชพเช‡เชชเชฒเชพเช‡เชจเชฎเชพเช‚ เช•เชพเชฎเชจเซเช‚ เชเช• เชเช•เชฎ เช›เซ‡. เชคเซ‡เชฎเชพเช‚ เชธเซเช•เซเชฐเชฟเชชเซเชŸ (เชซเชฐเชœเชฟเชฏเชพเชค), เชฒเซ‹เช‚เชšเชจเซ€ เชถเชฐเชคเซ‹, เช•เชฒเชพเช•เซƒเชคเชฟเช“ เชชเซเชฐเช•เชพเชถเชฟเชค/เช•เซ‡เชถ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เช…เชจเซ‡ เช˜เชฃเซเช‚ เชฌเชงเซเช‚ เชนเซ‹เชฏ เช›เซ‡.

เชคเชฆเชจเซเชธเชพเชฐ, CI / CD เชธเซ‡เชŸ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช•เชพเชฐเซเชฏ เช เช•เชพเชฐเซเชฏเซ‹เชจเซ‹ เชธเชฎเซ‚เชน เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชจเซ€เชšเซ‡ เช†เชตเซ‡ เช›เซ‡ เชœเซ‡ เช•เซ‹เชก เช…เชจเซ‡ เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸเซเชธเชจเชพ เชจเชฟเชฐเซเชฎเชพเชฃ, เชชเชฐเซ€เช•เซเชทเชฃ เช…เชจเซ‡ เชชเซเชฐเช•เชพเชถเชจ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฎ เชœเชฐเซ‚เชฐเซ€ เช•เซเชฐเชฟเชฏเชพเช“เชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ‡ เช›เซ‡.

เชถเชฐเซ‚ เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ: เชถเชพ เชฎเชพเชŸเซ‡?

  • Gitlab เชถเชพ เชฎเชพเชŸเซ‡?

เช•เชพเชฐเชฃ เช•เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชชเชพเชฒเชคเซ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธ เชฎเชพเชŸเซ‡ เช–เชพเชจเช—เซ€ เชญเช‚เชกเชพเชฐ เชฌเชจเชพเชตเชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เชฌเชจเซเชฏเซเช‚, เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡เชฎเชจเซ‡ GitHub เชชเชฐ เชšเซ‚เช•เชตเชฃเซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€, เช…เชจเซ‡ เชนเซเช‚ เชฒเซ‹เชญเซ€ เชนเชคเซ‹. เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เช เชฎเชซเชค เชฌเชจเซ€ เช—เชˆ เช›เซ‡, เชชเชฐเช‚เชคเซ เช…เชคเซเชฏเชพเชฐ เชธเซเชงเซ€ เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เช—เชฟเชŸเชนเชฌ เชชเชฐ เชœเชตเชพ เชฎเชพเชŸเซ‡ เช† เชชเซ‚เชฐเชคเซเช‚ เช•เชพเชฐเชฃ เชจเชฅเซ€.

  • Azure DevOps เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ เชถเชพ เชฎเชพเชŸเซ‡ เชจเชฅเซ€?

เช•เชพเชฐเชฃ เช•เซ‡ เชคเซเชฏเชพเช‚ เชธเซ‡เชŸเชฟเช‚เช— เชชเซเชฐเชพเชฅเชฎเชฟเช• เช›เซ‡ - เช†เชฆเซ‡เชถ เชตเชพเช•เซเชฏเชจเซเช‚ เชœเซเชžเชพเชจ เชชเชฃ เชœเชฐเซ‚เชฐเซ€ เชจเชฅเซ€. เชฌเชพเชนเซเชฏ เช—เชฟเชŸ เชชเซเชฐเชฆเชพเชคเชพเช“ เชธเชพเชฅเซ‡ เชเช•เซ€เช•เชฐเชฃ - เชฅเซ‹เชกเชพ เช•เซเชฒเชฟเช•เซเชธเชฎเชพเช‚, เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เช•เชฎเชฟเชŸ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ SSH เช•เซ€เชจเซ€ เช†เชฏเชพเชค - เชชเชฃ, เชชเชพเช‡เชชเชฒเชพเช‡เชจเชจเซ‡ เชŸเซ‡เชฎเซเชชเชฒเซ‡เชŸเชฎเชพเช‚เชฅเซ€ เชจเชนเซ€เช‚ เชชเชฃ เชธเชฐเชณเชคเชพเชฅเซ€ เช—เซ‹เช เชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชธเซเชฅเชฟเชคเชฟ: เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชถเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชคเชฎเชจเซ‡ เชถเซเช‚ เชœเซ‹เชˆเช เช›เซ‡

เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡:

  • GitLab เชฎเชพเช‚ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€.

เช…เชฎเซ‡ เชˆเชšเซเช›เซ€เช เช›เซ€เช:

  • เชฆเชฐเซ‡เช• เชฎเชฐเซเชœ เชตเชฟเชจเช‚เชคเซ€ เชฎเชพเชŸเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เช…เชจเซ‡ เชชเชฐเซ€เช•เซเชทเชฃ,
  • เชฆเชฐเซ‡เช• เชฎเชฐเซเชœ เชตเชฟเชจเช‚เชคเซ€ เชฎเชพเชŸเซ‡ เชชเซ‡เช•เซ‡เชœเซ‹ เชฌเชจเชพเชตเชตเซเช‚ เช…เชจเซ‡ เชฎเชพเชธเซเชŸเชฐ เชชเชฐ เชฆเชฌเชพเชฃ เช•เชฐเชตเซเช‚, เชœเซ‹ เช•เซ‡ เช•เชฎเชฟเชŸ เชฎเซ‡เชธเซ‡เชœเชฎเชพเช‚ เชšเซ‹เช•เซเช•เชธ เชฒเชพเช‡เชจ เชนเซ‹เชฏ,
  • Azure DevOps เชฎเชพเช‚ เช–เชพเชจเช—เซ€ เชซเซ€เชก เชชเชฐ เชฌเชฟเชฒเซเชŸ เชชเซ‡เช•เซ‡เชœเซ‹ เชฎเซ‹เช•เชฒเชตเชพ,
  • GitLab เชชเซƒเชทเซเช เซ‹เชฎเชพเช‚ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เช…เชจเซ‡ เชชเซเชฐเช•เชพเชถเชจเชจเซ€ เชเชธเซ‡เชฎเซเชฌเชฒเซ€,
  • เชฌเซ‡เชœ!11

เชตเชฐเซเชฃเชตเซ‡เชฒ เช†เชตเชถเซเชฏเช•เชคเชพเช“ เชธเชœเซ€เชต เชฐเซ€เชคเซ‡ เชจเซ€เชšเซ‡เชจเชพ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชฎเซ‹เชกเซ‡เชฒ เชชเชฐ เช†เชตเซ‡ เช›เซ‡:

  • เชธเซเชŸเซ‡เชœ 1 - เชเชธเซ‡เชฎเซเชฌเชฒเซ€
    • เช…เชฎเซ‡ เช•เซ‹เชก เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ€เช เช›เซ€เช, เช†เช‰เชŸเชชเซเชŸ เชซเชพเช‡เชฒเซ‹เชจเซ‡ เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸ เชคเชฐเซ€เช•เซ‡ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเซ€เช เช›เซ€เช
  • เชธเซเชŸเซ‡เชœ 2 - เชชเชฐเซ€เช•เซเชทเชฃ
    • เช…เชฎเซ‡ เชฌเชฟเชฒเซเชก เชธเซเชŸเซ‡เชœ เชชเชฐเชฅเซ€ เช•เชฒเชพเช•เซƒเชคเชฟเช“ เชฎเซ‡เชณเชตเซ€เช เช›เซ€เช, เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชšเชฒเชพเชตเซ€เช เช›เซ€เช, เช•เซ‹เชก เช•เชตเชฐเซ‡เชœ เชกเซ‡เชŸเชพ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ€เช เช›เซ€เช
  • เชธเซเชŸเซ‡เชœ 3 - เชธเชฌเชฎเชฟเชŸ เช•เชฐเซ‹
    • เช•เชพเชฐเซเชฏ 1 - เชจเซเชฏเซเช—เซ‡เชŸ เชชเซ‡เช•เซ‡เชœ เชฌเชจเชพเชตเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ Azure DevOps เชชเชฐ เชฎเซ‹เช•เชฒเซ‹
    • เช•เชพเชฐเซเชฏ 2 - เช…เชฎเซ‡ เชธเซเชฐเซ‹เชค เช•เซ‹เชกเชฎเชพเช‚ xmldoc เชฎเชพเช‚เชฅเซ€ เชธเชพเช‡เชŸ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ€เช เช›เซ€เช เช…เชจเซ‡ เชคเซ‡เชจเซ‡ GitLab เชชเซƒเชทเซเช เซ‹เชฎเชพเช‚ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเซ€เช เช›เซ€เช

เชšเชพเชฒเซ‹, เชถเชฐเซ เช•เชฐเซ€เช!

เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชเช•เชพเช‰เชจเซเชŸเซเชธ เชคเซˆเชฏเชพเชฐ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

  1. เชฎเชพเช‚ เชเช• เชเช•เชพเช‰เชจเซเชŸ เชฌเชจเชพเชตเซ‹ เชฎเชพเชˆเช•เซเชฐเซ‹เชธเซ‹เชซเซเชŸ เชเชเซเชฏเซ‹เชฐ

  2. เชชเชฐ เชœเชพเช“ เชเชเซเชฐ เชกเซ‡เชตเช“เชชเซเชธ

  3. เช…เชฎเซ‡ เชเช• เชจเชตเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเซ€เช เช›เซ€เช

    1. เชจเชพเชฎ - เช•เซ‹เชˆเชชเชฃ
    2. เชฆเซƒเชถเซเชฏเชคเชพ - เช•เซ‹เชˆเชชเชฃ
      (เชฒเช—เชญเช—) เชธเช‚เชชเซ‚เชฐเซเชฃ เชถเชฟเช–เชพเช‰ เชฎเชพเชฃเชธ เชฎเชพเชŸเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ CI/CD เชฎเชพเชŸเซ‡เชจเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

  4. เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชฌเชจเชพเชตเซ‹ เชฌเชŸเชจ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹ เช›เซ‹, เชคเซเชฏเชพเชฐเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เช…เชจเซ‡ เชคเชฎเชจเซ‡ เชคเซ‡เชจเชพ เชชเซƒเชทเซเช  เชชเชฐ เชฐเซ€เชกเชพเชฏเชฐเซ‡เช•เซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เช† เชชเซƒเชทเซเช  เชชเชฐ, เชคเชฎเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชชเชฐ เชœเชˆเชจเซ‡ เชฌเชฟเชจเชœเชฐเซ‚เชฐเซ€ เชธเซเชตเชฟเชงเชพเช“เชจเซ‡ เช…เช•เซเชทเชฎ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ (เชกเชพเชฌเซ€ เชฌเชพเชœเซเชจเซ€ เชธเซ‚เชšเชฟเชฎเชพเช‚ เชจเซ€เชšเซ‡เชจเซ€ เชฒเชฟเช‚เช• -> เชตเชฟเชนเช‚เช—เชพเชตเชฒเซ‹เช•เชจ -> Azure DevOps เชธเซ‡เชตเชพเช“ เชฌเซเชฒเซ‹เช•)
    (เชฒเช—เชญเช—) เชธเช‚เชชเซ‚เชฐเซเชฃ เชถเชฟเช–เชพเช‰ เชฎเชพเชฃเชธ เชฎเชพเชŸเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ CI/CD เชฎเชพเชŸเซ‡เชจเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

  5. เชเชŸเซเชฐเชฟเชซเซ‡เช•เซเชŸเซเชธ เชชเชฐ เชœเชพเช“, เชซเซ€เชก เชฌเชจเชพเชตเซ‹ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹

    1. เชธเซเชคเซเชฐเซ‹เชคเชจเซเช‚ เชจเชพเชฎ เชฆเชพเช–เชฒ เช•เชฐเซ‹
    2. เชฆเซƒเชถเซเชฏเชคเชพ เชชเชธเช‚เชฆ เช•เชฐเซ‹
    3. เช…เชจเชšเซ‡เช• เช•เชฐเซ‹ เชธเชพเชฎเชพเชจเซเชฏ เชœเชพเชนเซ‡เชฐ เชธเซเชคเซเชฐเซ‹เชคเซ‹เชฎเชพเช‚เชฅเซ€ เชชเซ‡เช•เซ‡เชœเซ‹ เชถเชพเชฎเซ‡เชฒ เช•เชฐเซ‹, เชœเซ‡เชฅเซ€ เชธเซเชคเซเชฐเซ‹เชค เชกเชฎเซเชช เชจเซเชฏเซเช—เซ‡เชŸ เช•เซเชฒเซ‹เชจเชฎเชพเช‚ เชจ เชซเซ‡เชฐเชตเชพเชฏ
      (เชฒเช—เชญเช—) เชธเช‚เชชเซ‚เชฐเซเชฃ เชถเชฟเช–เชพเช‰ เชฎเชพเชฃเชธ เชฎเชพเชŸเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ CI/CD เชฎเชพเชŸเซ‡เชจเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

  6. เชซเซ€เชก เชฎเชพเชŸเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซ‹ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹, เชตเชฟเชเซเชฏเซเช…เชฒ เชธเซเชŸเซเชกเชฟเชฏเซ‹ เชชเชธเช‚เชฆ เช•เชฐเซ‹, เชฎเชถเซ€เชจ เชธเซ‡เชŸเช…เชช เชฌเซเชฒเซ‹เช•เชฎเชพเช‚เชฅเซ€ เชธเซเชคเซเชฐเซ‹เชคเชจเซ€ เชจเช•เชฒ เช•เชฐเซ‹
    (เชฒเช—เชญเช—) เชธเช‚เชชเซ‚เชฐเซเชฃ เชถเชฟเช–เชพเช‰ เชฎเชพเชฃเชธ เชฎเชพเชŸเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ CI/CD เชฎเชพเชŸเซ‡เชจเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

  7. เชเช•เชพเช‰เชจเซเชŸ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชชเชฐ เชœเชพเช“, เชตเซเชฏเช•เซเชคเชฟเช—เชค เชเช•เซเชธเซ‡เชธ เชŸเซ‹เช•เชจ เชชเชธเช‚เชฆ เช•เชฐเซ‹
    (เชฒเช—เชญเช—) เชธเช‚เชชเซ‚เชฐเซเชฃ เชถเชฟเช–เชพเช‰ เชฎเชพเชฃเชธ เชฎเชพเชŸเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ CI/CD เชฎเชพเชŸเซ‡เชจเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

  8. เชจเชตเซเช‚ เชเช•เซเชธเซ‡เชธ เชŸเซ‹เช•เชจ เชฌเชจเชพเชตเซ‹

    1. เชจเชพเชฎ - เชฎเชจเชธเซเชตเซ€
    2. เชธเช‚เชธเซเชฅเชพ - เชตเชฐเซเชคเชฎเชพเชจ
    3. เชฎเชนเชคเซเชคเชฎ 1 เชตเชฐเซเชท เชฎเชพเชŸเซ‡ เชฎเชพเชจเซเชฏ
    4. เช…เชตเช•เชพเชถ - เชชเซ‡เช•เซ‡เชœเชฟเช‚เช—/เชตเชพเช‚เชšเซ‹ เช…เชจเซ‡ เชฒเช–เซ‹
      (เชฒเช—เชญเช—) เชธเช‚เชชเซ‚เชฐเซเชฃ เชถเชฟเช–เชพเช‰ เชฎเชพเชฃเชธ เชฎเชพเชŸเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ CI/CD เชฎเชพเชŸเซ‡เชจเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

  9. เชฌเชจเชพเชตเซ‡เชฒ เชŸเซ‹เช•เชจ เช•เซ‹เชชเซ€ เช•เชฐเซ‹ - เชฎเซ‹เชกเชฒ เชตเชฟเชจเซเชกเซ‹ เชฌเช‚เชง เชฅเชฏเชพ เชชเช›เซ€, เชฎเซ‚เชฒเซเชฏ เช…เชจเซเชชเชฒเชฌเซเชง เชฐเชนเซ‡เชถเซ‡

  10. GitLab เชฎเชพเช‚ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชชเชฐ เชœเชพเช“, CI / CD เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชชเชธเช‚เชฆ เช•เชฐเซ‹
    (เชฒเช—เชญเช—) เชธเช‚เชชเซ‚เชฐเซเชฃ เชถเชฟเช–เชพเช‰ เชฎเชพเชฃเชธ เชฎเชพเชŸเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ CI/CD เชฎเชพเชŸเซ‡เชจเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

  11. เชตเซ‡เชฐเชฟเชฏเซ‡เชฌเชฒ เชฌเซเชฒเซ‹เช•เชจเซ‡ เชตเชฟเชธเซเชคเซƒเชค เช•เชฐเซ‹, เชเช• เชจเชตเซ‹ เช‰เชฎเซ‡เชฐเซ‹

    1. เชจเชพเชฎ - เช•เซ‹เชˆเชชเชฃ เชœเช—เซเชฏเชพ เชตเชฟเชจเชพ (เช•เชฎเชพเชจเซเชก เชถเซ‡เชฒเชฎเชพเช‚ เช‰เชชเชฒเชฌเซเชง เชนเชถเซ‡)
    2. เชฎเซ‚เชฒเซเชฏ - เชซเช•เชฐเชพ 9เชฎเชพเช‚เชฅเซ€ เชเช•เซเชธเซ‡เชธ เชŸเซ‹เช•เชจ
    3. เชฎเชพเชธเซเช• เชตเซ‡เชฐเซ€เชเชฌเชฒ เชชเชธเช‚เชฆ เช•เชฐเซ‹
      (เชฒเช—เชญเช—) เชธเช‚เชชเซ‚เชฐเซเชฃ เชถเชฟเช–เชพเช‰ เชฎเชพเชฃเชธ เชฎเชพเชŸเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ CI/CD เชฎเชพเชŸเซ‡เชจเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

เช† เชชเซ‚เชฐเซเชต เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชชเซ‚เชฐเซเชฃ เช•เชฐเซ‡ เช›เซ‡.

เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเชพเชณเช–เซเช‚ เชคเซˆเชฏเชพเชฐ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡, GitLab เชฎเชพเช‚ CI/CD เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ .gitlab-ci.yml เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเชพ เชฎเซ‚เชณเชฎเชพเช‚เชฅเซ€. เชคเชฎเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชฎเชพเช‚ เช† เชซเชพเช‡เชฒ เชฎเชพเชŸเซ‡ เชฎเชจเชธเซเชตเซ€ เชชเชพเชฅ เชธเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชชเชฐเช‚เชคเซ เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชคเซ‡ เชœเชฐเซ‚เชฐเซ€ เชจเชฅเซ€.

เชœเซ‡เชฎ เชคเชฎเซ‡ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจเชฎเชพเช‚เชฅเซ€ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เชซเชพเช‡เชฒ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชงเชฐเชพเชตเซ‡ เช›เซ‡ YAML. เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชตเชฟเช—เชคเซ‹ เช†เชชเซ‡ เช›เซ‡ เช•เซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเชพ เชŸเซ‹เชšเชจเชพ เชธเซเชคเชฐเซ‡ เช…เชจเซ‡ เชฆเชฐเซ‡เช• เชจเซ‡เชธเซเชŸเซ‡เชก เชธเซเชคเชฐเซ‹ เชชเชฐ เช•เชˆ เช•เซ€ เชธเชฎเชพเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เชชเซเชฐเชฅเชฎ, เชšเชพเชฒเซ‹ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเชˆเชฒเชฎเชพเช‚ เชกเซ‹เช•เชฐ เชˆเชฎเซ‡เชœเชจเซ€ เชฒเชฟเช‚เช• เช‰เชฎเซ‡เชฐเซ€เช, เชœเซ‡เชฎเชพเช‚ เช•เชพเชฐเซเชฏเซ‹ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เช† เชฎเชพเชŸเซ‡ เช†เชชเชฃเซ‡ เชถเซ‹เชงเซ€เช เช›เซ€เช เชกเซ‹เช•เชฐ เชนเชฌ เชชเชฐ .เชจเซ‡เชŸ เช•เซ‹เชฐ เช›เชฌเซ€เช“เชจเซเช‚ เชชเซƒเชทเซเช . เช† GitHub เชตเชฟเชตเชฟเชง เช•เชพเชฐเซเชฏเซ‹ เชฎเชพเชŸเซ‡ เช•เชˆ เช›เชฌเซ€ เชชเชธเช‚เชฆ เช•เชฐเชตเซ€ เชคเซ‡เชจเชพ เชชเชฐ เชตเชฟเช—เชคเชตเชพเชฐ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ เช›เซ‡. .Net Core 3.1 เชธเชพเชฅเซ‡เชจเซ€ เช‡เชฎเซ‡เชœ เช…เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชฌเชฟเชฒเซเชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฏเซ‹เช—เซเชฏ เช›เซ‡, เชคเซ‡เชฅเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เชชเซเชฐเชฅเชฎ เชฒเซ€เชŸเซ€ เช‰เชฎเซ‡เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชจเชฟเชƒเชธเช‚เช•เซ‹เชš

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

เชนเชตเซ‡, เชœเซเชฏเชพเชฐเซ‡ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเซ‹เชซเซเชŸ เช‡เชฎเซ‡เชœ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚เชฅเซ€ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชฒเซ‹เช‚เชš เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เชคเซเชฏเชพเชฐเซ‡ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เช‡เชฎเซ‡เชœ เชกเชพเช‰เชจเชฒเซ‹เชก เชฅเชถเซ‡, เชœเซ‡เชฎเชพเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเชพ เชคเชฎเชพเชฎ เช•เชพเชฐเซเชฏเซ‹เชจเซ‡ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เช†เช—เชณเชจเซเช‚ เชชเช—เชฒเซเช‚ เช‰เชฎเซ‡เชฐเชตเชพเชจเซเช‚ เช›เซ‡ เชฎเช‚เชšเชจเซ€ เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡, 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

เชคเซ‡ เช“เช›เชพเชฎเชพเช‚ เช“เช›เซเช‚ เชเช• เช•เชพเชฐเซเชฏ เช‰เชฎเซ‡เชฐเชตเชพเชจเซเช‚ เชฌเชพเช•เซ€ เช›เซ‡ เชœเซ‡เชฅเซ€ เชœเซเชฏเชพเชฐเซ‡ เช•เชฎเชฟเชŸ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡, เชคเซเชฏเชพเชฐเซ‡ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชถเชฐเซ‚ เชฅเชพเชฏ. เชนเชฎเชฃเชพเช‚ เชฎเชพเชŸเซ‡, เชšเชพเชฒเซ‹ เชฆเชฐเซเชถเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เช–เชพเชฒเซ€ เช•เชพเชฐเซเชฏ เช‰เชฎเซ‡เชฐเซ€เช:

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

เช…เชฎเชจเซ‡ เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เช•เชพเชฐเซเชฏเชฐเชค เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชคเซ‡เชฎ เช›เชคเชพเช‚ เชฏเซ‹เช—เซเชฏ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชฎเชณเซ€ เช›เซ‡.

เชŸเซเชฐเชฟเช—เชฐเซเชธ เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช

เช•เซ‹เชˆเชชเชฃ เช•เชพเชฐเซเชฏ เชฎเชพเชŸเซ‡ เช•เซ‹เชˆ เชŸเซเชฐเชฟเช—เชฐ เชซเชฟเชฒเซเชŸเชฐเซเชธเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชจเชฅเซ€ เชคเซ‡ เชนเช•เซ€เช•เชคเชจเซ‡ เช•เชพเชฐเชฃเซ‡, เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชšเชพเชฒเชถเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชชเชฃ เช•เชฎเชฟเชŸเชจเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชงเช•เซ‡เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช† เช‡เชšเซเช›เชฟเชค เชตเชฐเซเชคเชจ เชจ เชนเซ‹เชตเชพเชฅเซ€, เช…เชฎเซ‡ เช•เชพเชฐเซเชฏเซ‹ เชฎเชพเชŸเซ‡ เชŸเซเชฐเชฟเช—เชฐ เชซเชฟเชฒเซเชŸเชฐเซเชธ เชธเซ‡เชŸ เช•เชฐเซ€เชถเซเช‚.

เชซเชฟเชฒเซเชŸเชฐเซเชธ เชฌเซ‡ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เช—เซ‹เช เชตเซ€ เชถเช•เชพเชฏ เช›เซ‡: เชฎเชพเชคเซเชฐ/เชธเชฟเชตเชพเชฏ ะธ เชจเชฟเชฏเชฎเซ‹. เชŸเซ‚เช‚เช•เชฎเชพเช‚, 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

เชธเซเชตเชพเชญเชพเชตเชฟเช• เชฐเซ€เชคเซ‡, เชคเซเชฏเชพเช‚ เช•เซ‡เชŸเชฒเซ€เช• เช˜เซ‹เช‚เช˜เชพเชŸ เช›เซ‡ เชœเซ‡เชจเชพ เช•เชพเชฐเชฃเซ‡ เช…เชฎเซ‡ เช†เชฆเซ‡เชถเซ‹เชจเซ‡ เช•เช‚เชˆเช• เช…เช‚เชถเซ‡ เชœเชŸเชฟเชฒ เชฌเชจเชพเชตเซ€เชถเซเช‚.

  1. เช…เชฎเชจเซ‡ เชฐเซ€เชฒเซ€เช เชฌเชฟเชฒเซเชก เชœเซ‹เชˆเช เช›เซ‡, เชกเซ€เชฌเช— เชฌเชฟเชฒเซเชก เชจเชนเซ€เช‚, เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เชฆเชฐเซ‡เช• เช†เชฆเซ‡เชถเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ€เช เช›เซ€เช -c Release
  2. เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เช…เชฎเซ‡ เช•เซ‹เชก เช•เชตเชฐเซ‡เชœ เชกเซ‡เชŸเชพ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช, เชคเซ‡เชฅเซ€ เช…เชฎเชพเชฐเซ‡ เชชเชฐเซ€เช•เซเชทเชฃ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เช“เชฎเชพเช‚ เช•เชตเชฐเซ‡เชœ เชตเชฟเชถเซเชฒเซ‡เชทเช• เชถเชพเชฎเซ‡เชฒ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:
    1. เชคเชฎเชพเชฎ เชŸเซ‡เชธเซเชŸ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เช“เชฎเชพเช‚ เชชเซ‡เช•เซ‡เชœ เช‰เชฎเซ‡เชฐเซ‹ coverlet.msbuild: dotnet add package coverlet.msbuild เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚เชฅเซ€
    2. เชŸเซ‡เชธเซเชŸ เชฐเชจ เช•เชฎเชพเชจเซเชกเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ‹ /p:CollectCoverage=true
    3. เช•เชตเชฐเซ‡เชœ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชพเชฐเซเชฏ เช—เซ‹เช เชตเชฃเซ€เชฎเชพเช‚ เช•เซ€ เช‰เชฎเซ‡เชฐเซ‹ (เชจเซ€เชšเซ‡ เชœเซเช“)
  3. เช•เซ‹เชกเชจเซ‡ เชจเซเชฏเซเช—เซ‡เชŸ เชชเซ‡เช•เซ‡เชœเซ‹เชฎเชพเช‚ เชชเซ‡เช• เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เชชเซ‡เช•เซ‡เชœเซ‹ เชฎเชพเชŸเซ‡ เช†เช‰เชŸเชชเซเชŸ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€ เชธเซ‡เชŸ เช•เชฐเซ‹: -o .

เช•เซ‹เชก เช•เชตเชฐเซ‡เชœ เชกเซ‡เชŸเชพ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชšเชฒเชพเชตเซเชฏเชพ เชชเช›เซ€, เช•เชตเชฐเชฒเซ‡เชŸ เชชเซเชฐเชฟเชจเซเชŸ เช•เชจเซเชธเซ‹เชฒ เชชเชฐ เช†เช‚เช•เชกเชพ เชšเชฒเชพเชตเซ‡ เช›เซ‡:

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+%)/

เช…เชนเซ€เช‚ เช†เชชเชฃเซ‡ เช•เซเชฒ เชฒเชพเช‡เชจ เช•เชตเชฐเซ‡เชœเชตเชพเชณเซ€ เชฒเชพเช‡เชจเชฎเชพเช‚เชฅเซ€ เช†เช‚เช•เชกเชพ เชฎเซ‡เชณเชตเซ€เช เช›เซ€เช.

เชชเซ‡เช•เซ‡เชœเซ‹ เช…เชจเซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเซ‹

เชฌเช‚เชจเซ‡ เช•เซเชฐเชฟเชฏเชพเช“ เชชเชพเช‡เชชเชฒเชพเช‡เชจเชจเชพ เช›เซ‡เชฒเซเชฒเชพ เชคเชฌเช•เซเช•เชพ เชฎเชพเชŸเซ‡ เชธเซเชจเชฟเชถเซเชšเชฟเชค เชฅเชฏเซ‡เชฒ เช›เซ‡ - เชคเซเชฏเชพเชฐเชฅเซ€ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เช…เชจเซ‡ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชชเชธเชพเชฐ เชฅเชˆ เช—เชฏเชพ เช›เซ‡, เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เชตเชฟเช•เชพเชธเชจเซ‡ เชตเชฟเชถเซเชต เชธเชพเชฅเซ‡ เชถเซ‡เชฐ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช.

เชชเซเชฐเชฅเชฎ, เชชเซ‡เช•เซ‡เชœ เชธเซเชคเซเชฐเซ‹เชค เชชเชฐ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเชตเชพเชจเซเช‚ เชตเชฟเชšเชพเชฐเซ‹:

  1. เชœเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชชเชพเชธเซ‡ เชจเซเชฏเซเช—เซ‡เชŸ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒ เชจเชฅเซ€ (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 - เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชเช•เซเชธเซ‡เชธ เชŸเซ‹เช•เชจ เชธเชพเชฅเซ‡เชจเชพ เชšเชฒเชจเซเช‚ เชจเชพเชฎ ("เชเช•เชพเช‰เชจเซเชŸเซเชธเชจเซ€ เชคเซˆเชฏเชพเชฐเซ€", เชชเซƒเชทเซเช  11). เชธเซเชตเชพเชญเชพเชตเชฟเช• เชฐเซ€เชคเซ‡, เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ $variableName
    5. -StorePasswordInClearText - เชเช•เซเชธเซ‡เชธ เชจเช•เชพเชฐเซ€ เชญเซ‚เชฒเชจเซ‡ เชฌเชพเชฏเชชเชพเชธ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชนเซ‡เช• (เชนเซเช‚ เช† เชฐเซ‡เช• เชชเชฐ เชชเช— เชฎเซ‚เช•เชจเชพเชฐ เชชเซเชฐเชฅเชฎ เชจเชฅเซ€)
    6. เชญเซ‚เชฒเซ‹เชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชคเซ‡ เช‰เชฎเซ‡เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡ -verbosity detailed
  3. เชธเซเชคเซเชฐเซ‹เชค เชชเชฐ เชชเซ‡เช•เซ‡เชœ เชฎเซ‹เช•เชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. เช…เชฎเซ‡ เชตเชฐเซเชคเชฎเชพเชจ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚เชฅเซ€ เชฌเชงเชพ เชชเซ‡เช•เซ‡เชœเซ‹ เชฎเซ‹เช•เชฒเซ€เช เช›เซ€เช, เชคเซ‡เชฅเซ€ *.nupkg.
    2. name - เช‰เชชเชฐเชจเชพ เชชเช—เชฒเชพเชฅเซ€.
    3. key - เช•เซ‹เชˆเชชเชฃ เชฒเชพเช‡เชจ. Azure DevOps เชฎเชพเช‚, เช•เชจเซ‡เช•เซเชŸ เชŸเซ เชซเซ€เชก เชตเชฟเชจเซเชกเซ‹เชฎเชพเช‚, เช‰เชฆเชพเชนเชฐเชฃ เชนเช‚เชฎเซ‡เชถเชพ เชฒเชพเช‡เชจ เช›เซ‡ az.
    4. -skipduplicate - เชœเซเชฏเชพเชฐเซ‡ เช† เช•เซ€ เชตเชฟเชจเชพ เชชเชนเซ‡เชฒเชพเชฅเซ€ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เช›เซ‡ เชคเซ‡ เชชเซ‡เช•เซ‡เชœ เชฎเซ‹เช•เชฒเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เชนเซ‹เชฏ, เชคเซเชฏเชพเชฐเซ‡ เชธเซเชคเซเชฐเซ‹เชค เชญเซ‚เชฒ เชชเชฐเชค เช•เชฐเชถเซ‡ 409 Conflict; เช•เซ€ เชธเชพเชฅเซ‡, เชฎเซ‹เช•เชฒเชตเชพเชจเซเช‚ เช›เซ‹เชกเซ€ เชฆเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชนเชตเซ‡ เชšเชพเชฒเซ‹ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชจเซ€ เชฐเชšเชจเชพ เชธเซ‡เชŸ เช•เชฐเซ€เช:

  1. เชชเซเชฐเชฅเชฎ, เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚, เชฎเซเช–เซเชฏ เชถเชพเช–เชพเชฎเชพเช‚, เช…เชฎเซ‡ docfx เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ€เช เช›เซ€เช. เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชฐเซเชŸเชฎเชพเช‚เชฅเซ€ เช†เชฆเซ‡เชถ เชšเชฒเชพเชตเซ‹ docfx init เช…เชจเซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฐเชธเชชเชฐเชธ เชฐเซ€เชคเซ‡ เชฎเซเช–เซเชฏ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชธเซ‡เชŸ เช•เชฐเซ‹. เชจเซเชฏเซ‚เชจเชคเชฎ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเซ‡เชŸเช…เชชเชจเซเช‚ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฐเซเชฃเชจ เช…เชนเซ€เช‚.
    1. เชœเซเชฏเชพเชฐเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เชนเซ‹เชฏ, เชคเซเชฏเชพเชฐเซ‡ เช†เช‰เชŸเชชเซเชŸ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเซ‹ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡ ..public - GitLab เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ เชชเซƒเชทเซเช เซ‹เชจเชพ เชธเซเชคเซเชฐเซ‹เชค เชคเชฐเซ€เช•เซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเชพ เชฐเซเชŸเชฎเชพเช‚ เชœเชพเชนเซ‡เชฐ เชซเซ‹เชฒเซเชกเชฐเชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€เช“ เชฒเซ‡ เช›เซ‡. เช•เชพเชฐเชฃ เช•เซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชจเซ‡เชธเซเชŸเซ‡เชก เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เชธเซเชฅเชฟเชค เชนเชถเซ‡ - เชชเชพเชฅเชฎเชพเช‚ เชฒเซ‡เชตเชฒ เช‰เชชเชฐ เช†เช‰เชŸเชชเซเชŸ เช‰เชฎเซ‡เชฐเซ‹.
  2. เชšเชพเชฒเซ‹ GitLab เชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ‡ เชฆเชฌเชพเชฃ เช•เชฐเซ€เช.
  3. เชชเชพเช‡เชชเชฒเชพเช‡เชจ เช—เซ‹เช เชตเชฃเซ€เชฎเชพเช‚ เช•เชพเชฐเซเชฏ เช‰เชฎเซ‡เชฐเซ‹ pages (เช—เซ€เชŸเชฒเซ‡เชฌ เชชเซ‡เชœเซ€เชธเชฎเชพเช‚ เชธเชพเช‡เชŸเชจเชพ เชชเซเชฐเช•เชพเชถเชจ เช•เชพเชฐเซเชฏเซ‹ เชฎเชพเชŸเซ‡ เช†เชฐเช•เซเชทเชฟเชค เชถเชฌเซเชฆ):
    1. เชธเซเช•เซเชฐเชฟเชชเซเชŸ:
      1. nuget install docfx.console -version 2.51.0 - docfx เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹; เชชเซ‡เช•เซ‡เชœ เชธเซเชฅเชพเชชเชจ เชชเชพเชฅ เชฏเซ‹เช—เซเชฏ เช›เซ‡ เชคเซ‡เชจเซ€ เช–เชพเชคเชฐเซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช†เชตเซƒเชคเซเชคเชฟ เชธเซเชชเชทเซเชŸ เชฅเชฏเซ‡เชฒ เช›เซ‡.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ
    2. เชจเซ‹เชก เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸเซเชธ:

pages:
  # snip
  artifacts:
    paths:
      - public

docfx เชตเชฟเชถเซ‡ เช—เซ€เชคเชพเชคเซเชฎเช• เชตเชฟเชทเชฏเชพเช‚เชคเชฐ

เชชเชนเซ‡เชฒเชพเช‚, เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเซ‡เชŸ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เชฎเซ‡เช‚ เชธเซ‹เชฒเซเชฏเซเชถเชจ เชซเชพเช‡เชฒ เชคเชฐเซ€เช•เซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชฎเชพเชŸเซ‡ เช•เซ‹เชก เชธเซเชคเซเชฐเซ‹เชคเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซเชฏเซ‹ เชนเชคเซ‹. เชฎเซเช–เซเชฏ เช—เซ‡เชฐเชฒเชพเชญ เช เช›เซ‡ เช•เซ‡ เชชเชฐเซ€เช•เซเชทเชฃ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธ เชฎเชพเชŸเซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชชเชฃ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชœเซ‹ เช† เชœเชฐเซ‚เชฐเซ€ เชจเชฅเซ€, เชคเซ‹ เชคเชฎเซ‡ เช† เชฎเซ‚เชฒเซเชฏเชจเซ‡ เชจเซ‹เชก เชชเชฐ เชธเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ 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 เชถเซ€เชฐเซเชทเช• เชฎเชพเช‚

เชชเซ‡เชŸเชพเชธเชฐเชตเชพเชณเซ‹

เช†เชŸเชฒเซเช‚ เชธเชฐเชณ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเชพเชคเซเชฐ เช…เชกเชงเชพ เช•เชฒเชพเช•เชฎเชพเช‚ เช…เชจเซ‡ เช•เซ‹เชซเซ€เชจเชพ เช•เชชเชจเชพ เช•เชชเชฎเชพเช‚ เชฌเชจเชพเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡, เชœเซ‡ เชคเชฎเชจเซ‡ เช•เซ‹เชก เชฌเชจเซ‡เชฒ เช›เซ‡ เช…เชจเซ‡ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชชเชพเชธ เชฅเชพเชฏ เช›เซ‡ เช•เซ‡ เชจเชนเซ€เช‚ เชคเซ‡ เชคเชชเชพเชธเชตเชพ, เชจเชตเซเช‚ เชชเซ‡เช•เซ‡เชœ เชฌเชจเชพเชตเชตเชพ, เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเชพ เช…เชจเซ‡ เชธเซเช‚เชฆเชฐ เช†เช‚เช–เชจเซ‡ เช–เซเชถ เช•เชฐเชตเชพ เชฆเซ‡เชถเซ‡. เชฆเชฐเซ‡เช• เชฎเชฐเซเชœ เชตเชฟเชจเช‚เชคเซ€ เช…เชจเซ‡ เชฎเชพเชธเซเชŸเชฐเชจเซ‡ เชฎเซ‹เช•เชฒเชตเชพ เชธเชพเชฅเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ 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

เชฌเซ‡เชœ เชตเชฟเชถเซ‡ เชฌเซ‹เชฒเชคเชพ

เชคเซ‡เชฎเชจเชพ เช•เชพเชฐเชฃเซ‡, เช›เซ‡เชตเชŸเซ‡, เชฌเชงเซเช‚ เชถเชฐเซ‚ เชฅเชฏเซเช‚!

Gtntral เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ เชฌเซเชฒเซ‹เช•เชฎเชพเช‚ CI/CD เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชฎเชพเช‚ GitLab เชฎเชพเช‚ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชธเซเชฅเชฟเชคเชฟ เช…เชจเซ‡ เช•เซ‹เชก เช•เชตเชฐเซ‡เชœ เชธเชพเชฅเซ‡เชจเชพ เชฌเซ‡เชœ เช‰เชชเชฒเชฌเซเชง เช›เซ‡:

(เชฒเช—เชญเช—) เชธเช‚เชชเซ‚เชฐเซเชฃ เชถเชฟเช–เชพเช‰ เชฎเชพเชฃเชธ เชฎเชพเชŸเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ CI/CD เชฎเชพเชŸเซ‡เชจเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

เชฎเซ‡เช‚ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชชเชฐเชจเชพ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹เชจเซ€ เชฒเชฟเช‚เช• เชธเชพเชฅเซ‡ เชฌเซ‡เชœ เชฌเชจเชพเชตเซเชฏเซ‹ เช›เซ‡ shields.io - เชคเซเชฏเชพเช‚ เชฌเชงเซเช‚ เชเช•เชฆเชฎ เชธเชฐเชณ เช›เซ‡, เชคเชฎเซ‡ เชคเชฎเชพเชฐเซ‹ เชชเซ‹เชคเชพเชจเซ‹ เชฌเซ‡เชœ เชฌเชจเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชตเชฟเชจเช‚เชคเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเซ‡เชจเซ‡ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

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

(เชฒเช—เชญเช—) เชธเช‚เชชเซ‚เชฐเซเชฃ เชถเชฟเช–เชพเช‰ เชฎเชพเชฃเชธ เชฎเชพเชŸเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ CI/CD เชฎเชพเชŸเซ‡เชจเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

Azure DevOps เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸเซเชธ เชคเชฎเชจเซ‡ เชจเชตเซ€เชจเชคเชฎ เชธเช‚เชธเซเช•เชฐเชฃ เชธเชพเชฅเซ‡เชจเชพ เชชเซ‡เช•เซ‡เชœเซ‹ เชฎเชพเชŸเซ‡ เชฌเซ‡เชœ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชชเชฃ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, Azure DevOps เชธเชพเช‡เชŸ เชชเชฐเชจเชพ เชธเซเชคเซเชฐเซ‹เชคเชฎเชพเช‚, เชคเชฎเชพเชฐเซ‡ เชชเชธเช‚เชฆ เช•เชฐเซ‡เชฒ เชชเซ‡เช•เซ‡เชœ เชฎเชพเชŸเซ‡ เชฌเซ‡เชœ เชฌเชจเชพเชตเซ‹ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเชตเชพเชจเซ€ เช…เชจเซ‡ เชฎเชพเชฐเซเช•เชกเชพเช‰เชจ เชฎเชพเชฐเซเช•เช…เชชเชจเซ€ เชจเช•เชฒ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

(เชฒเช—เชญเช—) เชธเช‚เชชเซ‚เชฐเซเชฃ เชถเชฟเช–เชพเช‰ เชฎเชพเชฃเชธ เชฎเชพเชŸเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ CI/CD เชฎเชพเชŸเซ‡เชจเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

(เชฒเช—เชญเช—) เชธเช‚เชชเซ‚เชฐเซเชฃ เชถเชฟเช–เชพเช‰ เชฎเชพเชฃเชธ เชฎเชพเชŸเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ CI/CD เชฎเชพเชŸเซ‡เชจเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

เชธเซเช‚เชฆเชฐเชคเชพ เช‰เชฎเซ‡เชฐเซ‡ เช›เซ‡

เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชŸเซเช•เชกเชพเช“ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฒเช–เชคเซ€ เชตเช–เชคเซ‡ เช…เชจเซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชฆเซเชตเชพเชฐเชพ เชถเซ‹เชง เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เชฎเชจเซ‡ YAML เชจเซ€ โ€‹โ€‹เชเช• เชฐเชธเชชเซเชฐเชฆ เชธเซเชตเชฟเชงเชพ เชฎเชณเซ€ - เชŸเซเช•เชกเชพเช“เชจเซ‹ เชซเชฐเซ€เชฅเซ€ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹.

เชœเซ‡เชฎ เชคเชฎเซ‡ เช•เชพเชฐเซเชฏ เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชฎเชพเช‚เชฅเซ€ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เชคเซ‡ เชฌเชงเชพเชจเซ‡ เชŸเซ‡เช—เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ windows เชฐเชจเชฐ เชชเชฐ, เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชฎเชฐเซเชœ เชตเชฟเชจเช‚เชคเซ€ เชฎเชพเชธเซเชŸเชฐ/เช•เซเชฐเชฟเชเชŸเซ‡เชก (เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชธเชฟเชตเชพเชฏ)เชจเซ‡ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เชŸเซเชฐเชฟเช—เชฐ เชฅเชพเชฏ เช›เซ‡. เชšเชพเชฒเซ‹ เช†เชจเซ‡ เชŸเซเช•เชกเชพเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ€เช เชœเซ‡เชจเซ‹ เช†เชชเชฃเซ‡ เชซเชฐเซ€เชฅเซ€ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚:

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

เช…เชจเซ‡ เชนเชตเซ‡ เช†เชชเชฃเซ‡ เช•เชพเชฐเซเชฏ เชตเชฐเซเชฃเชจเชฎเชพเช‚ เช…เช—เชพเช‰ เชœเชพเชนเซ‡เชฐ เช•เชฐเซ‡เชฒ เชŸเซเช•เชกเซ‹ เชฆเชพเช–เชฒ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช:

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

เชซเซเชฐเซ‡เช—เชฎเซ‡เชจเซเชŸ เชจเชพเชฎเซ‹ เชฌเชฟเช‚เชฆเซเชฅเซ€ เชถเชฐเซ‚ เชฅเชตเซเช‚ เชœเซ‹เชˆเช, เชœเซ‡เชฅเซ€ เช•เชพเชฐเซเชฏ เชคเชฐเซ€เช•เซ‡ เช…เชฐเซเชฅเช˜เชŸเชจ เชจ เชฅเชพเชฏ.

เชชเซ‡เช•เซ‡เชœ เชตเชฐเซเชเชจเชฟเช‚เช—

เชชเซ‡เช•เซ‡เชœ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡, เช•เชฎเซเชชเชพเช‡เชฒเชฐ เช•เชฎเชพเชจเซเชก เชฒเชพเช‡เชจ เชธเซเชตเซ€เชšเซ‹ เชคเชชเชพเชธเซ‡ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เช—เซ‡เชฐเชนเชพเชœเชฐเซ€เชฎเชพเช‚, เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชซเชพเช‡เชฒเซ‹; เชœเซเชฏเชพเชฐเซ‡ เชคเซ‡ เชธเช‚เชธเซเช•เชฐเชฃ เชจเซ‹เชก เชถเซ‹เชงเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡ เชคเซ‡เชจเซ€ เช•เชฟเช‚เชฎเชค เชฌเชพเช‚เชงเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชฐเชนเซ‡เชฒเชพ เชชเซ‡เช•เซ‡เชœเชจเซ€ เช†เชตเซƒเชคเซเชคเชฟ เชคเชฐเซ€เช•เซ‡ เชฒเซ‡ เช›เซ‡. เชคเซ‡ เชคเชพเชฐเชฃ เช†เชชเซ‡ เช›เซ‡ เช•เซ‡ เชจเชตเชพ เชธเช‚เชธเซเช•เชฐเชฃ เชธเชพเชฅเซ‡ เชชเซ‡เช•เซ‡เชœ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เช•เชพเช‚ เชคเซ‹ เชคเซ‡เชจเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชซเชพเช‡เชฒเชฎเชพเช‚ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เช…เชฅเชตเชพ เชคเซ‡เชจเซ‡ เช†เชฆเซ‡เชถ เชตเชพเช•เซเชฏ เชฆเชฒเซ€เชฒ เชคเชฐเซ€เช•เซ‡ เชชเชพเชธ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เชšเชพเชฒเซ‹ เชเช• เชตเชงเซ เชตเชฟเชถเชฒเชฟเชธเซเชŸ เช‰เชฎเซ‡เชฐเซ€เช - เชธเช‚เชธเซเช•เชฐเชฃเชฎเชพเช‚ เชจเชพเชจเซ€ เชฌเซ‡ เชธเช‚เช–เซเชฏเชพเช“เชจเซ‡ เชชเซ‡เช•เซ‡เชœเชจเซ€ เชตเชฐเซเชท เช…เชจเซ‡ เชฌเชฟเชฒเซเชก เชคเชพเชฐเซ€เช– เชฅเชตเชพ เชฆเซ‹, เช…เชจเซ‡ เชชเซเชฐเซ€-เชฐเชฟเชฒเซ€เช เชธเช‚เชธเซเช•เชฐเชฃเซ‹ เช‰เชฎเซ‡เชฐเซ‹. เช…เชฒเชฌเชคเซเชค, เชคเชฎเซ‡ เช† เชกเซ‡เชŸเชพเชจเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชซเชพเช‡เชฒเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชฆเชฐเซ‡เช• เชธเชฌเชฎเชฟเชถเชจ เชชเชนเซ‡เชฒเชพเช‚ เชคเชชเชพเชธเซ€ เชถเช•เซ‹ เช›เซ‹ - เชชเชฐเช‚เชคเซ เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เชชเชพเช‡เชชเชฒเชพเช‡เชจเชฎเชพเช‚ เชชเชฃ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚เชฅเซ€ เชชเซ‡เช•เซ‡เชœ เชธเช‚เชธเซเช•เชฐเชฃ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ€เชจเซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช•เชฎเชพเชจเซเชก เชฒเชพเช‡เชจ เชฆเชฒเซ€เชฒ เชฆเซเชตเชพเชฐเชพ เชชเชธเชพเชฐ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เชšเชพเชฒเซ‹ เชธเช‚เชฎเชค เชฅเชˆเช เช•เซ‡ เชœเซ‹ เช•เชฎเชฟเชŸ เชฎเซ‡เชธเซ‡เชœเชฎเชพเช‚ เชฒเชพเชˆเช• เชนเซ‹เชฏ 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 เช…เชจเซ‡ เช•เชฎเชฟเชŸ เชฎเซ‡เชธเซ‡เชœเชฎเชพเช‚ เช†เชชเซ‡เชฒ เชธเซเชŸเซเชฐเชฟเช‚เช—เชจเซ€ เชนเชพเชœเชฐเซ€เชฎเชพเช‚ เชชเซ‡เช•เซ‡เชœเซ‹เชจเซ€ เชเชธเซ‡เชฎเซเชฌเชฒเซ€เชจเซเช‚ เชธเช–เชคเชชเชฃเซ‡ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเซ‹.

เช•เซเชฒ

เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฒเช–เชตเชพเชฎเชพเช‚ เชฒเช—เชญเช— เช…เชกเชงเซ‹ เช•เชฒเชพเช• เช…เชฅเชตเชพ เชเช• เช•เชฒเชพเช• เชตเชฟเชคเชพเชตเซเชฏเชพ เชชเช›เซ€, เชธเซเชฅเชพเชจเชฟเช• เชชเชพเชตเชฐเชถเซ‡เชฒเชฎเชพเช‚ เชกเชฟเชฌเช—เซ€เช‚เช— เช…เชจเซ‡, เชธเช‚เชญเชตเชคเชƒ, เช•เซ‡เชŸเชฒเชพเช• เช…เชธเชซเชณ เชฒเซ‹เชจเซเชš เชฅเชฏเชพ เชชเช›เซ€, เช…เชฎเชจเซ‡ เชจเชฟเชฏเชฎเชฟเชค เช•เชพเชฐเซเชฏเซ‹เชจเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชธเชฐเชณ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเชณเซเชฏเซเช‚.

เช…เชฒเชฌเชคเซเชค, GitLab CI/CD เช† เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ เชตเชพเช‚เชšเซเชฏเชพ เชชเช›เซ€ เชฒเชพเช—เซ‡ เชคเซ‡ เช•เชฐเชคเชพเช‚ เชตเชงเซ เชตเซเชฏเชพเชชเช• เช…เชจเซ‡ เชฌเชนเซเชชเช•เซเชทเซ€เชฏ เช›เซ‡ - เชคเซ‡ เชฌเชฟเชฒเช•เซเชฒ เชธเชพเชšเซเช‚ เชจเชฅเซ€. เชคเซเชฏเชพเช‚ เชชเชฃ เช“เชŸเซ‹ DevOps เช›เซ‡เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡

เชคเชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹เชจเซ‡ เช†เชชเชฎเซ‡เชณเซ‡ เชถเซ‹เชงเซ‹, เชฌเชฟเชฒเซเชก เช•เชฐเซ‹, เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเซ‹, เชœเชฎเชพเชตเชกเซ‹ เช…เชจเซ‡ เชฎเซ‹เชจเชฟเชŸเชฐ เช•เชฐเซ‹

เชนเชตเซ‡ เชฏเซ‹เชœเชจเชพเช“ เชเชเซเชฏเซเชฐ เชชเชฐ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เชœเชฎเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชชเซเชฒเซเชฎเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชจเซ‡ เชฒเช•เซเชทเซเชฏ เชตเชพเชคเชพเชตเชฐเชฃเชจเซ‡ เช†เชชเชฎเซ‡เชณเซ‡ เชจเช•เซเช•เซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เช—เซ‹เช เชตเชตเชพเชจเซ€ เช›เซ‡, เชœเซ‡ เช†เช—เชพเชฎเซ€ เชฒเซ‡เช–เชฎเชพเช‚ เช†เชตเชฐเซ€ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹