(เจฒเจ—เจญเจ—) เจชเฉ‚เจฐเจจ เจธเจผเฉเจฐเฉ‚เจ†เจค เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจฒเจˆ GitLab เจตเจฟเฉฑเจš CI/CD เจฒเจˆ เจ‡เฉฑเจ• เจ—เจพเจˆเจก

เจœเจพเจ‚ เจ†เจธเจพเจจ เจ•เฉ‹เจกเจฟเฉฐเจ— เจฆเฉ€ เจ‡เฉฑเจ• เจธเจผเจพเจฎ เจตเจฟเฉฑเจš เจ†เจชเจฃเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฒเจˆ เจธเฉเฉฐเจฆเจฐ เจฌเฉˆเจœ เจ•เจฟเจตเฉ‡เจ‚ เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ€เจ

เจธเฉฐเจญเจต เจคเฉŒเจฐ 'เจคเฉ‡, เจนเจฐเฉ‡เจ• เจกเจฟเจตเฉˆเจฒเจชเจฐ เจœเจฟเจธ เจ•เฉ‹เจฒ เจ•เจฟเจธเฉ‡ เจธเจฎเฉ‡เจ‚ เจ˜เฉฑเจŸเฉ‹ เจ˜เฉฑเจŸ เจ‡เฉฑเจ• เจชเจพเจฒเจคเฉ‚ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจนเฉˆ, เจจเฉ‚เฉฐ เจธเจฅเจฟเจคเฉ€เจ†เจ‚, เจ•เฉ‹เจก เจ•เจตเจฐเฉ‡เจœ, เจจเจ—เฉ‡เจŸ เจตเจฟเฉฑเจš เจชเฉˆเจ•เฉ‡เจœ เจธเฉฐเจธเจ•เจฐเจฃเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจธเฉเฉฐเจฆเจฐ เจฌเฉˆเจœเจพเจ‚ เจฌเจพเจฐเฉ‡ เจ–เฉเจœเจฒเฉ€ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ ... เจ…เจคเฉ‡ เจ‡เจธ เจ–เจพเจฐเจธเจผ เจจเฉ‡ เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เจน เจฒเฉ‡เจ– เจฒเจฟเจ–เจฃ เจฒเจˆ เจ…เจ—เจตเจพเจˆ เจ•เฉ€เจคเฉ€. เจ‡เจธเจจเฉ‚เฉฐ เจฒเจฟเจ–เจฃ เจฆเฉ€ เจคเจฟเจ†เจฐเฉ€ เจตเจฟเฉฑเจš, เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เจน เจธเฉเฉฐเจฆเจฐเจคเจพ เจฎเฉ‡เจฐเฉ‡ เจ‡เฉฑเจ• เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฟเฉฑเจš เจฎเจฟเจฒเฉ€:

(เจฒเจ—เจญเจ—) เจชเฉ‚เจฐเจจ เจธเจผเฉเจฐเฉ‚เจ†เจค เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจฒเจˆ GitLab เจตเจฟเฉฑเจš CI/CD เจฒเจˆ เจ‡เฉฑเจ• เจ—เจพเจˆเจก

เจ‡เจน เจฒเฉ‡เจ– เจคเฉเจนเจพเจจเฉ‚เฉฐ GitLab เจตเจฟเฉฑเจš เจ‡เฉฑเจ• .Net เจ•เฉ‹เจฐ เจ•เจฒเจพเจธ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฒเจˆ เจจเจฟเจฐเฉฐเจคเจฐ เจเจ•เฉ€เจ•เจฐเจฃ เจ…เจคเฉ‡ เจกเจฟเจฒเฉ€เจตเจฐเฉ€ เจฆเฉ‡ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจธเฉˆเจŸเจ…เจช, GitLab เจชเฉฐเจจเจฟเจ†เจ‚ 'เจคเฉ‡ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจชเฉเจฐเจ•เจพเจธเจผเจค เจ•เจฐเจจ, เจ…เจคเฉ‡ Azure DevOps เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจจเจฟเฉฑเจœเฉ€ เจซเฉ€เจก เจตเจฟเฉฑเจš เจฌเจฟเจฒเจŸ เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจจเฉ‚เฉฐ เจงเฉฑเจ•เจฃ เจฆเฉ‡ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจธเฉˆเจŸเจ…เจช เจฌเจพเจฐเฉ‡ เจฆเฉฑเจธเฉ‡เจ—เจพเฅค

