(เดเดคเดพเดฃเตเดŸเต) เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดคเตเดŸเด•เตเด•เด•เตเด•เดพเตผเด•เตเด•เดพเดฏเดฟ GitLab-เดฒเต† CI/CD-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เด—เตˆเดกเต

เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฒเดณเดฟเดคเดฎเดพเดฏ เด•เต‹เดกเดฟเด‚เด—เดฟเดจเตเดฑเต† เด’เดฐเต เดธเดพเดฏเดพเดนเตเดจเดคเตเดคเดฟเตฝ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เดฎเดจเต‹เดนเดฐเดฎเดพเดฏ เดฌเดพเดกเตเดœเตเด•เตพ เดŽเด™เตเด™เดจเต† เดจเต‡เดŸเดพเด‚

เด’เดฐเตเดชเด•เตเดทเต‡, เด•เตเดฑเดžเตเดžเดคเต เด’เดฐเต เดชเต†เดฑเตเดฑเต เดชเตเดฐเต‹เดœเด•เตโ€Œเดฑเตเดฑเต†เด™เตเด•เดฟเดฒเตเด‚ เด‰เดณเตเดณ เด“เดฐเต‹ เดกเต†เดตเดฒเดชเตเดชเตผเด•เตเด•เตเด‚ เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดธเตเด•เดณเตเดณเตเดณ เดฎเดจเต‹เดนเดฐเดฎเดพเดฏ เดฌเดพเดกเตโ€Œเดœเตเด•เตพ, เด•เต‹เดกเต เด•เดตเดฑเต‡เดœเต, เดจเตเดฏเต‚เดœเต†เดฑเตเดฑเดฟเดฒเต† เดชเดพเด•เตเด•เต‡เดœเต เดชเดคเดฟเดชเตเดชเตเด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด’เดฐเต เดšเตŠเดฑเดฟเดšเตเดšเดฟเตฝ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚ ... เดˆ เดšเตŠเดฑเดฟเดšเตเดšเดฟเดฒเดพเดฃเต เดˆ เดฒเต‡เด–เดจเด‚ เดŽเดดเตเดคเดพเตป เดŽเดจเตเดจเต† เดชเตเดฐเต‡เดฐเดฟเดชเตเดชเดฟเดšเตเดšเดคเต. เด‡เดคเต เดŽเดดเตเดคเดพเดจเตเดณเตเดณ เดคเดฏเตเดฏเดพเดฑเต†เดŸเตเดชเตเดชเดฟเตฝ, เดŽเดจเตเดฑเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เดณเดฟเดฒเตŠเดจเตเดจเดฟเตฝ เดŽเดจเดฟเด•เตเด•เต เดˆ เดธเต—เดจเตเดฆเดฐเตเดฏเด‚ เดฒเดญเดฟเดšเตเดšเต:

(เดเดคเดพเดฃเตเดŸเต) เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดคเตเดŸเด•เตเด•เด•เตเด•เดพเตผเด•เตเด•เดพเดฏเดฟ GitLab-เดฒเต† CI/CD-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เด—เตˆเดกเต

เดˆ เดฒเต‡เด–เดจเด‚ GitLab-เดฒเต† เด’เดฐเต .Net Core เด•เตเดฒเดพเดธเต เดฒเตˆเดฌเตเดฐเดฑเดฟ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเตเดณเตเดณ เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏ เดธเด‚เดฏเต‹เดœเดจเดคเตเดคเดฟเดจเตเดฑเต†เดฏเตเด‚ เดกเต†เดฒเดฟเดตเดฑเดฟเดฏเตเดŸเต†เดฏเตเด‚ เด…เดŸเดฟเดธเตเดฅเดพเดจ เดธเดœเตเดœเต€เด•เดฐเดฃเดคเตเดคเดฟเดฒเต‚เดŸเต† เดจเดฟเด™เตเด™เดณเต† เดจเดฏเดฟเด•เตเด•เตเด‚, GitLab เดชเต‡เดœเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† Azure DevOps-เดฒเต† เด’เดฐเต เดธเตเดตเด•เดพเดฐเตเดฏ เดซเต€เดกเดฟเดฒเต‡เด•เตเด•เต เดฌเดฟเตฝเดฑเตเดฑเต เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เดคเดณเตเดณเตเดจเตเดจเต.

เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเดคเตเดคเดฟเดจเตŠเดชเตเดชเด‚ เดตเดฟเด•เดธเดจ เด…เดจเตเดคเดฐเต€เด•เตเดทเดฎเดพเดฏเดฟ เดตเดฟเดŽเดธเต เด•เต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต GitLab เดตเตผเด•เตเด•เตเดซเตเดฒเต‹ (เดตเดฟเด•เดธเดจ เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดจเต‡เดฐเดฟเดŸเตเดŸเต เด•เตเดฐเดฎเต€เด•เดฐเดฃ เดซเดฏเตฝ เดธเดพเดงเต‚เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต).

