เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เดตเดฟเด•เดธเดจเดคเตเดคเดฟเดจเดพเดฏเตเดณเตเดณ เดธเตเด•เดซเต‹เตพเดกเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เดตเดฟเด•เดธเดจเดคเตเดคเดฟเดจเดพเดฏเตเดณเตเดณ เดธเตเด•เดซเต‹เตพเดกเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เด’เดจเตเดจเดฐ เดตเตผเดทเด‚ เดฎเตเดฎเตเดชเต, เดฎเดพเตผเดšเตเดšเต 5, 2018 เดจเต, เด—เต‚เด—เดฟเตพ เด…เดคเดฟเดจเตเดฑเต† เด“เดชเตเดชเตบ เดธเต‹เดดเตเดธเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เด†เดฆเตเดฏ เด†เตฝเดซ เดชเดคเดฟเดชเตเดชเต CI/CD เดŽเดจเตเดจ เดชเต‡เดฐเดฟเตฝ เดชเตเดฑเดคเตเดคเดฟเดฑเด•เตเด•เดฟ. เดธเตเด•เดซเต‹เตพเดกเต, "เดฒเดณเดฟเดคเดตเตเด‚ เด†เดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดตเตเดจเตเดจเดคเตเดฎเดพเดฏ เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เดตเดฟเด•เดธเดจเด‚" เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฏเดฟเดฐเตเดจเตเดจเต เด†เดฐเตเดŸเต† เดฒเด•เตเดทเตเดฏเด‚, เด…เดคเตเดตเดดเดฟ เดกเดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เต เดญเดฐเดฃเดคเตเดคเต‡เด•เตเด•เดพเตพ เดตเดฟเด•เดธเดจเดคเตเดคเดฟเตฝ เดถเตเดฐเดฆเตเดง เด•เต‡เดจเตเดฆเตเดฐเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. เดธเตเด•เดซเต‹เตพเดกเดฟเดจเต† เด•เตเดฑเดฟเดšเตเดšเต เดฐเดธเด•เดฐเดฎเดพเดฏเดคเต เดŽเดจเตเดคเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚? เด…เดคเต เดฎเดพเดฑเตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เดกเต†เดตเดฒเดชเตเดชเตผ, เด’เดฐเตเดชเด•เตเดทเต† เด“เดชเตเดชเดฑเต‡เดทเตปเดธเต เดŽเดžเตเดšเดฟเดจเต€เดฏเตผ เดŽเดจเตเดจเดฟเดตเดฏเตโ€Œเด•เตเด•เต เดชเต‹เดฒเตเด‚ เด‡เดคเต เด’เดฐเต เดถเด•เตเดคเดฎเดพเดฏ เด‰เดชเด•เดฐเดฃเดฎเดพเด•เตเด•เดฟ เดฎเดพเดฑเตเดฑเดพเตป เด…เดคเดฟเดจเตเดฑเต† เดธเตเดฒเต€เดตเดฟเดจเต เด•เตเดฑเดšเตเดšเต เดคเดจเตเดคเตเดฐเด™เตเด™เดณเตเดฃเตเดŸเต. เดชเดฆเตเดงเดคเดฟเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เด•เดดเดฟเดตเตเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เดจเดฎเตเด•เตเด•เต เดชเดฐเดฟเดšเดฏเดชเตเดชเต†เดŸเดพเด‚.

NB: เดตเดดเดฟเดฏเดฟเตฝ, เดžเด™เตเด™เดณเตเดŸเต† เดชเตŠเดคเตเดตเดฟเตฝ เดธเตเด•เดซเต‹เตพเดกเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดžเด™เตเด™เตพ เด‡เดคเดฟเดจเด•เด‚ เดธเด‚เด•เตเดทเดฟเดชเตเดคเดฎเดพเดฏเดฟ เดธเด‚เดธเดพเดฐเดฟเดšเตเดšเต เดกเต†เดตเดฒเดชเตเดชเตผ เดŸเต‚เดณเตเด•เดณเตเดŸเต† เด…เดตเดฒเต‹เด•เดจเด‚, เด…เดตเดฐเตเดŸเต† เดœเต€เดตเดฟเดคเด‚ เด•เตเดฌเตผเดจเต†เดฑเตเดฑเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดธเดฟเดฆเตเดงเดพเดจเตเดคเด‚. เด‰เดฆเตเดฆเต‡เดถเตเดฏเดตเตเด‚ เด•เดดเดฟเดตเตเด•เดณเตเด‚

เด…เดคเดฟเดจเดพเตฝ, เดชเตŠเดคเตเดตเดพเดฏเดฟ เดชเดฑเดžเตเดžเดพเตฝ, CI/CD เดธเตˆเด•เตเด•เดฟเตพ เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตเดฐเดถเตเดจเด‚ เดธเตเด•เดซเต‹เตพเดกเต เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเต (เดฌเดฟเตฝเดกเต, เดชเตเดทเต, เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเดจเตเดจ เด˜เดŸเตเดŸเด™เตเด™เดณเดฟเตฝ), เดกเต†เดตเดฒเดชเตเดชเตผ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดซเต€เดกเตเดฌเดพเด•เตเด•เต เดตเดพเด—เตเดฆเดพเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด…เดคเดพเดฏเดคเต. เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เด•เต‹เดกเต เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตเดŸเต† เดซเดฒเด‚ เดตเต‡เด—เดคเตเดคเดฟเตฝ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต - เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดค เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เดฐเต‚เดชเดคเตเดคเดฟเตฝ. เด•เต‚เดŸเดพเดคเต† เด‡เดคเดฟเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดค เดธเตผเด•เตเดฏเต‚เดŸเตเดŸเตเด•เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ (เดฆเต‡เดตเต, เดธเตเดฑเตเดฑเต‡เดœเต, เดชเตเดฐเตŠเดกเด•เตเดทเตป...), เด‡เดคเดฟเดจเดพเดฏเดฟ เดฑเต‹เตพเด”เดŸเตเดŸเดฟเดจเตเดณเตเดณ เด…เดจเตเดฌเดจเตเดง เดชเตˆเดชเตเดชเตเดฒเตˆเดจเตเด•เตพ เดตเดฟเดตเดฐเดฟเด•เตเด•เดพเตป เดธเตเด•เดซเต‹เตพเดกเต เดธเดนเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเต.