VS เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจ เจฆเฉ‡ เจจเจพเจฒ เจตเจฟเจ•เจพเจธ เจตเจพเจคเจพเจตเจฐเจฃ เจตเจœเฉ‹เจ‚ เจตเจฐเจคเจฟเจ† เจ—เจฟเจ† เจธเฉ€ GitLab เจตเจฐเจ•เจซเจฒเฉ‹ (เจกเจฟเจตเฉˆเจฒเจชเจฎเฉˆเจ‚เจŸ เจตเจพเจคเจพเจตเจฐเจฃ เจคเฉ‹เจ‚ เจธเจฟเฉฑเจงเฉ‡ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจชเฉเจฐเจฎเจพเจฃเจฟเจค เจ•เจฐเจจ เจฒเจˆ)เฅค

เจธเฉฐเจ–เฉ‡เจช เจœเจพเจฃ เจชเจ›เจพเจฃ

เจธเฉ€เจกเฉ€ - เจ•เฉ€ เจ‡เจน เจ‰เจฆเฉ‹เจ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจœเจฆเฉ‹เจ‚ เจคเฉเจธเฉ€เจ‚ เจนเฉเจฃเฉ‡ เจงเฉฑเจ•เจพ เจ•เฉ€เจคเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจธเจญ เจ•เฉเจ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ•เจฒเจพเจ‡เฉฐเจŸ 'เจคเฉ‡ เจกเจฟเฉฑเจ— เจ—เจฟเจ† เจนเฉˆ?