เดธเด‚เด•เตเดทเดฟเดชเตเดค เด†เดฎเตเด–เด‚

เดธเดฟเดกเดฟ - เดจเดฟเด™เตเด™เตพ เดคเดณเตเดณเตเดฎเตเดชเต‹เดดเดพเดฃเต‹, เดŽเดฒเตเดฒเดพเด‚ เด‡เดคเดฟเดจเด•เด‚ เด•เตเดฒเดฏเดจเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดตเต€เดฃเดฟเดŸเตเดŸเตเดฃเตเดŸเต‹?

เดŽเดจเตเดคเดพเดฃเต CI / CD, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดคเต เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต - เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดคเต เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เด—เต‚เด—เดฟเตพ เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚. GitLab-เตฝ เดชเตˆเดชเตเดชเตเดฒเตˆเดจเตเด•เตพ เด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป เด•เดฃเตเดŸเต†เดคเตเดคเตเด• เดŽเดณเตเดชเตเดชเดตเตเด‚. เด‡เดตเดฟเดŸเต† เดžเดพเตป เดšเตเดฐเตเด•เตเด•เดฎเดพเดฏเดฟ, เดธเดพเดงเตเดฏเดฎเต†เด™เตเด•เดฟเตฝ, เดชเดฟเดดเดตเตเด•เดณเดฟเดฒเตเดฒเดพเดคเต†, เด’เดฐเต เดชเด•เตเดทเดฟเดฏเตเดŸเต† เด•เดพเดดเตเดšเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดชเตเดฐเด•เตเดฐเดฟเดฏ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเด‚:

  • เดกเต†เดตเดฒเดชเตเดชเตผ เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดชเตเดฐเดคเดฟเดฌเดฆเตเดงเดค เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต, เดธเตˆเดฑเตเดฑเดฟเดฒเต‚เดŸเต† เด’เดฐเต เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฑเตเดฑเต‡เดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดตเดฟเดงเดคเตเดคเดฟเตฝ, เดตเตเดฏเด•เตเดคเดฎเดพเดฏเตเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดชเดฐเต‹เด•เตเดทเดฎเดพเดฏเตเด‚ เดชเตˆเดชเตเดชเตเดฒเตˆเตป เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต,
  • เดŽเดฒเตเดฒเดพ เดŸเดพเดธเตเด•เตเด•เตเด•เดณเตเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเดพเดฃเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต, เดจเตฝเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดธเดจเตเดฆเตผเดญเดคเตเดคเดฟเตฝ เด…เดต เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เดพเตป เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เดตเตเดฏเดตเดธเตเดฅเด•เตพ,
  • เดšเตเดฎเดคเดฒเด•เตพ เด…เดตเดฏเตเดŸเต† เด˜เดŸเตเดŸเด™เตเด™เตพเด•เตเด•เดจเตเดธเดฐเดฟเดšเตเดšเต เด•เตเดฐเดฎเต€เด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต,
  • เด˜เดŸเตเดŸเด™เตเด™เตพ เด•เตเดฐเดฎเดคเตเดคเดฟเตฝ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต - เด…เดคเดพเดฏเดคเต. เดธเดฎเดพเดจเตเดคเดฐเดฎเดพเดฏเดฟ เดˆ เด˜เดŸเตเดŸเดคเตเดคเดฟเดฒเต† เดŽเดฒเตเดฒเดพ เดœเต‹เดฒเดฟเด•เดณเตเด‚ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเดฏเดฟ,
  • เดธเตเดฑเตเดฑเต‡เดœเต เดชเดฐเดพเดœเดฏเดชเตเดชเต†เดŸเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ (เด…เดคเดพเดฏเดคเต, เดธเตเดฑเตเดฑเต‡เดœเดฟเดจเตเดฑเต† เด’เดฐเต เดœเต‹เดฒเดฟเดฏเต†เด™เตเด•เดฟเดฒเตเด‚ เดชเดฐเดพเดœเดฏเดชเตเดชเต†เดŸเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ), เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดคเตเดคเตเดจเตเดจเต (เดเดฑเต†เด•เตเด•เตเดฑเต† เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‡เดพเดดเตเด‚),
  • เดŽเดฒเตเดฒเดพ เด˜เดŸเตเดŸเด™เตเด™เดณเตเด‚ เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏเดฟ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดฟเดฏเดพเตฝ, เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฃเต†เดจเตเดจเต เด•เดฃเด•เตเด•เดพเด•เตเด•เตเดจเตเดจเต.