เดธเตเด•เดซเต‹เตพเดกเดฟเดจเตเดฑเต† เดธเต‹เดดเตเดธเต เด•เต‹เดกเต Go-เดฏเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดคเดคเต เดธเต—เดœเดจเตเดฏ เด…เดชเตเดชเดพเดšเตเดšเต† เดฒเตˆเดธเตปเดธเดฟเดจเต เด•เต€เดดเดฟเดฒเตเดณเตเดณ 2.0 (GitHub).

เดชเตเดฐเดงเดพเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ เดธเดตเดฟเดถเต‡เดทเดคเด•เดณเตเด‚ เดจเต‹เด•เตเด•เดพเด‚. เด†เดฆเตเดฏเดคเตเดคเต‡เดคเดฟเตฝ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต:

  • CI/CD เดชเตˆเดชเตเดชเต เดฒเตˆเดจเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดŸเต‚เดณเตเด•เตพ เดธเตเด•เดซเต‹เตพเดกเต เดตเดพเด—เตเดฆเดพเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.
  • เดชเดถเตเดšเดพเดคเตเดคเดฒเดคเตเดคเดฟเตฝ เดธเต‹เดดเตโ€Œเดธเต เด•เต‹เดกเดฟเดฒเต† เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดจเดฟเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเตผ เดšเดฟเดคเตเดฐเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เด•เต‹เดกเต เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดˆ เดšเดฟเดคเตเดฐเด™เตเด™เตพ เดกเต‹เด•เตเด•เตผ เดฐเดœเดฟเดธเตโ€ŒเดŸเตเดฐเดฟเดฏเดฟเตฝ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด…เดตเดฏเต† เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เด’เดฐเต เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเดกเต เดชเตเดฐเต‹เดธเดธเตเดธเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต.
  • เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต† เดตเตผเด•เตเด•เดฟเด‚เด—เต เดกเดฏเดฑเด•เตเดŸเดฑเดฟเดฏเตเดฎเดพเดฏเดฟ เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเดฒเต† เดซเดฏเดฒเตเด•เตพ เดธเดฎเดจเตเดตเดฏเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต.
  • เด•เดฃเตเดŸเต†เดฏเตเดจเตผ-เดธเตเดŸเตเดฐเด•เตเดšเตผ-เดŸเต†เดธเตเดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฏเดพเดจเตเดคเตเดฐเดฟเด•เดฎเดพเดฏเดฟ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต.
  • เดซเต‹เตผเดตเต‡เดกเต เดชเต‹เตผเดŸเตเดŸเตเด•เตพ.
  • เด’เดฐเต เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เดฒเต‹เด—เตเด•เตพ เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเต.
  • Java, Node.js, Python, Go เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดŽเดดเตเดคเดฟเดฏ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดกเต€เดฌเด—เตเด—เดฟเด‚เด—เต เดšเต†เดฏเตเดฏเดพเตป เดธเดนเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเต.