CI/CD เจ•เฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ€ เจฒเฉ‹เฉœ เจ•เจฟเจ‰เจ‚ เจนเฉˆ - เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ†เจธเจพเจจเฉ€ เจจเจพเจฒ เจ—เฉ‚เจ—เจฒ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค GitLab เจตเจฟเฉฑเจš เจชเจพเจˆเจชเจฒเจพเจˆเจจเจพเจ‚ เจฆเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจ•เจฐเจจ เจฌเจพเจฐเฉ‡ เจชเฉ‚เจฐเฉ‡ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจฒเฉฑเจญเฉ‹ เจตเฉ€ เจ†เจธเจพเจจ. เจ‡เฉฑเจฅเฉ‡ เจฎเฉˆเจ‚ เจธเฉฐเจ–เฉ‡เจช เจตเจฟเฉฑเจš เจ…เจคเฉ‡, เจœเฉ‡ เจธเฉฐเจญเจต เจนเฉ‹เจตเฉ‡, เจฌเจฟเจจเจพเจ‚ เจ•เจฟเจธเฉ‡ เจ•เจฎเฉ€เจ†เจ‚ เจฆเฉ‡ เจ‡เฉฑเจ• เจชเฉฐเจ›เฉ€ เจฆเฉ€ เจ…เฉฑเจ– เจฆเฉ‡ เจฆเฉเจฐเจฟเจธเจผ เจคเฉ‹เจ‚ เจธเจฟเจธเจŸเจฎ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจพเจ‚เจ—เจพ:

  • เจกเจฟเจตเฉˆเจฒเจชเจฐ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเจšเจจเจฌเฉฑเจงเจคเจพ เจญเฉ‡เจœเจฆเจพ เจนเฉˆ, เจธเจพเจˆเจŸ เจฆเฉเจ†เจฐเจพ เจ‡เฉฑเจ• เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ, เจœเจพเจ‚ เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ, เจธเจชเฉฑเจธเจผเจŸ เจœเจพเจ‚ เจ…เจชเฉเจฐเจคเฉฑเจ– เจคเฉŒเจฐ 'เจคเฉ‡ เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆ,
  • เจธเจพเจฐเฉ‡ เจ•เจพเจฐเจœ เจธเฉฐเจฐเจšเจจเจพ เจคเฉ‹เจ‚ เจšเฉเจฃเฉ‡ เจ—เจ เจนเจจ, เจœเจฟเจธ เจฆเฉ€เจ†เจ‚ เจธเจผเจฐเจคเจพเจ‚ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฆเจฟเฉฑเจคเฉ‡ เจธเฉฐเจฆเจฐเจญ เจตเจฟเฉฑเจš เจฒเจพเจ‚เจš เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ,
  • เจ•เจพเจฐเจœ เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจชเฉœเจพเจตเจพเจ‚ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ เจ†เจฏเฉ‹เจœเจฟเจค เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ,
  • เจชเฉœเจพเจ… เจฌเจฆเจฒเฉ‡ เจตเจฟเฉฑเจš เจšเจฒเจพเจ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ - เจ…เจฐเจฅเจพเจค เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจ‡เจธ เจชเฉœเจพเจ… เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจ•เฉฐเจฎ เจชเฉ‚เจฐเฉ‡ เจนเฉ‹ เจ—เจ เจนเจจ,
  • เจœเฉ‡ เจธเจŸเฉ‡เจœ เจซเฉ‡เจฒ เจนเฉ‹ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ (เจ…เจฐเจฅเจพเจค, เจธเจŸเฉ‡เจœ เจฆเจพ เจ˜เฉฑเจŸเฉ‹ เจ˜เฉฑเจŸ เจ‡เฉฑเจ• เจ•เฉฐเจฎ เจ…เจธเจซเจฒ เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆ), เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจฐเฉเจ• เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ (เจฒเจ—เจญเจ— เจนเจฎเฉ‡เจธเจผเจพ),
  • เจœเฉ‡เจ•เจฐ เจธเจพเจฐเฉ‡ เจชเฉœเจพเจ… เจธเจซเจฒเจคเจพเจชเฉ‚เจฐเจตเจ• เจชเฉ‚เจฐเฉ‡ เจนเฉ‹ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, เจคเจพเจ‚ เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจจเฉ‚เฉฐ เจธเจซเจฒ เจฎเฉฐเจจเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚, เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจนเฉˆ:

  • เจชเจพเจˆเจชเจฒเจพเจˆเจจ - เจชเฉœเจพเจตเจพเจ‚ เจตเจฟเฉฑเจš เจธเฉฐเจ—เจ เจฟเจค เจ•เจพเจฐเจœเจพเจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจน เจœเจฟเจธ เจตเจฟเฉฑเจš เจคเฉเจธเฉ€เจ‚ เจฌเจฟเจฒเจก เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจŸเฉˆเจธเจŸ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจชเฉˆเจ•เฉ‡เจœ เจ•เฉ‹เจก เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ‡เฉฑเจ• เจ•เจฒเจพเจ‰เจก เจธเฉ‡เจตเจพ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฎเฉเจ•เฉฐเจฎเจฒ เจฌเจฟเจฒเจก เจจเฉ‚เฉฐ เจคเฉˆเจจเจพเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ†เจฆเจฟ,
  • เจชเฉœเจพเจ… (เจชเฉœเจพเจ…) โ€” เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจธเฉฐเจ—เจ เจจ เจฏเฉ‚เจจเจฟเจŸ, 1+ เจŸเจพเจธเจ• เจฐเฉฑเจ–เจฆเจพ เจนเฉˆ,
  • เจ•เฉฐเจฎ (เจ…เฉฑเจฏเฉ‚เจฌ) เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจตเจฟเฉฑเจš เจ•เฉฐเจฎ เจฆเฉ€ เจ‡เฉฑเจ• เจ‡เจ•เจพเจˆ เจนเฉˆเฅค เจ‡เจธ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเจ•เฉเจฐเจฟเจชเจŸ (เจฒเจพเจœเจผเจฎเฉ€), เจฒเจพเจ‚เจš เจธเจผเจฐเจคเจพเจ‚, เจชเฉเจฐเจ•เจพเจธเจผเจจ/เจ•เฉˆเจธเจผเจฟเฉฐเจ— เจ•เจฒเจพเจคเจฎเจ• เจšเฉ€เจœเจผเจพเจ‚ เจฒเจˆ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจฌเจนเฉเจค เจ•เฉเจ เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค

เจ‡เจธ เจ…เจจเฉเจธเจพเจฐ, เจธเฉ€เจ†เจˆ / เจธเฉ€เจกเฉ€ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ เจ•เจพเจฐเจœเจพเจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจน เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจนเฉ‡เจ เจพเจ‚ เจ†เจ‰เจ‚เจฆเจพ เจนเฉˆ เจœเฉ‹ เจ•เฉ‹เจก เจ…เจคเฉ‡ เจ•เจฒเจพเจคเจฎเจ• เจšเฉ€เจœเจผเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃ, เจŸเฉˆเจธเจŸ เจ•เจฐเจจ เจ…เจคเฉ‡ เจชเฉเจฐเจ•เจพเจธเจผเจค เจ•เจฐเจจ เจฒเจˆ เจธเจพเจฐเฉ€เจ†เจ‚ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€เจ†เจ‚ เจ•เจพเจฐเจตเจพเจˆเจ†เจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚: เจ•เจฟเจ‰เจ‚?

  • Gitlab เจ•เจฟเจ‰เจ‚?

เจ•เจฟเจ‰เจ‚เจ•เจฟ เจœเจฆเฉ‹เจ‚ เจชเจพเจฒเจคเฉ‚ เจœเจพเจจเจตเจฐเจพเจ‚ เจฆเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸเจพเจ‚ เจฒเจˆ เจชเฉเจฐเจพเจˆเจตเฉ‡เจŸ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจฌเจฃเจพเจ‰เจฃเจพ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉ‹ เจ—เจฟเจ† เจธเฉ€, เจคเจพเจ‚ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ GitHub 'เจคเฉ‡ เจญเฉเจ—เจคเจพเจจ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€, เจ…เจคเฉ‡ เจฎเฉˆเจ‚ เจฒเจพเจฒเจšเฉ€ เจธเฉ€. เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจฎเฉเจซเจค เจนเฉ‹ เจ—เจˆเจ†เจ‚ เจนเจจ, เจชเจฐ เจนเฉเจฃ เจคเฉฑเจ• เจ‡เจน เจฎเฉ‡เจฐเฉ‡ เจฒเจˆ เจ—เจฟเจŸเจนเจฌ เจตเจฟเฉฑเจš เจœเจพเจฃ เจฆเจพ เจ•เจพเจซเจผเฉ€ เจ•เจพเจฐเจจ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค

  • Azure DevOps เจชเจพเจˆเจชเจฒเจพเจˆเจจเจพเจ‚ เจ•เจฟเจ‰เจ‚ เจจเจนเฉ€เจ‚?

เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‰เฉฑเจฅเฉ‡ เจธเฉˆเจŸเจฟเฉฐเจ— เจเจฒเฉ€เจฎเฉˆเจ‚เจŸเจฐเฉ€ เจนเฉˆ - เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจฆเฉ‡ เจ—เจฟเจ†เจจ เจฆเฉ€ เจตเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจฌเจพเจนเจฐเฉ€ เจ—เจฟเฉฑเจŸ เจชเฉเจฐเจฆเจพเจคเจพเจตเจพเจ‚ เจจเจพเจฒ เจเจ•เฉ€เจ•เจฐเจฃ - เจ•เฉเจ เจ•เจฒเจฟเฉฑเจ•เจพเจ‚ เจตเจฟเฉฑเจš, เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจ•เจฎเจฟเจŸ เจญเฉ‡เจœเจฃ เจฒเจˆ SSH เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจฆเจพ เจ†เจฏเจพเจค - เจตเฉ€, เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจจเฉ‚เฉฐ เจ†เจธเจพเจจเฉ€ เจจเจพเจฒ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจญเจพเจตเฉ‡เจ‚ เจ•เจฟ เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸ เจคเฉ‹เจ‚ เจจเจนเฉ€เจ‚เฅค

เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจธเจฅเจฟเจคเฉ€: เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ•เฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ•เฉ€ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹

เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ:

  • GitLab เจตเจฟเฉฑเจš เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€.