เด…เดคเดฟเดจเดพเตฝ, เดžเด™เตเด™เตพเด•เตเด•เต เด‰เดฃเตเดŸเต:

  • เดชเตˆเดชเตเดชเตโ€Œเดฒเตˆเตป - เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดพเดจเตเด‚ เดŸเต†เดธเตเดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดชเดพเด•เตเด•เต‡เดœเต เด•เต‹เดกเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด’เดฐเต เด•เตเดฒเต—เดกเต เดธเต‡เดตเดจเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเดฏ เดฌเดฟเตฝเดกเต เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเดจเตเดจ เด˜เดŸเตเดŸเด™เตเด™เดณเดพเดฏเดฟ เด•เตเดฐเดฎเต€เด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดœเต‹เดฒเดฟเด•เตพ.
  • เด˜เดŸเตเดŸเด‚ (เดธเตเดฑเตเดฑเต‡เดœเต) - เดชเตˆเดชเตเดชเตเดฒเตˆเตป เด“เตผเด—เดจเตˆเดธเต‡เดทเตป เดฏเต‚เดฃเดฟเดฑเตเดฑเต, 1+ เดŸเดพเดธเตเด•เตเด•เต เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจเต,
  • เดšเตเดฎเดคเดฒ (เดœเต‡เดพเดฒเดฟ) เดชเตˆเดชเตเดชเตเดฒเตˆเดจเดฟเดฒเต† เดœเต‹เดฒเดฟเดฏเตเดŸเต† เด’เดฐเต เดฏเต‚เดฃเดฟเดฑเตเดฑเดพเดฃเต. เด‡เดคเดฟเตฝ เด’เดฐเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต (เดจเดฟเตผเดฌเดจเตเดงเด‚), เดฒเต‹เดžเตเดšเต เดตเตเดฏเดตเดธเตเดฅเด•เตพ, เดชเตเดฐเดพเดตเดธเตเดคเตเด•เตเด•เตพ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ/เด•เดพเดทเต† เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ เดŽเดจเตเดจเดฟเดตเดฏเตเด‚ เด…เดคเดฟเดฒเต‡เดฑเต†เดฏเตเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เด…เดคเดจเตเดธเดฐเดฟเดšเตเดšเต, CI / CD เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด•เต‹เดกเตเด‚ เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตเดฑเตเดฑเตเด•เดณเตเด‚ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‡เด•เตเด•เต เดตเดฐเตเดจเตเดจเต.

เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต: เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต?

  • เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต Gitlab?

เด•เดพเดฐเดฃเด‚ เดตเดณเตผเดคเตเดคเตเดฎเตƒเด—เด™เตเด™เดณเตเดŸเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดธเตเดตเด•เดพเดฐเตเดฏ เดถเต‡เด–เดฐเดฃเด™เตเด™เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดจเตเดจเดชเตเดชเต‹เตพ, เด…เดตเตผเด•เตเด•เต GitHub-เตฝ เดชเดฃเด‚ เดจเตฝเด•เดฟ, เดžเดพเตป เด…เดคเตเดฏเดพเด—เตเดฐเดนเดฟเดฏเดพเดฏเดฟเดฐเตเดจเตเดจเต. เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเด•เตพ เดธเตŒเดœเดจเตเดฏเดฎเดพเดฏเดฟ เดฎเดพเดฑเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เด‡เดคเตเดตเดฐเต† เดŽเดจเดฟเด•เตเด•เต GitHub-เดฒเต‡เด•เตเด•เต เดฎเดพเดฑเดพเตป เด‡เดคเต เดฎเดคเดฟเดฏเดพเดฏ เด•เดพเดฐเดฃเดฎเดฒเตเดฒ.

  • เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต Azure DevOps เดชเตˆเดชเตเดชเตเดฒเตˆเดจเตเด•เตพ เดชเดพเดŸเดฟเดฒเตเดฒ?

เด•เดพเดฐเดฃเด‚ เด…เดตเดฟเดŸเต† เด•เตเดฐเดฎเต€เด•เดฐเดฃเด‚ เดชเตเดฐเดพเดฅเดฎเดฟเด•เดฎเดพเดฃเต - เด•เดฎเดพเตปเดกเต เดฒเตˆเดจเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด…เดฑเดฟเดตเต เดชเต‹เดฒเตเด‚ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ. เดŽเด•เตโ€Œเดธเตโ€Œเดฑเตเดฑเต‡เดฃเตฝ เดœเดฟเดฑเตเดฑเต เดฆเดพเดคเดพเด•เตเด•เดณเตเดฎเดพเดฏเตเดณเตเดณ เดธเด‚เดฏเต‹เดœเดจเด‚ - เดฐเดฃเตเดŸเต เด•เตเดฒเดฟเด•เตเด•เตเด•เดณเดฟเดฒเต‚เดŸเต†, เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตโ€Œเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ SSH เด•เต€เด•เตพ เด‡เดฑเด•เตเด•เตเดฎเดคเดฟ เดšเต†เดฏเตเดฏเตเด• - เด•เต‚เดŸเดพเดคเต†, เด’เดฐเต เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเดฒเตเดฒเต†เด™เตเด•เดฟเดฒเตเด‚ เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต.