เด‡เดชเตเดชเต‹เตพ เดธเดตเดฟเดถเต‡เดทเดคเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต:

  • เดธเตเด•เดซเต‹เตพเดกเดฟเดจเต เดคเดจเตเดจเต† เด•เตเดฒเดธเตเดฑเตเดฑเตผ-เดธเตˆเดกเต เด˜เดŸเด•เด™เตเด™เดณเดฟเดฒเตเดฒ. เด…เดคเดพเดฏเดคเต, เดˆ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเตเด•เดณเต† เด•เต‚เดŸเตเดคเตฝ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ.
  • เดจเดฟเด™เตเด™เดณเตเดŸเต† เด…เดชเต‡เด•เตเดทเดฏเตเด•เตเด•เดพเดฏเดฟ เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเตˆเดชเตเดชเต เดฒเตˆเดจเตเด•เตพ. เดจเดฟเด™เตเด™เตพ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดšเตเด•เตŠเดฃเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดชเตเดฐเดพเดฆเต‡เดถเดฟเด• เดฎเดฟเดจเดฟเด•เตเดฏเต‚เดฌเดฟเดฒเต‡เดฏเตโ€Œเด•เตเด•เตเด‚ เดคเตเดŸเตผเดจเตเดจเต เดธเตเดฑเตเดฑเต‡เดœเดฟเดฒเต‡เด•เตเด•เต‹ เดจเดฟเตผเดฎเตเดฎเดพเดฃเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต‹ เด•เต‹เดกเต เดชเตเดฑเดคเตเดคเดฟเดฑเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต‹? เดˆ เด†เดตเดถเตเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ เด‰เดฃเตเดŸเต เดชเตเดฐเตŠเดซเตˆเดฒเตเด•เตพ เด’เดฐเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดพเดฏเดฟ เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเตˆเดชเตเดชเต เดฒเตˆเดจเตเด•เตพ เดตเดฟเดตเดฐเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เด‰เดชเดฏเต‹เด•เตเดคเตƒ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด•เตพ, เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ, เดซเตเดฒเดพเด—เตเด•เตพ.
  • CLI. YAML-เตฝ เด•เตบเดธเต‹เตพ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเดฏเตเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด•เดณเตเด‚ เดฎเดพเดคเตเดฐเด‚. เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดถเตเดฐเดฎเด™เตเด™เดณเตเดŸเต† เดฑเดซเดฑเตปเดธเตเด•เตพ เด‡เดจเตเดฑเตผเดจเต†เดฑเตเดฑเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเดพเด•เตเด‚ เดชเดฐเต€เด•เตเดทเดฃเดพเดคเตเดฎเด• เดœเดฟเดฏเตเด, เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด‡เดชเตเดชเต‹เตพ เด‡เดคเต เด…เตผเดคเตเดฅเดฎเดพเด•เตเด•เตเดจเตเดจเดคเต เด†เตผเด•เตเด•เต†เด™เตเด•เดฟเดฒเตเด‚ เด…เดตเดจเต† เด†เดตเดถเตเดฏเดฎเดพเดฃเต†เดจเตเดจเดพเดฃเต, เดชเด•เตเดทเต‡ เดถเดฐเดฟเด•เตเด•เตเด‚ เด…เดฒเตเดฒ.
  • เดฎเต‹เดกเตเดฒเดพเดฐเดฟเดฑเตเดฑเดฟ. เดธเตเด•เดซเต‹เตพเดกเต เด’เดฐเต เด’เดฑเตเดฑเดชเตเดชเต†เดŸเตเดŸ เด•เตŠเดฏเตเดคเตเดคเตเด•เดพเดฐเตป เด…เดฒเตเดฒ, เดŽเดจเตเดจเดพเตฝ เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดŸเดพเดธเตเด•เตเด•เตเด•เตพเด•เตเด•เดพเดฏเดฟ เดตเตเดฏเด•เตเดคเดฟเด—เดค เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เดณเต‹ เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เดชเดฐเดฟเดนเดพเดฐเด™เตเด™เดณเต‹ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเดจเตเดจเต.

เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต‡เดคเดฟเดจเตเดฑเต† เดฆเตƒเดทเตเดŸเดพเดจเตเดคเด‚:

  • เด…เดธเด‚เดฌเตเดฒเดฟ เด˜เดŸเตเดŸเดคเตเดคเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚:
    • เดกเต‹เด•เตเด•เตผ เดฌเดฟเตฝเดกเต เดชเตเดฐเดพเดฆเต‡เดถเดฟเด•เดฎเดพเดฏเดฟ, เด’เดฐเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเตฝ เด•เดจเดฟเด•เตเด•เต‹ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต‹ Google เด•เตเดฒเต—เดกเต เดฌเดฟเตฝเดกเดฟเดฒเต‹;
    • เดชเตเดฐเดพเดฆเต‡เดถเดฟเด•เดฎเดพเดฏเดฟ เดฌเดพเดธเตฝ;
    • เดœเดฟเดฌเต เดฎเดพเดตเต†เดจเตเด‚ เดœเดฟเดฌเต เด—เตเดฐเต‡เดกเดฟเดฒเตเด‚ เดชเตเดฐเดพเดฆเต‡เดถเดฟเด•เดฎเดพเดฏเต‹ Google เด•เตเดฒเต—เดกเต เดฌเดฟเตฝเดกเดฟเดฒเต‹;
    • เด•เดธเตเดฑเตเดฑเด‚ เดฌเดฟเตฝเดกเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ เดชเตเดฐเดพเดฆเต‡เดถเดฟเด•เดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเดฑเตเดฑเตŠเดฐเต (เด•เต‚เดŸเตเดคเตฝ เดตเดดเด•เตเด•เดฎเตเดณเตเดณ/เดชเดฐเดฟเดšเดฟเดคเดฎเดพเดฏ/...) เดฌเดฟเตฝเดกเต เดธเตŠเดฒเตเดฏเต‚เดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดฃเดฎเต†เด™เตเด•เดฟเตฝ, เด…เดคเต เดธเตโ€Œเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเตฝ เดตเดฟเดตเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ เดธเตเด•เดซเต‹เตพเดกเต เด…เดคเต เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด‚ (เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด‰เดฆเดพเดนเดฐเดฃเด‚). เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดตเดฟเดณเดฟเด•เตเด•เดพเดตเตเดจเตเดจ เดเดคเต เด•เดณเด•เตเดŸเดฑเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เด‡เดคเต เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต;
  • เดชเดฐเต€เด•เตเดทเดฃ เด˜เดŸเตเดŸเดคเตเดคเดฟเตฝ, เด‡เดคเดฟเดจเด•เด‚ เดธเต‚เดšเดฟเดชเตเดชเดฟเดšเตเดšเดคเต เด•เดฃเตเดŸเต†เดฏเตเดจเตผ-เดธเตเดŸเตเดฐเด•เตเดšเตผ-เดŸเต†เดธเตเดฑเตเดฑเต;
  • เดตเดฟเดจเตเดฏเดพเดธเดคเตเดคเดฟเดจเดพเดฏเดฟ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต เดจเตฝเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต:
    • เด•เตเดฌเต†เด•เตเดŸเตฝ;
    • เดนเต†เตฝเด‚;
    • เด‡เดทเตเดŸเดพเดจเตเดธเตƒเดคเดฎเดพเด•เตเด•เตเด•.