เจ…เจธเฉ€เจ‚ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚:

  • เจนเจฐเฉ‡เจ• เจ…เจญเฉ‡เจฆ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจฒเจˆ เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจ…เจคเฉ‡ เจŸเฉˆเจธเจŸเจฟเฉฐเจ—,
  • เจนเจฐเฉ‡เจ• เจตเจฟเจฒเฉ€เจจ เจฌเฉ‡เจจเจคเฉ€ เจฒเจˆ เจชเฉˆเจ•เฉ‡เจœ เจฌเจฃเจพเจ‰เจฃเจพ เจ…เจคเฉ‡ เจฎเจพเจธเจŸเจฐ เจจเฉ‚เฉฐ เจงเฉฑเจ•เจฃเจพ, เจฌเจธเจผเจฐเจคเฉ‡ เจ•เจฟ เจ•เจฎเจฟเจŸ เจธเฉเจจเฉ‡เจนเฉ‡ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ–เจพเจธ เจฒเจพเจˆเจจ เจนเฉ‹เจตเฉ‡,
  • Azure DevOps เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจชเฉเจฐเจพเจˆเจตเฉ‡เจŸ เจซเฉ€เจก เจจเฉ‚เฉฐ เจฌเจฟเจฒเจŸ เจชเฉˆเจ•เฉ‡เจœ เจญเฉ‡เจœเจฃเจพ,
  • GitLab เจชเฉฐเจจเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจ…เจคเฉ‡ เจชเฉเจฐเจ•เจพเจธเจผเจจ เจฆเฉ€ เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€,
  • เจฌเฉˆเจœ!11

เจตเจฐเจฃเจฟเจค เจฒเฉ‹เฉœเจพเจ‚ เจ†เจฐเจ—เฉˆเจจเจฟเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจฎเจพเจกเจฒ 'เจคเฉ‡ เจ†เจ‰เจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ:

  • เจชเฉœเจพเจ… 1 - เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€
    • เจ…เจธเฉ€เจ‚ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฒเจพเจคเจฎเจ• เจšเฉ€เจœเจผเจพเจ‚ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚
  • เจชเฉœเจพเจ… 2 - เจŸเฉˆเจธเจŸเจฟเฉฐเจ—
    • เจ…เจธเฉ€เจ‚ เจฌเจฟเจฒเจก เจธเจŸเฉ‡เจœ เจคเฉ‹เจ‚ เจ•เจฒเจพเจคเจฎเจ• เจšเฉ€เจœเจผเจพเจ‚ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจŸเฉˆเจธเจŸ เจšเจฒเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚, เจ•เฉ‹เจก เจ•เจตเจฐเฉ‡เจœ เจกเฉ‡เจŸเจพ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚
  • เจชเฉœเจพเจ… 3 - เจœเจฎเฉเจนเจพเจ‚ เจ•เจฐเฉ‹
    • เจŸเจพเจธเจ• 1 - เจจเฉเจ—เฉ‡เจŸ เจชเฉˆเจ•เฉ‡เจœ เจฌเจฃเจพเจ“ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ Azure DevOps เจจเฉ‚เฉฐ เจญเฉ‡เจœเฉ‹
    • เจŸเจพเจธเจ• 2 - เจ…เจธเฉ€เจ‚ เจธเจพเจˆเจŸ เจจเฉ‚เฉฐ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจตเจฟเฉฑเจš xmldoc เจคเฉ‹เจ‚ เจ‡เจ•เฉฑเจคเจฐ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ GitLab เจชเฉฐเจจเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚

เจ†เจ“ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ€เจ!

เจธเฉฐเจฐเจšเจจเจพ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐเจจเจพ

เจ–เจพเจคเฉ‡ เจคเจฟเจ†เจฐ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

  1. เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ–เจพเจคเจพ เจฌเจฃเจพเจ“ เจฎเจพเจˆเจ•เจฐเฉ‹เจธเจพเจซเจŸ เจ…เจœเจผเฉเจฐ

  2. เจตเฉฑเจฒ เจœเจพ Azure DevOps

  3. เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจจเจตเจพเจ‚ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚

    1. เจจเจพเจฎ - เจ•เฉ‹เจˆ เจตเฉ€
    2. เจฆเจฟเฉฑเจ– - เจ•เฉ‹เจˆ เจตเฉ€
      (เจฒเจ—เจญเจ—) เจชเฉ‚เจฐเจจ เจธเจผเฉเจฐเฉ‚เจ†เจค เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจฒเจˆ GitLab เจตเจฟเฉฑเจš CI/CD เจฒเจˆ เจ‡เฉฑเจ• เจ—เจพเจˆเจก

  4. เจœเจฆเฉ‹เจ‚ เจคเฉเจธเฉ€เจ‚ เจฌเจฃเจพเจ“ เจฌเจŸเจจ 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฌเจฃเจพเจ‡เจ† เจœเจพเจตเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ‡ เจชเฉฐเจจเฉ‡ 'เจคเฉ‡ เจฐเฉ€เจกเจพเจ‡เจฐเฉˆเจ•เจŸ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค เจ‡เจธ เจชเฉฐเจจเฉ‡ 'เจคเฉ‡, เจคเฉเจธเฉ€เจ‚ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ 'เจคเฉ‡ เจœเจพ เจ•เฉ‡ เจฌเฉ‡เจฒเฉ‹เฉœเฉ€เจ†เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจ…เจฏเฉ‹เจ— เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ (เจ–เฉฑเจฌเฉ‡ เจชเจพเจธเฉ‡ เจธเฉ‚เจšเฉ€ เจตเจฟเฉฑเจš เจนเฉ‡เจ เจฒเจพ เจฒเจฟเฉฐเจ• -> เจธเฉฐเจ–เฉ‡เจช เจœเจพเจฃเจ•เจพเจฐเฉ€ -> Azure DevOps เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฌเจฒเจพเจ•)
    (เจฒเจ—เจญเจ—) เจชเฉ‚เจฐเจจ เจธเจผเฉเจฐเฉ‚เจ†เจค เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจฒเจˆ GitLab เจตเจฟเฉฑเจš CI/CD เจฒเจˆ เจ‡เฉฑเจ• เจ—เจพเจˆเจก

  5. เจเจŸเฉเจฐเจฟเจซเฉˆเจ•เจŸเจธ 'เจคเฉ‡ เจœเจพเจ“, เจซเฉ€เจก เจฌเจฃเจพเจ“ 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเฉ‹

    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. เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจตเฉ‡เจฐเจตเฉ‡ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจ•เจฟเจนเฉœเฉ€เจ†เจ‚ เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจธเฉฐเจฐเจšเจจเจพ เจฆเฉ‡ เจ‰เฉฑเจชเจฐเจฒเฉ‡ เจชเฉฑเจงเจฐ 'เจคเฉ‡, เจ…เจคเฉ‡ เจนเจฐเฉ‡เจ• เจจเฉ‡เจธเจŸเจก เจชเฉฑเจงเจฐ 'เจคเฉ‡ เจฐเฉฑเจ–เฉ€เจ†เจ‚ เจœเจพ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจเฅค

เจชเจนเจฟเจฒเจพเจ‚, เจ†เจ“ เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจฒเจˆ เจ‡เฉฑเจ• เจฒเจฟเฉฐเจ• เจœเฉ‹เฉœเฉ€เจ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจ•เฉฐเจฎ เจ•เฉ€เจคเฉ‡ เจœเจพเจฃเจ—เฉ‡เฅค เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจฒเฉฑเจญเจฆเฉ‡ เจนเจพเจ‚ เจกเฉŒเจ•เจฐ เจนเฉฑเจฌ 'เจคเฉ‡ .เจจเฉˆเฉฑเจŸ เจ•เฉ‹เจฐ เจšเจฟเฉฑเจคเจฐ เจชเฉฐเจจเจพ. The 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 - "เจ–เจพเจคเฉ‡ เจคเจฟเจ†เจฐ เจ•เจฐเจจเจพ", เจชเฉฐเจจเจพ 6 เจฆเฉ‡ เจชเฉœเจพเจ… เจคเฉ‹เจ‚ เจธเจฐเฉ‹เจค เจฆเจพ URL
    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 - เจกเจฟเจซเฉŒเจฒเจŸ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ—เจฟเจŸเจฒเฉˆเจฌ เจชเฉฐเจจเจฟเจ†เจ‚ เจฒเจˆ เจ‡เฉฑเจ• เจธเจฐเฉ‹เจค เจตเจœเฉ‹เจ‚ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฆเฉ‡ เจฐเฉ‚เจŸ เจตเจฟเฉฑเจš เจœเจจเจคเจ• เจซเฉ‹เจฒเจกเจฐ เจฆเฉ€เจ†เจ‚ เจธเจฎเฉฑเจ—เจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจฒเฉˆเจ‚เจฆเจพ เจนเฉˆเฅค เจ•เจฟเจ‰เจ‚เจ•เจฟ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจจเฉ‡เจธเจŸ เจ•เฉ€เจคเฉ‡ เจ‡เฉฑเจ• เจซเฉ‹เจฒเจกเจฐ เจตเจฟเฉฑเจš เจธเจฅเจฟเจค เจนเฉ‹เจตเฉ‡เจ—เจพ - เจฎเจพเจฐเจ— เจตเจฟเฉฑเจš เจฒเฉˆเจตเจฒ เจ…เฉฑเจช เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹เฅค
  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

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 เจตเจฟเฉฑเจš เจ‰เจชเจฒเจฌเจง เจนเจจ:

(เจฒเจ—เจญเจ—) เจชเฉ‚เจฐเจจ เจธเจผเฉเจฐเฉ‚เจ†เจค เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจฒเจˆ GitLab เจตเจฟเฉฑเจš CI/CD เจฒเจˆ เจ‡เฉฑเจ• เจ—เจพเจˆเจก

เจฎเฉˆเจ‚ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ 'เจคเฉ‡ เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจฆเฉ‡ เจฒเจฟเฉฐเจ• เจจเจพเจฒ เจ‡เฉฑเจ• เจฌเฉˆเจœ เจฌเจฃเจพเจ‡เจ† เจนเฉˆ shields.io - เจ‰เฉฑเจฅเฉ‡ เจธเจญ เจ•เฉเจ เจฌเจฟเจฒเจ•เฉเจฒ เจธเจฟเฉฑเจงเจพ เจนเฉˆ, เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเจพ เจฌเฉˆเจœ เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจฌเฉ‡เจจเจคเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจชเฉเจฐเจพเจชเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

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

(เจฒเจ—เจญเจ—) เจชเฉ‚เจฐเจจ เจธเจผเฉเจฐเฉ‚เจ†เจค เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจฒเจˆ GitLab เจตเจฟเฉฑเจš CI/CD เจฒเจˆ เจ‡เฉฑเจ• เจ—เจพเจˆเจก

Azure DevOps Artifacts เจคเฉเจนเจพเจจเฉ‚เฉฐ เจจเจตเฉ€เจจเจคเจฎ เจธเฉฐเจธเจ•เจฐเจฃ เจตเจพเจฒเฉ‡ เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจฒเจˆ เจฌเฉˆเจœ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจ†เจ—เจฟเจ† เจตเฉ€ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, 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 เจ‡เจธ เจ—เจพเจˆเจก เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจœเจพเจชเจฆเจพ เจนเฉˆ เจจเจพเจฒเฉ‹เจ‚ เจ•เจฟเจคเฉ‡ เจœเจผเจฟเจ†เจฆเจพ เจตเจฟเจ†เจชเจ• เจ…เจคเฉ‡ เจฌเจนเฉเจชเฉฑเจ–เฉ€ เจนเฉˆ - เจ‡เจน เจฌเจฟเจฒเจ•เฉเจฒ เจตเฉ€ เจธเฉฑเจš เจจเจนเฉ€เจ‚ เจนเฉˆ. เจ‰เฉฑเจฅเฉ‡ เจตเฉ€ เจ†เจŸเฉ‹ DevOps เจนเฉˆเจฆเฉ€ เจ‡เจœเจพเจœเจผเจค

เจคเฉเจนเจพเจกเฉ€เจ†เจ‚ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจธเจตเฉˆเจšเจฒเจฟเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจ–เฉ‹เจœเฉ‹, เจฌเจฃเจพเจ“, เจŸเฉˆเจธเจŸ เจ•เจฐเฉ‹, เจคเฉˆเจจเจพเจค เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจ•เจฐเฉ‹

เจนเฉเจฃ เจชเจฒเฉเจฎเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจ…เจœเจผเฉเจฐ เจฒเจˆ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจคเฉˆเจจเจพเจค เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจฆเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจ•เจฐเจจ เจ…เจคเฉ‡ เจจเจฟเจธเจผเจพเจจเจพ เจตเจพเจคเจพเจตเจฐเจฃ เจจเฉ‚เฉฐ เจธเจตเฉˆเจšเจฒเจฟเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจฏเฉ‹เจœเจจเจพเจตเจพเจ‚ เจนเจจ, เจœเจฟเจธ เจจเฉ‚เฉฐ เจ…เจ—เจฒเฉ‡ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจ•เจตเจฐ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