เด†เดฐเด‚เดญ เดธเตเดฅเดพเดจเด‚: เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‰เดณเตเดณเดคเตเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเตเดณเตเดณเดคเตเด‚

เดจเดฎเตเด•เตเด•เต เด‰เดฃเตเดŸเต:

  • GitLab-เดฒเต† เดถเต‡เด–เดฐเด‚.

เดžเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต:

  • เด“เดฐเต‹ เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเด•เตเด•เตเด‚ เดธเตเดตเดฏเดฎเต‡เดตเดฏเตเดณเตเดณ เด…เดธเด‚เดฌเตเดฒเดฟเดฏเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดจเดฏเตเด‚,
  • เด“เดฐเต‹ เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเด•เตเด•เตเด‚ เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดฎเดพเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เดคเดณเตเดณเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด•เดฎเตเดฎเดฟเดฑเตเดฑเต เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเตฝ เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เดฒเตˆเตป เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ,
  • Azure DevOps-เดฒเต† เด’เดฐเต เดธเตเดตเด•เดพเดฐเตเดฏ เดซเต€เดกเดฟเดฒเต‡เด•เตเด•เต เดฌเดฟเตฝเดฑเตเดฑเต เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต,
  • GitLab เดชเต‡เดœเตเด•เดณเดฟเตฝ เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเตเดฑเต†เดฏเตเด‚ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต†เดฏเตเด‚ เด…เดธเด‚เดฌเตเดฒเดฟ,
  • เดฌเดพเดกเตเดœเตเด•เตพ!11

เดตเดฟเดตเดฐเดฟเดšเตเดš เด†เดตเดถเตเดฏเด•เดคเด•เตพ เดœเตˆเดตเดฟเด•เดฎเดพเดฏเดฟ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดฎเต‹เดกเดฒเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต:

  • เด˜เดŸเตเดŸเด‚ 1 - เด…เดธเด‚เดฌเตเดฒเดฟ
    • เดžเด™เตเด™เตพ เด•เต‹เดกเต เดถเต‡เด–เดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดซเดฏเดฒเตเด•เตพ เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตเดฑเตเดฑเตเด•เดณเดพเดฏเดฟ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต
  • เด˜เดŸเตเดŸเด‚ 2 - เดชเดฐเดฟเดถเต‹เดงเดจ
    • เดจเดฟเตผเดฎเตเดฎเดพเดฃ เด˜เดŸเตเดŸเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดžเด™เตเด™เตพเด•เตเด•เต เดชเตเดฐเดพเดตเดธเตเดคเตเด•เตเด•เตพ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเต, เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพ เดจเดŸเดคเตเดคเตเดจเตเดจเต, เด•เต‹เดกเต เด•เดตเดฑเต‡เดœเต เดกเดพเดฑเตเดฑ เดถเต‡เด–เดฐเดฟเด•เตเด•เตเดจเตเดจเต
  • เด˜เดŸเตเดŸเด‚ 3 - เดธเดฎเตผเดชเตเดชเดฟเด•เตเด•เตเด•
    • เดŸเดพเดธเตเด•เต 1 - เดจเตเดฏเต‚เด—เดฑเตเดฑเต เดชเดพเด•เตเด•เต‡เดœเต เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเต เด…เดคเต Azure DevOps-เดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เตเด•
    • เดŸเดพเดธเตเด•เต 2 - เดžเด™เตเด™เตพ เดธเต‹เดดเตเดธเต เด•เต‹เดกเดฟเดฒเต† xmldoc เตฝ เดจเดฟเดจเตเดจเต เดธเตˆเดฑเตเดฑเต เดถเต‡เด–เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดคเต GitLab เดชเต‡เดœเตเด•เดณเดฟเตฝ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เดจเดฎเตเด•เตเด•เต เดคเตเดŸเด™เตเด™เดพเด‚!

เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดถเต‡เด–เดฐเดฟเด•เตเด•เตเดจเตเดจเต