เด‡เดคเดฟเดจเต เดจเดจเตเดฆเดฟ, เดธเตเด•เดซเต‹เตพเดกเดฟเดจเต† เด…เดฆเตเดตเดฟเดคเต€เดฏเดฎเต†เดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เดพเด‚ CI/CD เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเต. เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃ เดตเตผเด•เตเด•เตเดซเตเดฒเต‹ เด‡เดคเดพ (เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเต):

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เดตเดฟเด•เดธเดจเดคเตเดคเดฟเดจเดพเดฏเตเดณเตเดณ เดธเตเด•เดซเต‹เตพเดกเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เดธเตเด•เดซเต‹เตพเดกเดฟเดจเตเดฑเต† เดœเต‹เดฒเดฟ เดชเตŠเดคเตเดตเต† เดŽเด™เตเด™เดจเต†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚?

  1. เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เดกเดฏเดฑเด•เตเดŸเดฑเดฟเดฏเดฟเดฒเต† เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เดจเดฟเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต. เดซเดฏเดฒเตเด•เดณเดฟเตฝ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดตเดฐเตเดคเตเดคเดฟเดฏเดพเตฝ, เด…เดต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดชเต‹เดกเตเดฎเดพเดฏเดฟ เดธเดฎเดจเตเดตเดฏเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚. เดธเดพเดงเตเดฏเดฎเต†เด™เตเด•เดฟเตฝ, เดšเดฟเดคเตเดฐเด‚ เดตเต€เดฃเตเดŸเตเด‚ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เดพเดคเต†. เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด’เดฐเต เดชเตเดคเดฟเดฏ เดšเดฟเดคเตเดฐเด‚ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต.
  2. เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเตผ-เดธเตเดŸเตเดฐเด•เตเดšเตผ-เดŸเต†เดธเตเดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดธเด‚เดฌเดฟเตพ เดšเต†เดฏเตโ€Œเดค เดšเดฟเดคเตเดฐเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเต เดŸเดพเด—เต เดšเต†เดฏเตโ€Œเดคเต เดกเต‹เด•เตเด•เตผ เดฐเดœเดฟเดธเตโ€ŒเดŸเตเดฐเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดšเตเดšเต.
  3. เด‡เดคเดฟเดจเตเดถเต‡เดทเด‚, เดšเดฟเดคเตเดฐเด‚ เดตเดฟเดจเตเดฏเดธเดฟเดšเตเดšเต - เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเตฝ เดตเดฟเดจเตเดฏเดธเดฟเดšเตเดšเต.
  4. เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เดฒเต‹เดžเตเดšเต เด†เดฐเด‚เดญเดฟเดšเตเดšเดคเต†เด™เตเด•เดฟเตฝ skaffold dev, เดคเตเดŸเตผเดจเตเดจเต เดžเด™เตเด™เตพ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดฒเต‹เด—เตเด•เตพ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดŽเดฒเตเดฒเดพ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ เดตเต€เดฃเตเดŸเตเด‚ เด†เดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเดพเดฑเตเดฑเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เดธเตเด•เดซเต‹เตพเดกเต เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เดตเดฟเด•เดธเดจเดคเตเดคเดฟเดจเดพเดฏเตเดณเตเดณ เดธเตเด•เดซเต‹เตพเดกเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚
เดธเตเด•เดซเต‹เตพเดกเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดฑเต† เดชเตเดฐเดงเดพเดจ เด˜เดŸเตเดŸเด™เตเด™เดณเตเดŸเต† เดšเดฟเดคเตเดฐเต€เด•เดฐเดฃเด‚

เดชเดฐเดฟเดถเต€เดฒเดฟเด•เตเด•เตเด•. เดธเตเด•เดซเต‹เตพเดกเต เดถเตเดฐเดฎเดฟเด•เตเด•เตเดจเตเดจเต

เดธเตเด•เดซเต‹เตพเดกเดฟเดจเตเดฑเต† เด‰เดชเดฏเต‹เด—เด‚ เดคเต†เดณเดฟเดฏเดฟเด•เตเด•เดพเตป, เดžเดพเตป เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดŽเดŸเตเด•เตเด•เตเด‚ GitHub เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดถเต‡เด–เดฐเด‚... เดตเดดเดฟเดฎเดงเตเดฏเต‡, เด…เดตเดฟเดŸเต† เดตเดฟเดตเดฟเดง เดชเตเดฐเดคเตเดฏเต‡เด•เดคเด•เตพ เด•เดฃเด•เตเด•เดฟเดฒเต†เดŸเตเด•เตเด•เตเดจเตเดจ เดฎเดฑเตเดฑเต เดจเดฟเดฐเดตเดงเดฟ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เด•เดดเดฟเดฏเตเด‚. เดŽเดฒเตเดฒเดพ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ เดžเดพเตป เดฎเดฟเดจเดฟเด•เตเดฏเต‚เดฌเดฟเตฝ เดชเตเดฐเดพเดฆเต‡เดถเดฟเด•เดฎเดพเดฏเดฟ เดจเดฟเตผเดตเดนเดฟเด•เตเด•เตเด‚. เด‡เตปเดธเตเดฑเตเดฑเดพเดณเต‡เดทเตป เดฒเดณเดฟเดคเดตเตเด‚ เด•เตเดฑเดšเตเดšเต เดฎเดฟเดจเดฟเดฑเตเดฑเตเด•เตพ เดŽเดŸเตเด•เตเด•เตเดจเตเดจเดคเตเดฎเดพเดฃเต, เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต kubectl เด†เดตเดถเตเดฏเดฎเดพเดฃเต.