เด…เด•เตเด•เต—เดฃเตเดŸเตเด•เตพ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เตเดจเตเดจเต

  1. เด’เดฐเต เด…เด•เตเด•เต—เดฃเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด• Microsoft Azure

  2. เดชเต‹เด•เตเด• เด…เดธเตเตผ เดกเต†เดตเตŠเดชเตโ€Œเดธเต

  3. เดžเด™เตเด™เตพ เด’เดฐเต เดชเตเดคเดฟเดฏ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต

    1. เดชเต‡เดฐเต - เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚
    2. เดฆเตƒเดถเตเดฏเดชเดฐเดค - เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚
      (เดเดคเดพเดฃเตเดŸเต) เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดคเตเดŸเด•เตเด•เด•เตเด•เดพเตผเด•เตเด•เดพเดฏเดฟ GitLab-เดฒเต† CI/CD-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เด—เตˆเดกเต

  4. เดจเดฟเด™เตเด™เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด• เดฌเดŸเตเดŸเดฃเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เตเดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ, เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด‚, เดจเดฟเด™เตเด™เดณเต† เด…เดคเดฟเดจเตเดฑเต† เดชเต‡เดœเดฟเดฒเต‡เด•เตเด•เต เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเตเดšเต†เดฏเตเดฏเตเด‚. เดˆ เดชเต‡เดœเดฟเตฝ, เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เดฏเดฟ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดจเดพเดตเดถเตเดฏ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเด•เตเด•เดพเด‚ (เด‡เดŸเดคเตเดตเดถเดคเตเดคเตเดณเตเดณ เดฒเดฟเดธเตเดฑเตเดฑเดฟเดฒเต† เดคเดพเดดเตเดจเตเดจ เดฒเดฟเด™เตเด•เต -> เด…เดตเดฒเต‹เด•เดจเด‚ -> Azure DevOps Services block)
    (เดเดคเดพเดฃเตเดŸเต) เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดคเตเดŸเด•เตเด•เด•เตเด•เดพเตผเด•เตเด•เดพเดฏเดฟ GitLab-เดฒเต† CI/CD-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เด—เตˆเดกเต

  5. Atrifacts-เดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด•, เดซเต€เดกเต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเด• เด•เตเดฒเดฟเด•เตเด•เตเดšเต†เดฏเตเดฏเตเด•

    1. เด‰เดฑเดตเดฟเดŸเดคเตเดคเดฟเดจเตเดฑเต† เดชเต‡เดฐเต เดจเตฝเด•เตเด•
    2. เดฆเตƒเดถเตเดฏเดชเดฐเดค เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•
    3. เด…เตบเดšเต†เด•เตเด•เต เดšเต†เดฏเตเดฏเตเด• เดชเตŠเดคเต เดชเตŠเดคเต เด‰เดฑเดตเดฟเดŸเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเตเด•, เด…เดคเดฟเดจเดพเตฝ เด‰เดฑเดตเดฟเดŸเด‚ เด’เดฐเต เดกเด‚เดชเต เดจเตเดฏเต‚เด—เดฑเตเดฑเต เด•เตเดฒเต‹เดฃเดพเดฏเดฟ เดฎเดพเดฑเดฟเดฒเตเดฒ
      (เดเดคเดพเดฃเตเดŸเต) เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดคเตเดŸเด•เตเด•เด•เตเด•เดพเตผเด•เตเด•เดพเดฏเดฟ GitLab-เดฒเต† CI/CD-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เด—เตˆเดกเต

  6. เดซเต€เดกเต เดšเต†เดฏเตเดฏเดพเตป เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเด• เด•เตเดฒเดฟเด•เตเด•เตเดšเต†เดฏเตเดฏเตเด•, เดตเดฟเดทเตเดตเตฝ เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•, เดฎเต†เดทเต€เตป เดธเต†เดฑเตเดฑเดชเตเดชเต เดฌเตเดฒเต‹เด•เตเด•เดฟเตฝ เดจเดฟเดจเตเดจเต เด‰เดฑเดตเดฟเดŸเด‚ เดชเด•เตผเดคเตเดคเตเด•
    (เดเดคเดพเดฃเตเดŸเต) เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดคเตเดŸเด•เตเด•เด•เตเด•เดพเตผเด•เตเด•เดพเดฏเดฟ GitLab-เดฒเต† CI/CD-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เด—เตˆเดกเต

  7. เด…เด•เตเด•เต—เดฃเตเดŸเต เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด•, เดตเตเดฏเด•เตเดคเดฟเด—เดค เด†เด•เตเดธเดธเต เดŸเต‹เด•เตเด•เตบ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•
    (เดเดคเดพเดฃเตเดŸเต) เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดคเตเดŸเด•เตเด•เด•เตเด•เดพเตผเด•เตเด•เดพเดฏเดฟ GitLab-เดฒเต† CI/CD-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เด—เตˆเดกเต

  8. เด’เดฐเต เดชเตเดคเดฟเดฏ เด†เด•เตโ€Œเดธเดธเต เดŸเต‹เด•เตเด•เตบ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเด•

    1. เดชเต‡เดฐเต - เดเด•เดชเด•เตเดทเต€เดฏเดฎเดพเดฏ
    2. เด“เตผเด—เดจเตˆเดธเต‡เดทเตป - เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณเดคเต
    3. เดชเดฐเดฎเดพเดตเดงเดฟ 1 เดตเตผเดทเดคเตเดคเต‡เด•เตเด•เต เดธเดพเดงเตเดคเดฏเตเดฃเตเดŸเต
    4. เดตเตเดฏเดพเดชเตเดคเดฟ - เดชเดพเด•เตเด•เต‡เดœเดฟเด‚เด—เต/เดตเดพเดฏเดฟเด•เตเด•เตเด• & เดŽเดดเตเดคเตเด•
      (เดเดคเดพเดฃเตเดŸเต) เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดคเตเดŸเด•เตเด•เด•เตเด•เดพเตผเด•เตเด•เดพเดฏเดฟ GitLab-เดฒเต† CI/CD-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เด—เตˆเดกเต

  9. เดธเตƒเดทเตเดŸเดฟเดšเตเดš เดŸเต‹เด•เตเด•เตบ เดชเด•เตผเดคเตเดคเตเด• - เดฎเต‹เดกเตฝ เดตเดฟเตปเดกเต‹ เด…เดŸเดšเตเดš เดถเต‡เดทเด‚, เดฎเต‚เดฒเตเดฏเด‚ เดฒเดญเตเดฏเดฎเดฒเตเดฒ

  10. GitLab-เดฒเต† เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด•, CI / CD เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•
    (เดเดคเดพเดฃเตเดŸเต) เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดคเตเดŸเด•เตเด•เด•เตเด•เดพเตผเด•เตเด•เดพเดฏเดฟ GitLab-เดฒเต† CI/CD-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เด—เตˆเดกเต

  11. เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดฌเตเดฒเต‹เด•เตเด•เต เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเด•, เดชเตเดคเดฟเดฏเตŠเดฐเต†เดฃเตเดฃเด‚ เดšเต‡เตผเด•เตเด•เตเด•

    1. เดชเต‡เดฐเต - เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเตเด•เดณเดฟเดฒเตเดฒเดพเดคเตเดคเดต (เด•เดฎเดพเตปเดกเต เดทเต†เดฒเตเดฒเดฟเตฝ เดฒเดญเตเดฏเดฎเดพเด•เตเด‚)
    2. เดฎเต‚เดฒเตเดฏเด‚ - เด–เดฃเตเดกเดฟเด• 9-เตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด†เด•เตเดธเดธเต เดŸเต‹เด•เตเด•เตบ
    3. เดฎเดพเดธเตเด•เต เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•
      (เดเดคเดพเดฃเตเดŸเต) เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดคเตเดŸเด•เตเด•เด•เตเด•เดพเตผเด•เตเด•เดพเดฏเดฟ GitLab-เดฒเต† CI/CD-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เด—เตˆเดกเต

เด‡เดคเต เดชเตเดฐเต€-เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เตเดจเตเดจเต.

เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเต เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เตเดจเตเดจเต

เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ, GitLab-เดฒเต† CI/CD เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต .gitlab-ci.yml เดถเต‡เด–เดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต† เดฎเต‚เดฒเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต. เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดˆ เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เด…เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดคเดฎเดพเดฏ เดชเดพเดคเตเดคเต เดธเดœเตเดœเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚, เดŽเดจเตเดจเดพเตฝ เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ เด…เดคเต เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ.

เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดพเดฃเดพเดจเดพเด•เตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เดซเดฏเดฒเดฟเตฝ เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเตฝ เด’เดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต YAML. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฑเต† เด‰เดฏเตผเดจเตเดจ เดคเดฒเดคเตเดคเดฟเดฒเตเด‚ เด“เดฐเต‹ เดจเต†เดธเตเดฑเตเดฑเดกเต เดฒเต†เดตเดฒเดฟเดฒเตเด‚ เดเดคเตŠเด•เตเด•เต† เด•เต€เด•เตพ เด‰เตพเด•เตเด•เตŠเดณเตเดณเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเต เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป เดตเดฟเดถเดฆเดฎเดพเด•เตเด•เตเดจเตเดจเต.