เดธเตเด•เดซเต‹เตพเดกเต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด•:

curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64
chmod +x skaffold
sudo mv skaffold /usr/local/bin
skaffold version
v0.37.1

เด†เดตเดถเตเดฏเดฎเดพเดฏ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฎเตเด•เตเด•เต เดธเตเด•เดซเต‹เตพเดกเดฟเดจเตเดฑเต† เดถเต‡เด–เดฐเด‚ เด•เตเดฒเต‹เตบ เดšเต†เดฏเตเดฏเดพเด‚:

git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/microservices

เดžเดพเตป เดฐเดฃเตเดŸเต เดชเต‹เดกเตเด•เตพ เด‰เดณเตเดณ เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเต, เด“เดฐเต‹เดจเตเดจเดฟเดฒเตเด‚ เด’เดฐเต เดšเต†เดฑเดฟเดฏ Go เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปเดกเต (leeroy-web) เด†เดฃเต, เด…เดคเต เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเต† เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเดฒเต‡เด•เตเด•เต เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต - เดฌเดพเด•เตเด•เต†เตปเดกเต (leeroy-app). เด…เดคเต เดŽเด™เตเด™เดจเต†เดฏเตเดฃเตเดŸเต†เดจเตเดจเต เดจเต‹เด•เตเด•เดพเด‚:

~/skaffold/examples/microservices # tree
.
โ”œโ”€โ”€ leeroy-app
โ”‚   โ”œโ”€โ”€ app.go
โ”‚   โ”œโ”€โ”€ Dockerfile
โ”‚   โ””โ”€โ”€ kubernetes
โ”‚       โ””โ”€โ”€ deployment.yaml
โ”œโ”€โ”€ leeroy-web
โ”‚   โ”œโ”€โ”€ Dockerfile
โ”‚   โ”œโ”€โ”€ kubernetes
โ”‚   โ”‚   โ””โ”€โ”€ deployment.yaml
โ”‚   โ””โ”€โ”€ web.go
โ”œโ”€โ”€ README.adoc
โ””โ”€โ”€ skaffold.yaml
 
4 directories, 8 files

leeroy-app, leeroy-web เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เด—เต‹ เด•เต‹เดกเตเด‚ เดˆ เด•เต‹เดกเต เดชเตเดฐเดพเดฆเต‡เดถเดฟเด•เดฎเดพเดฏเดฟ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฒเดณเดฟเดคเดฎเดพเดฏ เดกเต‹เด•เตเด•เตผเดซเดฏเดฒเตเด•เดณเตเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต:

~/skaffold/examples/microservices # cat leeroy-app/Dockerfile
FROM golang:1.12.9-alpine3.10 as builder
COPY app.go .
RUN go build -o /app .
 
FROM alpine:3.10
CMD ["./app"]
COPY --from=builder /app .

เดžเดพเตป เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด•เต‹เดกเต เดจเตฝเด•เดฟเดฒเตเดฒ - เด…เดคเต เด…เดฑเดฟเดžเตเดžเดพเตฝ เดฎเดคเดฟ leeroy-web เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดต เดชเตเดฐเต‹เด•เตเดธเดฟ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต leeroy-app. เด…เดคเดฟเดจเดพเตฝ เดซเดฏเดฒเตเด•เดณเดฟเตฝ Deployment.yaml เดŽเดจเตเดจเดคเดฟเดจเต เดฎเดพเดคเตเดฐเด‚ เด’เดฐเต เดธเต‡เดตเดจเด‚ เด‰เดฃเตเดŸเต app (เด†เดจเตเดคเดฐเดฟเด• เดฑเต‚เดŸเตเดŸเดฟเด‚เด—เดฟเดจเดพเดฏเดฟ). เดชเต‹เดกเต เดชเต‹เตผเดŸเตเดŸเต web เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดฆเตเดฐเตเดค เดชเตเดฐเดตเต‡เดถเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เด…เดคเต เดžเด™เตเด™เตพเด•เตเด•เต เด•เตˆเดฎเดพเดฑเตเด‚.

เด‡เดคเต เดŽเด™เตเด™เดจเต†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ skaffold.yaml:

~/skaffold/examples/microservices # cat skaffold.yaml
apiVersion: skaffold/v1beta13
kind: Config
build:
  artifacts:
    - image: leeroy-web
      context: ./leeroy-web/
    - image: leeroy-app
      context: ./leeroy-app/