เด†เดฆเตเดฏเด‚, เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเดฟเดฒเต† เดกเต‹เด•เตเด•เตผ เด‡เดฎเต‡เดœเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดฒเดฟเด™เตเด•เต เดšเต‡เตผเด•เตเด•เดพเด‚, เด…เดคเดฟเตฝ เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เตพ เดจเดฟเตผเดตเดนเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด‚. เด‡เดคเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเต เดกเต‹เด•เตเด•เตผ เดนเดฌเดฟเดฒเต† .เดจเต†เดฑเตเดฑเต เด•เต‹เตผ เด‡เดฎเต‡เดœเตเด•เดณเตเดŸเต† เดชเต‡เดœเต. เดฆเดฟ เดธเดพเดฎเต‚เดนเดฟเด•เด‚ เดตเตเดฏเดคเตเดฏเดธเตเดค เดœเต‹เดฒเดฟเด•เตพเด•เตเด•เดพเดฏเดฟ เดเดคเต เดšเดฟเดคเตเดฐเด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เดฃเด‚ เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดถเดฆเดฎเดพเดฏ เด—เตˆเดกเต เด‰เดฃเตเดŸเต. .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/*

เดชเดพเดคเด•เตพ เดตเตˆเตฝเดกเตเด•เดพเตผเดกเตเด•เดณเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚ เด…เดตเดฏเต† เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดณเตเดชเตเดชเดฎเดพเด•เตเด•เตเดจเตเดจเต.

เด’เดฐเต เดŸเดพเดธเตโ€Œเด•เต เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตโ€Œเดฑเตเดฑเตเด•เตพ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เด™เตเด•เดฟเตฝ, เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เด“เดฐเต‹ เดŸเดพเดธเตโ€Œเด•เตเด•เดฟเดจเตเด‚ เด…เดต เด†เด•เตโ€Œเดธเดธเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚ - เด…เดต เดฏเดฅเดพเตผเดคเตเดฅ เดŸเดพเดธเตโ€Œเด•เตเด•เดฟเตฝ เดจเดฟเดจเตเดจเต เดถเต‡เด–เดฐเดฟเดšเตเดš เดถเต‡เด–เดฐเดฃ เดฑเต‚เดŸเตเดŸเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเตเดฎเตเดชเต‹เตพ เด…เดคเต‡ เดชเดพเดคเดฏเดฟเตฝ เดธเตเดฅเดฟเดคเดฟเดšเต†เดฏเตเดฏเตเด‚. เดชเตเดฐเดพเดตเดธเตเดคเตเด•เตเด•เตพ เดธเตˆเดฑเตเดฑเดฟเตฝ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดฒเดญเตเดฏเดฎเดพเดฃเต.

เด‡เดชเตเดชเต‹เตพ เดจเดฎเตเด•เตเด•เต เด’เดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเต เดคเดฏเตเดฏเดพเดฑเดพเดฏเดฟเด•เตเด•เดดเดฟเดžเตเดžเต (เดชเดฐเต€เด•เตเดทเดฟเดšเตเดšเต), เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เตพเด•เตเด•เดพเดฏเดฟ เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดธเตโ€Œเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ เดŽเดดเตเดคเตเดจเตเดจเดคเต เดคเตเดŸเดฐเดพเด‚.

เดžเด™เตเด™เตพ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ เดŽเดดเตเดคเตเดจเตเดจเต

เด’เดฐเตเดชเด•เตเดทเต‡, เด’เดฐเดฟเด•เตเด•เตฝ, เดตเดณเดฐเต† เดฆเต‚เดฐเต†เดฏเตเดณเตเดณ เด’เดฐเต เด—เดพเดฒเด•เตเดธเดฟเดฏเดฟเตฝ, เด•เดฎเดพเตปเดกเต เดฒเตˆเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดฐเต‹เดœเด•เตเดŸเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเต (.เดจเต†เดฑเตเดฑเดฟเตฝ เด‰เดณเตเดณเดต เด‰เตพเดชเตเดชเต†เดŸเต†) เด’เดฐเต เดตเต‡เดฆเดจเดฏเดพเดฏเดฟเดฐเตเดจเตเดจเต. เด‡เดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต 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 - GitLab-เดฒเต‡เด•เตเด•เต เด†เด•เตเดธเดธเต เดŸเต‹เด•เตเด•เดฃเตเดณเตเดณ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดฟเดจเตเดฑเต† เดชเต‡เดฐเต เดšเต‡เตผเดคเตเดคเต ("เด…เด•เตเด•เต—เดฃเตเดŸเตเด•เตพ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เตเดจเตเดจเต", เดชเต‡เดœเต 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 (GitLab เดชเต‡เดœเตเด•เดณเดฟเดฒเต† เดธเตˆเดฑเตเดฑเต เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฃ เดœเต‹เดฒเดฟเด•เตพเด•เตเด•เดพเดฏเดฟ เดธเด‚เดตเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดตเดพเด•เตเด•เต):
    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

เดกเต‹เด•เตโ€ŒเดŽเดซเตโ€ŒเดŽเด•เตโ€Œเดธเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดฒเดฟเดฑเดฟเด•เตเด•เตฝ เดกเตˆเด—เตเดฐเดทเตป

เดฎเตเดฎเตเดชเต, เด’เดฐเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเตเดฑเต† เด•เต‹เดกเต เด‰เดฑเดตเดฟเดŸเด‚ เด’เดฐเต เดชเดฐเดฟเดนเดพเดฐ เดซเดฏเดฒเดพเดฏเดฟ เดžเดพเตป เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดฟเดฐเตเดจเตเดจเต. เดŸเต†เดธเตเดฑเตเดฑเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเตเด‚ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดคเดพเดฃเต เดชเตเดฐเดงเดพเดจ เดชเต‹เดฐเดพเดฏเตเดฎ. เด‡เดคเต เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดˆ เดฎเต‚เดฒเตเดฏเด‚ เดจเต‹เดกเดฟเดฒเต‡เด•เตเด•เต เดธเดœเตเดœเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ 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-เตฝ เดฒเดญเตเดฏเดฎเดพเดฃเต:

(เดเดคเดพเดฃเตเดŸเต) เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดคเตเดŸเด•เตเด•เด•เตเด•เดพเตผเด•เตเด•เดพเดฏเดฟ GitLab-เดฒเต† CI/CD-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เด—เตˆเดกเต

เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เดฎเดฟเดฒเต† เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดฒเดฟเด™เตเด•เตเดณเตเดณ เด’เดฐเต เดฌเดพเดกเตเดœเต เดžเดพเตป เดธเตƒเดทเตโ€ŒเดŸเดฟเดšเตเดšเต Shields.io - เด…เดตเดฟเดŸเต† เดŽเดฒเตเดฒเดพเด‚ เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฃเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เดฌเดพเดกเตเดœเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเดจเตเด‚ เด’เดฐเต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดคเต เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚.

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

(เดเดคเดพเดฃเตเดŸเต) เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดคเตเดŸเด•เตเด•เด•เตเด•เดพเตผเด•เตเด•เดพเดฏเดฟ GitLab-เดฒเต† CI/CD-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เด—เตˆเดกเต

Azure DevOps เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตโ€Œเดฑเตเดฑเตเด•เตพ เดเดฑเตเดฑเดตเตเด‚ เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเดฟเดจเตŠเดชเตเดชเด‚ เดชเดพเด•เตเด•เต‡เดœเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดฌเดพเดกเตเดœเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเดจเตเด‚ เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, Azure DevOps เดธเตˆเดฑเตเดฑเดฟเดฒเต† เด‰เดฑเดตเดฟเดŸเดคเตเดคเดฟเตฝ, เดจเดฟเด™เตเด™เตพ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดค เดชเดพเด•เตเด•เต‡เดœเดฟเดจเดพเดฏเดฟ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด• เดฌเดพเดกเตเดœเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เตเดšเต†เดฏเตโ€Œเดคเต เดฎเดพเตผเด•เตเด•เตเดกเต—เตบ เดฎเดพเตผเด•เตเด•เตเด…เดชเตเดชเต เดชเด•เตผเดคเตเดคเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต:

(เดเดคเดพเดฃเตเดŸเต) เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดคเตเดŸเด•เตเด•เด•เตเด•เดพเตผเด•เตเด•เดพเดฏเดฟ GitLab-เดฒเต† CI/CD-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เด—เตˆเดกเต

(เดเดคเดพเดฃเตเดŸเต) เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดคเตเดŸเด•เตเด•เด•เตเด•เดพเตผเด•เตเด•เดพเดฏเดฟ GitLab-เดฒเต† 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 - เด…เดคเต เด’เดŸเตเดŸเตเด‚ เดถเดฐเดฟเดฏเดฒเตเดฒ. เด…เดตเดฟเดŸเต† เดชเต‹เดฒเตเด‚ Auto DevOps เด†เดฃเตเด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต

เดจเดฟเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดธเตเดตเดฏเดฎเต‡เดต เด•เดฃเตเดŸเต†เดคเตเดคเตเด•, เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด•, เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•, เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเด•, เดจเดฟเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเด•

เด‡เดชเตเดชเต‹เตพ Azure-เดฒเต‡เด•เตเด•เต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ Pulumi เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดŸเดพเตผเด—เต†เดฑเตเดฑเต เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟ เดธเตเดตเดฏเดฎเต‡เดต เดจเดฟเตผเดฃเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเดพเดฏเดฟ เด’เดฐเต เดชเตˆเดชเตเดชเตเดฒเตˆเตป เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเดพเดจเดพเดฃเต เดชเดฆเตเดงเดคเดฟเดฏเดฟเดŸเตเดจเตเดจเดคเต, เด…เดคเต เด…เดŸเตเดคเตเดค เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเตเด‚.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•