deploy:
  kubectl:
    manifests:
      - ./leeroy-web/kubernetes/*
      - ./leeroy-app/kubernetes/*
portForward:
  - resourceType: deployment
    resourceName: leeroy-web
    port: 8080
    localPort: 9000

เดฎเตเด•เดณเดฟเตฝ เดธเต‚เดšเดฟเดชเตเดชเดฟเดšเตเดš เดŽเดฒเตเดฒเดพ เด˜เดŸเตเดŸเด™เตเด™เดณเตเด‚ เด‡เดตเดฟเดŸเต† เดตเดฟเดตเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดˆ เด•เต‹เตบเดซเดฟเด—เดฑเดฟเดจเต เดชเตเดฑเดฎเต‡, เด†เด—เต‹เดณ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเตเดณเตเดณ เด’เดฐเต เดซเดฏเดฒเตเด‚ เด‰เดฃเตเดŸเต - ~/.skaffold/config. เด‡เดคเต เดธเตเดตเดฎเต‡เดงเดฏเดพ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ CLI เดตเดดเดฟ เดŽเดกเดฟเดฑเตเดฑเตเดšเต†เดฏเตเดฏเดพเดจเดพเด•เตเด‚ - เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด‡เดคเตเดชเต‹เดฒเต†:

skaffold config set --global local-cluster true

เดˆ เด•เดฎเดพเตปเดกเต เด—เตเดฒเต‹เดฌเตฝ เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดธเดœเตเดœเดฎเดพเด•เตเด•เตเด‚ local-cluster เด…เตผเดคเตเดฅเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต true, เด…เดคเดฟเดจเตเดถเต‡เดทเด‚ เดธเตเด•เดซเต‹เตพเดกเต เดšเดฟเดคเตเดฐเด™เตเด™เตพ เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดฐเดœเดฟเดธเตเดŸเตเดฐเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เดคเดณเตเดณเดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เดฟเดฒเตเดฒ. เดจเดฟเด™เตเด™เตพ เดชเตเดฐเดพเดฆเต‡เดถเดฟเด•เดฎเดพเดฏเดฟ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดชเตเดฐเดพเดฆเต‡เดถเดฟเด•เดฎเดพเดฏเดฟ เดšเดฟเดคเตเดฐเด™เตเด™เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดˆ เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚.

เดคเดฟเดฐเดฟเด•เต† skaffold.yaml:

  • เดตเต‡เดฆเดฟเดฏเดฟเตฝ build เดจเดฟเด™เตเด™เตพ เดšเดฟเดคเตเดฐเด‚ เดชเตเดฐเดพเดฆเต‡เดถเดฟเด•เดฎเดพเดฏเดฟ เดถเต‡เด–เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเดฃเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต. เดฌเดฟเตฝเดกเต เด†เดฆเตเดฏเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚, เดžเด™เตเด™เตพ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต เด•เดพเดฃเตเด‚:
    // ั‚.ะบ. Minikube ัะพะทะดะฐะตั‚ ะบะปะฐัั‚ะตั€ ะฒ ะพั‚ะดะตะปัŒะฝะพะน ะฒะธั€ั‚ัƒะฐะปัŒะฝะพะน ะผะฐัˆะธะฝะต,
    // ะฟั€ะธะดะตั‚ัั ะฟั€ะพะฝะธะบะฝัƒั‚ัŒ ะฒะฝัƒั‚ั€ัŒ, ั‡ั‚ะพะฑั‹ ะฝะฐะนั‚ะธ ะพะฑั€ะฐะทั‹
    # minikube ssh
    $ docker images
    REPOSITORY                                TAG                                                                IMAGE ID            CREATED             SIZE 
    leeroy-app                                7d55a50803590b2ff62e47e6f240723451f3ef6f8c89aeb83b34e661aa287d2e   7d55a5080359        4 hours ago         13MB 
    leeroy-app                                v0.37.1-171-g0270a0c-dirty                                         7d55a5080359        4 hours ago         13MB
    leeroy-web                                5063bfb29d984db1ff70661f17d6efcc5537f2bbe6aa6907004ad1ab38879681   5063bfb29d98        5 hours ago         13.1MB
    leeroy-web                                v0.37.1-171-g0270a0c-dirty                                         5063bfb29d98        5 hours ago         13.1MB

    เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดพเดฃเดพเดจเดพเด•เตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เดธเตเด•เดซเต‹เตพเดกเต เดšเดฟเดคเตเดฐเด™เตเด™เตพ เดธเตเดตเดฏเด‚ เดŸเดพเด—เต เดšเต†เดฏเตเดคเต. เดตเดดเดฟเดฏเดฟเตฝ, เดจเดฟเดฐเดตเดงเดฟ เดŸเดพเด—เดฟเด‚เด—เต เดจเดฏเด™เตเด™เตพ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต.

  • เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เด…เดคเต เดธเต‚เดšเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต context: ./leeroy-app/, เด…เดคเดพเดฏเดคเต. เดšเดฟเดคเตเดฐเด‚ เดถเต‡เด–เดฐเดฟเด•เตเด•เตเดจเตเดจ เดธเดจเตเดฆเตผเดญเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต.
  • เดตเดฟเดจเตเดฏเดพเดธ เด˜เดŸเตเดŸเดคเตเดคเดฟเตฝ, เด†เดตเดถเตเดฏเดฎเดพเดฏ เดฎเดพเดจเดฟเดซเต†เดธเตเดฑเตเดฑเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดžเด™เตเด™เตพ kubectl เด‰เด‚ เด’เดฐเต เดฎเดพเดธเตเด•เตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดจเดฟเตผเดฃเตเดฃเดฏเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต.
  • PortForward: เดžเด™เตเด™เตพ เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เดชเต‹เตผเดŸเตเดŸเตเด•เตพ เดŽเด™เตเด™เดจเต† เดซเต‹เตผเดตเต‡เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดŽเดจเตเดจเดคเดฟเดจเต เดธเดฎเดพเดจเดฎเดพเดฃเต kubectl port-forward, เดˆ เด•เดฎเดพเตปเดกเต เดตเดฟเดณเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดธเตเด•เดซเต‹เตพเดกเดฟเดจเต เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ เดจเตฝเด•เตเดจเตเดจเต. เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดฒเต‹เด•เตเด•เตฝ เดชเต‹เตผเดŸเตเดŸเต 9000 เดŽเดจเตเดจ เดชเต‡เดฐเดฟเดจเตŠเดชเตเดชเด‚ เดตเดฟเดจเตเดฏเดพเดธเดคเตเดคเดฟเตฝ 8080 เดฒเต‡เด•เตเด•เต เด•เตˆเดฎเดพเดฑเตเดจเตเดจเต leeroy-web.

เดฒเต‹เดžเตเดšเต เดšเต†เดฏเตเดฏเดพเตป เดธเดฎเดฏเดฎเดพเดฏเดฟ skaffold dev: เดŸเต€เด‚ เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เด’เดฐเต "เดซเต€เดกเตเดฌเดพเด•เตเด•เต เดฒเต‚เดชเตเดชเต" เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด‚, เด…เดคเดพเดฏเดคเต. เด‡เดคเต เดŽเดฒเตเดฒเดพเด‚ เดถเต‡เด–เดฐเดฟเดšเตเดšเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เด‡เดชเตเดชเต‹เตพ เดชเต‹เดกเตเด•เดณเตเดŸเต† เด…เดตเดธเตเดฅเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดจเดฟเด™เตเด™เดณเต‹เดŸเต เดชเดฑเดฏเตเด‚, เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดจเดฟเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดชเต‹เดกเตเด•เดณเตเดŸเต† เด…เดตเดธเตเดฅ เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚.

เดฒเต‹เดžเตเดšเต เดซเดฒเด‚ เด‡เดคเดพ skaffold dev --port-forward เดตเต€เดฃเตเดŸเตเด‚ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เตเดฎเตเดชเต‹เตพ:

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เดตเดฟเด•เดธเดจเดคเตเดคเดฟเดจเดพเดฏเตเดณเตเดณ เดธเตเด•เดซเต‹เตพเดกเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เด†เดฆเตเดฏเด‚, เด•เดพเดทเต† เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดพเดฃเดพเด‚. เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดชเต‹เตผเดŸเตเดŸเตเด•เตพ เด•เตˆเดฎเดพเดฑเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดคเต เดฎเตเดคเตฝ --port-forward, เดธเตเด•เดพเดซเต‹เตพเดกเต เดชเต‹เตผเดŸเตเดŸเต เดซเต‹เตผเดตเต‡เดกเต เดšเต†เดฏเตเดคเต web, เด…เดตเตป เดšเต‹เดฆเดฟเดšเตเดšเดคเตเดชเต‹เดฒเต†, เดŽเดจเตเดจเดพเตฝ เด‡เดตเดฟเดŸเต† app เด…เดตเตป เดธเตเดตเดจเตเดคเด‚ เดตเดฟเดตเต‡เดšเดจเดพเดงเดฟเด•เดพเดฐเดคเตเดคเดฟเตฝ เดŽเดฑเดฟเดžเตเดžเต (เดเดฑเตเดฑเดตเตเด‚ เด…เดŸเตเดคเตเดคเตเดณเตเดณ เดธเต—เดœเดจเตเดฏเด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเต). เด‡เดคเดฟเดจเตเดถเต‡เดทเด‚, เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด†เดฆเตเดฏ เดฒเต‹เด—เตเด•เตพ เดžเด™เตเด™เตพเด•เตเด•เต เดฒเดญเดฟเด•เตเด•เตเด‚.

เด‡เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต‹เดฏเต†เดจเตเดจเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเด‚?

~/skaffold/examples/microservices # kubectl get po
NAME                          READY   STATUS    RESTARTS   AGE
leeroy-app-6998dfcc95-2nxvf   1/1     Running   0          103s
leeroy-web-69f7d47c9d-5ff77   1/1     Running   0          103s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy app!!!

เดซเดฏเตฝ เดชเดฐเดฟเดทเตเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต leeroy-app/app.go - เด•เตเดฑเดšเตเดšเต เดจเดฟเดฎเดฟเดทเด™เตเด™เตพ เด•เดŸเดจเตเดจเตเดชเต‹เดฏเดฟ... เด•เต‚เดŸเดพเดคเต†:

~/skaffold/examples/microservices # kubectl get po
NAME                          READY   STATUS    RESTARTS   AGE
leeroy-app-ffd79d986-l6nwp    1/1     Running   0          11s
leeroy-web-69f7d47c9d-5ff77   1/1     Running   0          4m59s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy Habr!!!

เด…เดคเต‡ เดธเดฎเดฏเด‚, เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเต เด’เดดเดฟเด•เต†, เดธเตเด•เดซเต‹เตพเดกเต เดคเดจเตเดจเต† เด•เตบเดธเต‹เดณเดฟเตฝ เดฎเตเดฎเตเดชเดคเตเดคเต† เด…เดคเต‡ เด•เดพเดฐเตเดฏเด‚ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเดšเตเดšเต: เด…เดคเต เด‰เดฐเตเดŸเตเดŸเดฟเด•เตเด•เดณเดžเตเดžเต. leeroy-app, เดŽเดฒเตเดฒเดพเด‚ เด’เดฑเตเดฑเดฏเดŸเดฟเด•เตเด•เต เด…เดฒเตเดฒ.

เด•เต‚เดŸเตเดคเตฝ เดชเดฐเดฟเดถเต€เดฒเดจเด‚

เด’เดฐเต เดชเตเดคเดฟเดฏ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเตเด•เดซเต‹เตพเดกเดฟเดจเตเดณเตเดณ เด•เต‹เตบเดซเดฟเด—เดฑเตเด•เตพ เดฌเต‚เดŸเตเดŸเตเดธเตเดŸเตเดฐเดพเดชเตเดชเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเดฎเต†เดจเตเดจเดคเตเด‚ เดŽเดŸเตเดคเตเดคเตเดชเดฑเดฏเต‡เดฃเตเดŸเดคเดพเดฃเต. init, เด‡เดคเต เดตเดณเดฐเต† เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฃเต. เด•เต‚เดŸเดพเดคเต†, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดจเดฟเดฐเดตเดงเดฟ เด•เต‹เตบเดซเดฟเด—เต‡เดทเดจเตเด•เตพ เดŽเดดเตเดคเดพเด‚: เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เด•เต‹เตบเดซเดฟเด—เดฑเดฟเตฝ เดตเดฟเด•เดธเดจเด‚ เดจเดŸเดคเตเดคเตเด•, เดคเตเดŸเตผเดจเตเดจเต เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเตเดฑเตเดฑเต‡เดœเดฟเดฒเต‡เด•เตเด•เต เดชเตเดฑเดชเตเดชเต†เดŸเตเด•. run (เด…เดคเต‡ เดชเตเดฐเด•เตเดฐเดฟเดฏ dev, เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดจเดฟเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ), เดฎเดฑเตเดฑเตŠเดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.

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

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

เด’เดชเตเดชเด‚ เดˆ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฃเด‚ Weaveworks เตฝ เดจเดฟเดจเตเดจเต เด‰เตฝเดชเตเดชเดพเดฆเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ เด’เดฐเต เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดฃเตเดŸเต†เดคเตเดคเดพเด‚.

เดคเต€เดฐเตเดฎเดพเดจเด‚

เดชเตˆเดชเตเดชเต เดฒเตˆเดจเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏ เด‰เดชเด•เดฐเดฃเดฎเดพเดฃเต เดธเตเด•เดซเต‹เตพเดกเต, เด…เดคเต เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต‡เด•เตเด•เต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเตเด‚ เดชเตเดฐเดพเดฅเดฎเดฟเด•เดฎเดพเดฏเดฟ เดตเดฟเด•เดธเดจ เด†เดตเดถเตเดฏเด™เตเด™เดณเดฟเตฝ เดถเตเดฐเดฆเตเดง เด•เต‡เดจเตเดฆเตเดฐเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเตเดฎเดพเดฃเต. เดกเดตเดฒเดชเตเดชเดฑเตเดŸเต† เด…เดŸเดฟเดธเตเดฅเดพเดจ เด†เดตเดถเตเดฏเด™เตเด™เตพ เด•เดฃเด•เตเด•เดฟเดฒเต†เดŸเตเด•เตเด•เตเดจเตเดจ เด’เดฐเต "เดนเตเดฐเดธเตเดต" เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเต เดตเดณเดฐเต† เดŽเดณเตเดชเตเดชเดฎเดพเด•เตเด•เตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เด†เดตเดถเตเดฏเดฎเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเดฒเดฟเดฏ เดชเตเดฐเด•เตเดฐเดฟเดฏเด•เตพ เดธเด‚เด˜เดŸเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. CI/CD เดชเตเดฐเด•เตเดฐเดฟเดฏเด•เดณเดฟเตฝ เดธเตเด•เดซเต‹เตพเดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเดฟเดฒเตŠเดจเตเดจเต เด•เต†เดพเดŸเตเดคเตเดคเต เด…เดคเตเดคเดฐเดฎเต†เดพเดฐเต เดชเดฐเต€เด•เตเดทเดฃ เดชเดฆเตเดงเดคเดฟ Kubernetes, gRPC, Istio, OpenCensus Tracing เดŽเดจเตเดจเดฟเดตเดฏเตเดŸเต† เด•เดดเดฟเดตเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 10 เดฎเตˆเด•เตเดฐเต‹ เดธเตผเดตเต€เดธเตเด•เตพ.

เดธเตเด•เดซเต‹เตพเดกเดฟเดจเต เด‡เดคเดฟเดจเด•เด‚ เดคเดจเตเดจเต† GitHub-เตฝ เดเด•เดฆเต‡เดถเด‚ 8000+ เดจเด•เตเดทเดคเตเดฐเด™เตเด™เดณเตเดฃเตเดŸเต, เด‡เดคเต Google เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดšเต†เดŸเตเดคเตเดคเดคเดพเดฃเต. Google เด•เดฃเตเดŸเต†เดฏเตเดจเตผ เดŸเต‚เดณเตเด•เตพ - เดชเตŠเดคเตเดตเต‡, เดˆ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดŽเดจเตเดจเต†เดจเตเดจเต‡เด•เตเด•เตเดฎเดพเดฏเดฟ เดธเดจเตเดคเต‹เดทเดคเตเดคเต‹เดŸเต† เดตเดฟเด•เดธเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดตเดฟเดถเตเดตเดธเดฟเด•เตเด•เดพเตป เดŽเดฒเตเดฒเดพ เด•เดพเดฐเดฃเดตเตเดฎเตเดฃเตเดŸเต.

เดชเดฟ.เดŽเดธเต

เดžเด™เตเด™เดณเตเดŸเต† เดฌเตเดฒเต‹เด—เดฟเดฒเตเด‚ เดตเดพเดฏเดฟเด•เตเด•เตเด•:

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

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