เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชฐ เช†เชงเซเชจเชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ, เชญเชพเช— 3: เชตเชฟเช•เชพเชธ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เช…เชจเซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ

เช† เชฌเซเชฒเซ‹เช— เชชเชฐ เชฆเชฐเซ‡เช•เชจเซ‡ เชนเซ‡เชฒเซ‹! เช† เชถเซเชฐเซ‡เชฃเซ€เชจเซ€ เชคเซเชฐเซ€เชœเซ€ เชชเซ‹เชธเซเชŸ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เช…เชฎเซ‡ เชฌเชคเชพเชตเซ€เช เช›เซ€เช เช•เซ‡ Red Hat OpenShift เชชเชฐ เช†เชงเซเชจเชฟเช• เชตเซ‡เชฌ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชœเชฎเชพเชตเชตเซ€.

เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชฐ เช†เชงเซเชจเชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ, เชญเชพเช— 3: เชตเชฟเช•เชพเชธ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เช…เชจเซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ

เช…เช—เชพเช‰เชจเซ€ เชฌเซ‡ เชชเซ‹เชธเซเชŸเซเชธเชฎเชพเช‚, เช…เชฎเซ‡ เชฌเชคเชพเชตเซเชฏเซเช‚ เช•เซ‡ เช†เชงเซเชจเชฟเช• เชตเซ‡เชฌ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชฎเชพเชคเซเชฐ เชฅเซ‹เชกเชพ เชชเช—เชฒเชพเชฎเชพเช‚ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชœเชฎเชพเชตเชตเชพ เช…เชจเซ‡ เชจเชตเซ€ S2I เช‡เชฎเซ‡เชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซ‹ เชคเซ‡ เชธเชพเชฅเซ‡ เช‘เชซ-เชง-เชถเซ‡เชฒเซเชซ HTTP เชธเชฐเซเชตเชฐ เช‡เชฎเซ‡เชœ, เชœเซ‡เชฎ เช•เซ‡ NGINX, เช‰เชคเซเชชเชพเชฆเชจ เชœเชฎเชพเชตเชŸเชจเซ‡ เช—เซ‹เช เชตเชตเชพ เชฎเชพเชŸเซ‡ เชธเชพเช‚เช•เชณเชตเชพเชณเชพ เชฌเชฟเชฒเซเชกเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡. .

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

เชตเชฟเช•เชพเชธ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชคเชฐเซ€เช•เซ‡ OpenShift

เชตเชฟเช•เชพเชธ เช•เชพเชฐเซเชฏเชชเซเชฐเชตเชพเชน

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

เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ เช†เชงเซเชจเชฟเช• เชซเซเชฐเซ‡เชฎเชตเชฐเซเช•เชฎเชพเช‚, เช†เชตเชพ "เชตเชฟเช•เชพเชธ เชธเชฐเซเชตเชฐ" เช…เชจเซเชฐเซ‚เชช เช•เชฎเชพเชจเซเชก เชฒเชพเช‡เชจ เชŸเซ‚เชฒเซเชธเชฎเชพเช‚ เชฌเชจเซ‡เชฒ เช›เซ‡.

เชธเซเชฅเชพเชจเชฟเช• เช‰เชฆเชพเชนเชฐเชฃ

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

$ npm run start

เชชเช›เซ€ เชŸเชฐเซเชฎเชฟเชจเชฒ เชตเชฟเชจเซเชกเซ‹เชฎเชพเช‚ เช†เชชเชฃเซ‡ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เช•เช‚เชˆเช• เชœเซ‹เชถเซเช‚:

เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชฐ เช†เชงเซเชจเชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ, เชญเชพเช— 3: เชตเชฟเช•เชพเชธ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เช…เชจเซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ

เช…เชจเซ‡ เช…เชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชกเชฟเชซเซ‹เชฒเซเชŸ เชฌเซเชฐเชพเช‰เชเชฐเชฎเชพเช‚ เช–เซเชฒเชถเซ‡:

เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชฐ เช†เชงเซเชจเชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ, เชญเชพเช— 3: เชตเชฟเช•เชพเชธ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เช…เชจเซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ

เชนเชตเซ‡, เชœเซ‹ เช†เชชเชฃเซ‡ เชซเชพเช‡เชฒเชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเซ€เช, เชคเซ‹ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเซเชฐเชพเช‰เชเชฐเชฎเชพเช‚ เช…เชชเชกเซ‡เชŸ เชฅเชตเซ€ เชœเซ‹เชˆเช.

เช เซ€เช• เช›เซ‡, เชธเซเชฅเชพเชจเชฟเช• เชฎเซ‹เชกเชฎเชพเช‚ เชตเชฟเช•เชพเชธ เชธเชพเชฅเซ‡ เชฌเชงเซเช‚ เชธเซเชชเชทเซเชŸ เช›เซ‡, เชชเชฐเช‚เชคเซ OpenShift เชชเชฐ เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเซเช‚?

OpenShift เชชเชฐ เชตเชฟเช•เชพเชธ เชธเชฐเซเชตเชฐ

เชœเซ‹ เชคเชฎเชจเซ‡ เชฏเชพเชฆ เช›เซ‡, เชฎเชพเช‚ เช…เช—เชพเช‰เชจเซ€ เชชเซ‹เชธเซเชŸ, เช…เชฎเซ‡ S2I เช‡เชฎเซ‡เชœเชจเชพ เช•เชนเซ‡เชตเชพเชคเชพ เชฐเชจ เชคเชฌเช•เซเช•เชพเชจเซ‡ เชœเซ‹เชฏเซ‹ เช…เชจเซ‡ เชœเซ‹เชฏเซเช‚ เช•เซ‡ เชกเชฟเชซเซ‰เชฒเซเชŸ เชฐเซ‚เชชเซ‡, เชธเชฐเซเชต เชฎเซ‹เชกเซเชฏเซเชฒ เช…เชฎเชพเชฐเซ€ เชตเซ‡เชฌ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชธเชฐเซเชตเชฟเชธ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡.

เชœเซ‹ เช•เซ‡, เชœเซ‹ เชคเชฎเซ‡ เชจเชœเซ€เช•เชฅเซ€ เชœเซเช“ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชšเชฒเชพเชตเซ‹ เชคเซ‡ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚เชฅเซ€, เชคเซ‡ $NPM_RUN เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒ เชงเชฐเชพเชตเซ‡ เช›เซ‡, เชœเซ‡ เชคเชฎเชจเซ‡ เชคเชฎเชพเชฐเชพ เช†เชฆเซ‡เชถเชจเซ‡ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡.

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

$ npx nodeshift --deploy.env NPM_RUN="yarn start" --dockerImage=nodeshift/ubi8-s2i-web-app

เชจเซ‹เช‚เชง: เช‰เชชเชฐเซ‹เช•เซเชค เช‰เชฆเชพเชนเชฐเชฃ เชธเชพเชฎเชพเชจเซเชฏ เชตเชฟเชšเชพเชฐเชจเซ‡ เชธเชฎเชœเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชธเช‚เช•เซเชทเชฟเชชเซเชค เช›เซ‡.

เช…เชนเซ€เช‚ เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เชœเชฎเชพเชตเชŸเชฎเชพเช‚ NPM_RUN เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเซ‡เชฐเซ€เชเชฌเชฒ เช‰เชฎเซ‡เชฐเซเชฏเซเช‚ เช›เซ‡, เชœเซ‡ เชฏเชพเชฐเซเชจ เชธเซเชŸเชพเชฐเซเชŸ เช•เชฎเชพเชจเซเชก เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชฐเชจเชŸเชพเช‡เชฎ เช•เชนเซ‡ เช›เซ‡, เชœเซ‡ เช…เชฎเชพเชฐเชพ เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเซ‹เชกเชจเซ€ เช…เช‚เชฆเชฐ เชฐเชฟเชเช•เซเชŸ เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เชธเชฐเซเชตเชฐเชจเซ‡ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡.

เชœเซ‹ เชคเชฎเซ‡ เชšเชพเชฒเชคเชพ เชชเซ‹เชกเชจเชพ เชฒเซ‹เช—เชจเซ‡ เชœเซ‹เชถเซ‹, เชคเซ‹ เชคเซ‡ เช•เช‚เชˆเช• เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฆเซ‡เช–เชพเชถเซ‡:

เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชฐ เช†เชงเซเชจเชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ, เชญเชพเช— 3: เชตเชฟเช•เชพเชธ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เช…เชจเซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ

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

เชฐเชฟเชฎเซ‹เชŸ เช…เชจเซ‡ เชฒเซ‹เช•เชฒ เช•เซ‹เชกเชจเซ‡ เชธเชฟเช‚เช•เซเชฐเชจเชพเช‡เช เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชธเชฆเชจเชธเซ€เชฌเซ‡, เชจเซ‹เชกเชถเชฟเชซเซเชŸ เชธเชฐเชณเชคเชพเชฅเซ€ เชธเชฟเช‚เช•เซเชฐเชจเชพเช‡เชเซ‡เชถเชจเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡, เช…เชจเซ‡ เชคเชฎเซ‡ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ‡ เชŸเซเชฐเซ…เช• เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเซ‰เชš เช•เชฎเชพเชจเซเชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เช…เชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เชธเชฐเซเชตเชฐเชจเซ‡ เชœเชฎเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช†เชฆเซ‡เชถ เชšเชฒเชพเชตเซเชฏเชพ เชชเช›เซ€, เช…เชฎเซ‡ เชจเซ€เชšเซ‡เชจเชพ เช†เชฆเซ‡เชถเชจเซ‹ เชธเซเชฐเช•เซเชทเชฟเชค เชฐเซ€เชคเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช:

$ npx nodeshift watch

เชชเชฐเชฟเชฃเชพเชฎเซ‡, เช…เชฎเซ‡ เชฅเซ‹เชกเชพ เชธเชฎเชฏ เชชเชนเซ‡เชฒเชพ เชฌเชจเชพเชตเซ‡เชฒเชพ เชšเชพเชฒเซ€ เชฐเชนเซ‡เชฒเชพ เชชเซ‹เชก เชธเชพเชฅเซ‡ เช•เชจเซ‡เช•เซเชถเชจ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เชฐเชฟเชฎเซ‹เชŸ เช•เซเชฒเชธเซเชŸเชฐ เชธเชพเชฅเซ‡ เช…เชฎเชพเชฐเซ€ เชธเซเชฅเชพเชจเชฟเช• เชซเชพเช‡เชฒเซ‹เชจเซเช‚ เชธเชฟเช‚เช•เซเชฐเชจเชพเช‡เชเซ‡เชถเชจ เชธเช•เซเชฐเชฟเชฏ เชฅเชถเซ‡, เช…เชจเซ‡ เช…เชฎเชพเชฐเซ€ เชธเซเชฅเชพเชจเชฟเช• เชธเชฟเชธเซเชŸเชฎ เชชเชฐเชจเซ€ เชซเชพเช‡เชฒเซ‹เชจเซ‡ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชฎเชพเชŸเซ‡ เชฎเซ‹เชจเชฟเชŸเชฐ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เชฅเชถเซ‡.

เชคเซ‡เชฅเซ€, เชœเซ‹ เช†เชชเชฃเซ‡ เชนเชตเซ‡ src/App.js เชซเชพเช‡เชฒเชจเซ‡ เช…เชชเชกเซ‡เชŸ เช•เชฐเซ€เชถเซเช‚, เชคเซ‹ เชธเชฟเชธเซเชŸเชฎ เช† เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชชเชฐ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เช†เชชเชถเซ‡, เชคเซ‡เชจเซ‡ เชฐเชฟเชฎเซ‹เชŸ เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เช•เซ‰เชชเชฟ เช•เชฐเชถเซ‡ เช…เชจเซ‡ เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เชธเชฐเซเชตเชฐ เชถเชฐเซ‚ เช•เชฐเชถเซ‡, เชœเซ‡ เชชเช›เซ€ เชฌเซเชฐเชพเช‰เชเชฐเชฎเชพเช‚ เช…เชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เช…เชชเชกเซ‡เชŸ เช•เชฐเชถเซ‡.

เชšเชฟเชคเซเชฐ เชชเซ‚เชฐเซเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชšเชพเชฒเซ‹ เชฌเชคเชพเชตเซ€เช เช•เซ‡ เช† เชธเชฎเช—เซเชฐ เช†เชฆเซ‡เชถเซ‹ เช•เซ‡เชตเชพ เชฆเซ‡เช–เชพเชฏ เช›เซ‡:

$ npx nodeshift --strictSSL=false --dockerImage=nodeshift/ubi8-s2i-web-app --build.env YARN_ENABLED=true --expose --deploy.env NPM_RUN="yarn start" --deploy.port 3000

$ npx nodeshift watch --strictSSL=false

เชตเซ‹เชš เช•เชฎเชพเชจเซเชก เช oc rsync เช†เชฆเซ‡เชถเชจเซ€ เชŸเซ‹เชš เชชเชฐ เชเช• เชเชฌเซเชธเซเชŸเซเชฐเซ‡เช•เซเชถเชจ เช›เซ‡, เชคเชฎเซ‡ เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชตเชฟเชถเซ‡ เชตเชงเซ เชœเชพเชฃเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชนเซ€เช‚.

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

เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ

เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชฐ เช†เชงเซเชจเชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ, เชญเชพเช— 3: เชตเชฟเช•เชพเชธ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เช…เชจเซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ

เช†เช—เชณ เช†เชชเชฃเซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ เชœเซ‡เชตเชพ เชŸเซ‚เชฒ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€เชถเซเช‚ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชธเชพเช‚เช•เชณเซ‹ เชฌเชพเช‚เชงเชตเชพเชจเชพ เชตเชฟเช•เชฒเซเชช เชคเชฐเซ€เช•เซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชพเชชเชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ เชถเซเช‚ เช›เซ‡

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

เช† เชฒเซ‡เช–เชจเซ‡ เชธเชฎเชœเชตเชพ เชฎเชพเชŸเซ‡ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธเชจเซเช‚ เชฅเซ‹เชกเซเช‚ เชœเซเชžเชพเชจ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡, เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เชญเชพเชฐเชชเซ‚เชฐเซเชตเช• เชญเชฒเชพเชฎเชฃ เช•เชฐเซ€เช เช›เซ€เช เช•เซ‡ เชคเชฎเซ‡ เชชเชนเซ‡เชฒเชพ เชตเชพเช‚เชšเซ‹ เชธเชคเซเชคเชพเชตเชพเชฐ เชชเชพเช เชฏเชชเซเชธเซเชคเช•.

เชคเชฎเชพเชฐเชพ เช•เชพเชฎเชจเซเช‚ เชตเชพเชคเชพเชตเชฐเชฃ เช—เซ‹เช เชตเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เช† เชฒเซ‡เช–เชฎเชพเช‚เชจเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เชธเชพเชฅเซ‡ เชฐเชฎเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชชเชนเซ‡เชฒเชพ เชคเชฎเชพเชฐเชพ เช•เชพเชฐเซเชฏเช•เชพเชฐเซ€ เชตเชพเชคเชพเชตเชฐเชฃเชจเซ‡ เชคเซˆเชฏเชพเชฐ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

  1. เช“เชชเชจเชถเชฟเชซเซเชŸ 4 เช•เซเชฒเชธเซเชŸเชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช…เชจเซ‡ เช—เซ‹เช เชตเซ‹. เช…เชฎเชพเชฐเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เช† เชฎเชพเชŸเซ‡ เช•เซ‹เชกเชฐเซ‡เชกเซ€ เช•เชจเซเชŸเซ‡เชจเชฐ (เชธเซ€เช†เชฐเชกเซ€) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชธเซ‚เชšเชจเชพเช“ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡. เช…เชนเซ€เช‚.
  2. เช•เซเชฒเชธเซเชŸเชฐ เชคเซˆเชฏเชพเชฐ เชฅเชฏเชพ เชชเช›เซ€, เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเชพ เชชเชฐ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เช‘เชชเชฐเซ‡เชŸเชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชกเชฐเชถเซ‹ เชจเชนเซ€เช‚, เชคเซ‡ เชธเชฐเชณ เช›เซ‡, เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชธเซ‚เชšเชจเชพเช“ เช…เชนเซ€เช‚.
  3. เชกเชพเช‰เชจเชฒเซ‹เชก เชŸเซ‡เช•เชŸเชจ CLI (tkn) เช…เชนเซ€เช‚.
  4. เชเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ Create-react-app เช•เชฎเชพเชจเซเชก เชฒเชพเช‡เชจ เชŸเซ‚เชฒ เชšเชฒเชพเชตเซ‹ เชœเซ‡ เชคเชฎเซ‡ เชชเช›เซ€ เชœเชฎเชพเชตเชถเซ‹ (เช† เชเช• เชธเชฐเชณ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช›เซ‡ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ).
  5. (เชตเซˆเช•เชฒเซเชชเชฟเช•) npm เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช…เชจเซ‡ เชชเช›เซ€ npm เชชเซเชฐเชพเชฐเช‚เชญ เชธเชพเชฅเซ‡ เชธเซเชฅเชพเชจเชฟเช• เชฐเซ€เชคเซ‡ เช‰เชฆเชพเชนเชฐเชฃ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ‡ เช•เซเชฒเซ‹เชจ เช•เชฐเซ‹.

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชเช• k8s เชซเซ‹เชฒเซเชกเชฐ เชชเชฃ เชนเชถเซ‡, เชœเซ‡เชฎเชพเช‚ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชœเชฎเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ Kubernetes/OpenShift YAMLs เชนเชถเซ‡. เชคเซเชฏเชพเช‚ เช•เชพเชฐเซเชฏเซ‹, เช•เซเชฒเชธเซเชŸเชฐ เชŸเชพเชธเซเช•, เชธเช‚เชธเชพเชงเชจเซ‹ เช…เชจเซ‡ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ เชนเชถเซ‡ เชœเซ‡ เช†เชชเชฃเซ‡ เช†เชฎเชพเช‚ เชฌเชจเชพเชตเซ€เชถเซเช‚ เชญเช‚เชกเชพเชฐ.

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

เช…เชฎเชพเชฐเชพ เช‰เชฆเชพเชนเชฐเชฃ เชฎเชพเชŸเซ‡ เชชเซเชฐเชฅเชฎ เชชเช—เชฒเซเช‚ เช OpenShift เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เชเช• เชจเชตเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เช›เซ‡. เชšเชพเชฒเซ‹ เช† เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ เชตเซ‡เชฌเชเชช-เชชเชพเชˆเชชเชฒเชพเชˆเชจ เช•เชนเซ€เช เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชจเซ€เชšเซ‡เชจเชพ เช†เชฆเซ‡เชถเชฅเซ€ เชฌเชจเชพเชตเซ€เช:

$ oc new-project webapp-pipeline

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

เชคเซ‡เชฅเซ€, เชธเซŒ เชชเซเชฐเชฅเชฎ ...

เช•เชพเชฐเซเชฏเซ‹

เชšเชพเชฒเซ‹ เช•เซ‡เชŸเชฒเชพเช• เช•เชพเชฐเซเชฏเซ‹ เชฌเชจเชพเชตเซ€เช, เชœเซ‡ เชชเช›เซ€ เช…เชฎเชพเชฐเซ€ เชชเชพเช‡เชชเชฒเชพเช‡เชจเชฎเชพเช‚ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชœเชฎเชพเชตเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเชถเซ‡. เชชเซเชฐเชฅเชฎ เช•เชพเชฐเซเชฏ - apply_manifests_task - เช…เชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ k8s เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เชธเซเชฅเชฟเชค เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชธเช‚เชธเชพเชงเชจเซ‹ (เชธเซ‡เชตเชพ, เชœเชฎเชพเชตเชŸ เช…เชจเซ‡ เชฎเชพเชฐเซเช—) เชจเชพ YAML เชฒเชพเช—เซ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡. เชฌเซ€เชœเซเช‚ เช•เชพเชฐเซเชฏ - เช…เชชเชกเซ‡เชŸ_เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ_เชŸเชพเชธเซเช• - เช…เชฎเชพเชฐเซ€ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเซ‡เชฒ เช›เชฌเซ€ เชชเชฐ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชœเชฎเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒเซ€ เช›เชฌเซ€เชจเซ‡ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡.

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

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/tasks/update_deployment_task.yaml
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/tasks/apply_manifests_task.yaml

เชชเช›เซ€, tkn CLI เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เช…เชฎเซ‡ เชคเชชเชพเชธ เช•เชฐเซ€เชถเซเช‚ เช•เซ‡ เช•เชพเชฐเซเชฏเซ‹ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡:

$ tkn task ls

NAME                AGE
apply-manifests     1 minute ago
update-deployment   1 minute ago

เชจเซ‹เช‚เชง: เช† เชคเชฎเชพเชฐเชพ เชตเชฐเซเชคเชฎเชพเชจ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เชธเซเชฅเชพเชจเชฟเช• เช•เชพเชฐเซเชฏเซ‹ เช›เซ‡.

เช•เซเชฒเชธเซเชŸเชฐ เช•เชพเชฐเซเชฏเซ‹

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

$ tkn clustertask ls

NAME                       AGE
buildah                    1 day ago
buildah-v0-10-0            1 day ago
jib-maven                  1 day ago
kn                         1 day ago
maven                      1 day ago
openshift-client           1 day ago
openshift-client-v0-10-0   1 day ago
s2i                        1 day ago
s2i-go                     1 day ago
s2i-go-v0-10-0             1 day ago
s2i-java-11                1 day ago
s2i-java-11-v0-10-0        1 day ago
s2i-java-8                 1 day ago
s2i-java-8-v0-10-0         1 day ago
s2i-nodejs                 1 day ago
s2i-nodejs-v0-10-0         1 day ago
s2i-perl                   1 day ago
s2i-perl-v0-10-0           1 day ago
s2i-php                    1 day ago
s2i-php-v0-10-0            1 day ago
s2i-python-3               1 day ago
s2i-python-3-v0-10-0       1 day ago
s2i-ruby                   1 day ago
s2i-ruby-v0-10-0           1 day ago
s2i-v0-10-0                1 day ago

เชนเชตเซ‡ เชšเชพเชฒเซ‹ เชฌเซ‡ เช•เซเชฒเชธเซเชŸเชฐ เช•เชพเชฐเซเชฏเซ‹ เชฌเชจเชพเชตเซ€เช. เชชเซเชฐเชฅเชฎ S2I เช‡เชฎเซ‡เชœ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชถเซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช†เช‚เชคเชฐเชฟเช• OpenShift เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€เชฎเชพเช‚ เชฎเซ‹เช•เชฒเชถเซ‡; เชฌเซ€เชœเซเช‚ เช…เชฎเซ‡ เชธเชพเชฎเช—เซเชฐเซ€ เชคเชฐเซ€เช•เซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชฌเชจเชพเชตเซ‡เชฒ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ NGINX เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช…เชฎเชพเชฐเซ€ เช›เชฌเซ€ เชฌเชจเชพเชตเชตเชพเชจเซ€ เช›เซ‡.

เช›เชฌเซ€ เชฌเชจเชพเชตเซ‹ เช…เชจเซ‡ เชฎเซ‹เช•เชฒเซ‹

เชชเซเชฐเชฅเชฎ เช•เชพเชฐเซเชฏ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡, เช…เชฎเซ‡ เชฒเชฟเช‚เช• เช•เชฐเซ‡เชฒ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชตเชฟเชถเซ‡ เช…เช—เชพเช‰เชจเชพ เชฒเซ‡เช–เชฎเชพเช‚ เชœเซ‡ เช•เชฐเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡เชจเซเช‚ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เช•เชฐเซ€เชถเซเช‚. เชฏเชพเชฆ เช•เชฐเซ‹ เช•เซ‡ เช…เชฎเซ‡ เช…เชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ "เชฌเชฟเชฒเซเชก" เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ S2I เช‡เชฎเซ‡เชœ (ubi8-s2i-web-app) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เชนเชคเซ‹, เช…เชจเซ‡ OpenShift เช†เช‚เชคเชฐเชฟเช• เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€เชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เช›เชฌเซ€ เชธเชพเชฅเซ‡ เช…เช‚เชค เช†เชตเซเชฏเซ‹ เชนเชคเซ‹. เชนเชตเซ‡ เช…เชฎเซ‡ เช…เชฎเชพเชฐเซ€ เชเชช เชฎเชพเชŸเซ‡ เชกเซ‹เช•เชฐเชซเชพเช‡เชฒ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช† S2I เชตเซ‡เชฌ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช‡เชฎเซ‡เชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ เช…เชจเซ‡ เชชเช›เซ€ เชตเชพเชธเซเชคเชตเชฟเช• เชฌเชฟเชฒเซเชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ Buildah เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ€ เช‡เชฎเซ‡เชœเชจเซ‡ OpenShift เช‡เชจเซเชŸเชฐเชจเชฒ เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€เชฎเชพเช‚ เชงเช•เซ‡เชฒเซ€เชถเซเช‚, เช•เชพเชฐเชฃ เช•เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ NodeShift เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เชœเชฎเชพเชตเชถเซ‹ เชคเซเชฏเชพเชฐเซ‡ OpenShift เชคเซ‡ เชœ เช•เชฐเซ‡ เช›เซ‡. .

เช…เชฎเชจเซ‡ เช† เชฌเชงเซเช‚ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช–เชฌเชฐ เชชเชกเซ€, เชคเชฎเซ‡ เชชเซ‚เช›เซ‹ เช›เซ‹? เชฅเซ€ เชธเชคเซเชคเชพเชตเชพเชฐ Node.js เชจเซเช‚ เชธเชคเซเชคเชพเชตเชพเชฐ เชธเช‚เชธเซเช•เชฐเชฃ, เช…เชฎเซ‡ เชนเชฎเชฃเชพเช‚ เชœ เชคเซ‡เชจเซ€ เชจเช•เชฒ เช•เชฐเซ€ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช†เชชเชฃเชพ เชฎเชพเชŸเซ‡ เชธเช‚เชถเซ‹เชงเชฟเชค เช•เชฐเซ€ เช›เซ‡.

เชคเซ‹, เชšเชพเชฒเซ‹ เชนเชตเซ‡ s2i-web-app เช•เซเชฒเชธเซเชŸเชฐ เชŸเชพเชธเซเช• เชฌเชจเชพเชตเซ€เช:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/s2i-web-app-task.yaml

เช…เชฎเซ‡ เช†เชจเซเช‚ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเซ€เชถเซเช‚ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เชฎเชพเชคเซเชฐ OUTPUT_DIR เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐ เชชเชฐ เชงเซเชฏเชพเชจ เช•เซ‡เชจเซเชฆเซเชฐเชฟเชค เช•เชฐเซ€เชถเซเช‚:

params:
      - name: OUTPUT_DIR
        description: The location of the build output directory
        default: build

เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡, เช† เชชเชฐเชฟเชฎเชพเชฃ เชฌเชฟเชฒเซเชก เช•เชฐเชตเชพ เชธเชฎเชพเชจ เช›เซ‡, เชœเซเชฏเชพเช‚ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เชเชธเซ‡เชฎเซเชฌเชฒ เชธเชพเชฎเช—เซเชฐเซ€ เชฎเซ‚เช•เซ‡ เช›เซ‡. เช…เชจเซเชฏ เชซเซเชฐเซ‡เชฎเชตเชฐเซเช• เชตเชฟเชตเชฟเชง เชชเชพเชฅเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชเชฎเซเชฌเชฐเชฎเชพเช‚ เชคเซ‡ เชกเชฟเชธเซเชŸ เช›เซ‡. เช…เชฎเชพเชฐเชพ เชชเซเชฐเชฅเชฎ เช•เซเชฒเชธเซเชŸเชฐ เช•เชพเชฐเซเชฏเชจเซเช‚ เช†เช‰เชŸเชชเซเชŸ เช…เชฎเซ‡ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ‡เชฒ HTML, JavaScript เช…เชจเซ‡ CSS เชงเชฐเชพเชตเชคเซ€ เช›เชฌเซ€ เชนเชถเซ‡.

NGINX เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เชฌเซ€ เชฌเชจเชพเชตเซ‹

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

เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ - เช‰เชชเชฐเชจเซ€ เชœเซ‡เชฎ เชœ - เชเช• เช•เซเชฒเชธเซเชŸเชฐ เช•เชพเชฐเซเชฏ webapp-build-runtime เชฌเชจเชพเชตเซ€เชถเซเช‚:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/webapp-build-runtime-task.yaml

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

เช…เชจเซ‡ เช…เชนเซ€เช‚ เช…เชฎเซ‡ เช†เช•เชฐเซเชทเช• เชฐเซ€เชคเซ‡ เช†เช—เชณเชจเชพ เชฎเซเชฆเซเชฆเชพ เชชเชฐ เช†เช—เชณ เชตเชงเซ€เช เช›เซ€เช...

เชธเช‚เชชเชคเซเชคเชฟ

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

# This resource is the location of the git repo with the web application source
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: web-application-repo
spec:
  type: git
  params:
    - name: url
      value: https://github.com/nodeshift-starters/react-pipeline-example
    - name: revision
      value: master

เช…เชนเซ€เช‚ PipelineResource git เชชเซเชฐเช•เชพเชฐเชจเซเช‚ เช›เซ‡. params เชตเชฟเชญเชพเช—เชฎเชพเช‚ url เช•เซ€ เชšเซ‹เช•เซเช•เชธ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชคเชฐเชซ เชจเชฟเชฐเซเชฆเซ‡เชถ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชฎเซเช–เซเชฏ เชถเชพเช–เชพเชจเซ‡ เชธเซเชชเชทเซเชŸ เช•เชฐเซ‡ เช›เซ‡ (เช† เชตเซˆเช•เชฒเซเชชเชฟเช• เช›เซ‡, เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชชเซ‚เชฐเซเชฃเชคเชพ เชฎเชพเชŸเซ‡ เชฒเช–เซ€เช เช›เซ€เช).

เชนเชตเซ‡ เช†เชชเชฃเซ‡ เช‡เชฎเซ‡เชœ เชฎเชพเชŸเซ‡ เชเช• เชธเช‚เชธเชพเชงเชจ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชœเซเชฏเชพเช‚ s2i-web-app เช•เชพเชฐเซเชฏเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชธเชพเชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เช† เช† เชฐเซ€เชคเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡:

# This resource is the result of running "npm run build",  the resulting built files will be located in /opt/app-root/output
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: built-web-application-image
spec:
  type: image
  params:
    - name: url
      value: image-registry.openshift-image-registry.svc:5000/webapp-pipeline/built-web-application:latest

เช…เชนเซ€เช‚ PipelineResource เชˆเชฎเซ‡เชœ เชชเซเชฐเช•เชพเชฐเชจเซเช‚ เช›เซ‡, เช…เชจเซ‡ url เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐเชจเซเช‚ เชฎเซ‚เชฒเซเชฏ เช†เช‚เชคเชฐเชฟเช• OpenShift เชˆเชฎเซ‡เชœ เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€ เชคเชฐเชซ เชจเชฟเชฐเซเชฆเซ‡เชถ เช•เชฐเซ‡ เช›เซ‡, เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชตเซ‡เชฌเชเชช-เชชเชพเชˆเชชเชฒเชพเชˆเชจ เชจเซ‡เชฎเชธเซเชชเซ‡เชธเชฎเชพเช‚ เชธเซเชฅเชฟเชค เช›เซ‡. เชœเซ‹ เชคเชฎเซ‡ เช•เซ‹เชˆ เช…เชฒเช— เชจเซ‡เชฎเชธเซเชชเซ‡เชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เชนเซ‹เชต เชคเซ‹ เช† เชธเซ‡เชŸเชฟเช‚เช— เชฌเชฆเชฒเชตเชพเชจเซเช‚ เชญเซ‚เชฒเชถเซ‹ เชจเชนเซ€เช‚.

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

# This resource is the image that will be just the static html, css, js files being run with nginx
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: runtime-web-application-image
spec:
  type: image
  params:
    - name: url
      value: image-registry.openshift-image-registry.svc:5000/webapp-pipeline/runtime-web-application:latest

เชซเชฐเซ€เชฅเซ€, เชจเซ‹เช‚เชง เชฒเซ‹ เช•เซ‡ เช† เชธเช‚เชธเชพเชงเชจ เชตเซ‡เชฌเชเชช-เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชจเซ‡เชฎเชธเซเชชเซ‡เชธเชฎเชพเช‚ เช†เช‚เชคเชฐเชฟเช• OpenShift เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€เชฎเชพเช‚ เช›เชฌเซ€เชจเซ‡ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเซ‡ เช›เซ‡.

เช† เชฌเชงเชพ เชธเช‚เชธเชพเชงเชจเซ‹ เชเช•เชธเชพเชฅเซ‡ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ create เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/resources/resource.yaml

เชคเชฎเซ‡ เช–เชพเชคเชฐเซ€ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เช•เซ‡ เชธเช‚เชธเชพเชงเชจเซ‹ เช† เชฐเซ€เชคเซ‡ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡:

$ tkn resource ls

เช•เชจเซเชตเซ‡เชฏเชฐ เชชเชพเช‡เชชเชฒเชพเช‡เชจ

เชนเชตเซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชฌเชงเชพ เชœเชฐเซ‚เชฐเซ€ เช˜เชŸเช•เซ‹ เช›เซ‡, เชšเชพเชฒเซ‹ เชจเซ€เชšเซ‡ เช†เชชเซ‡เชฒเชพ เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เชคเซ‡เชจเซ‡ เชฌเชจเชพเชตเซ€เชจเซ‡ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเซ€เช:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/pipelines/build-and-deploy-react.yaml

เชชเชฐเช‚เชคเซ เช† เช†เชฆเซ‡เชถ เชšเชฒเชพเชตเชคเชพ เชชเชนเซ‡เชฒเชพ, เชšเชพเชฒเซ‹ เช† เช˜เชŸเช•เซ‹ เชœเซ‹เชˆเช. เชชเซเชฐเชฅเชฎ เชจเชพเชฎ เช›เซ‡:

apiVersion: tekton.dev/v1alpha1
kind: Pipeline
metadata:
  name: build-and-deploy-react

เชชเช›เซ€ เชธเซเชชเซ‡เช• เชตเชฟเชญเชพเช—เชฎเชพเช‚ เช†เชชเชฃเซ‡ เช…เช—เชพเช‰ เชฌเชจเชพเชตเซ‡เชฒเชพ เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ‹ เชธเช‚เช•เซ‡เชค เชœเซ‹เชˆเช เช›เซ€เช:

spec:
  resources:
    - name: web-application-repo
      type: git
    - name: built-web-application-image
      type: image
    - name: runtime-web-application-image
      type: image

เชชเช›เซ€ เช…เชฎเซ‡ เชเชตเชพ เช•เชพเชฐเซเชฏเซ‹ เชฌเชจเชพเชตเซ€เช เช›เซ€เช เชœเซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเช‡เชชเชฒเชพเช‡เชจเชจเซ‡ เชชเซ‚เชฐเซเชฃ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชธเซŒ เชชเซเชฐเชฅเชฎ, เชคเซ‡ s2i-web-app เช•เชพเชฐเซเชฏเชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเซเช‚ เชœเซ‹เชˆเช เชœเซ‡ เช…เชฎเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชฌเชจเชพเชตเซ‡เชฒ เช›เซ‡:

tasks:
    - name: build-web-application
      taskRef:
        name: s2i-web-app
        kind: ClusterTask

เช† เช•เชพเชฐเซเชฏ เช‡เชจเชชเซเชŸ (เช—เซ€เชฐ เชธเช‚เชธเชพเชงเชจ) เช…เชจเซ‡ เช†เช‰เชŸเชชเซเชŸ (เชฌเชฟเชฒเซเชŸ-เชตเซ‡เชฌ-เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ-เช‡เชฎเซ‡เชœ เชฐเชฟเชธเซ‹เชฐเซเชธ) เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชฒเซ‡ เช›เซ‡. เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชเช• เชตเชฟเชถเชฟเชทเซเชŸ เชชเชฐเชฟเชฎเชพเชฃ เชชเชฃ เชชเชธเชพเชฐ เช•เชฐเซ€เช เช›เซ€เช เชœเซ‡เชฅเซ€ เช•เชฐเซ€เชจเซ‡ เชคเซ‡ TLS เชจเซ€ เชšเช•เชพเชธเชฃเซ€ เชจ เช•เชฐเซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เช…เชฎเซ‡ เชธเซเชต-เชธเชนเซ€ เช•เชฐเซ‡เชฒ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช:

resources:
        inputs:
          - name: source
            resource: web-application-repo
        outputs:
          - name: image
            resource: built-web-application-image
      params:
        - name: TLSVERIFY
          value: "false"

เช†เช—เชณเชจเซเช‚ เช•เชพเชฐเซเชฏ เชฒเช—เชญเช— เชธเชฐเช–เซเช‚ เชœ เช›เซ‡, เชซเช•เซเชค เช…เชนเซ€เช‚ เชตเซ‡เชฌเชเชช-เชฌเชฟเชฒเซเชก-เชฐเชจเชŸเชพเช‡เชฎ เช•เซเชฒเชธเซเชŸเชฐ เช•เชพเชฐเซเชฏ เชœเซ‡ เช†เชชเชฃเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชฌเชจเชพเชตเซ‡เชฒ เช›เซ‡ เชคเซ‡เชจเซ‡ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡:

name: build-runtime-image
    taskRef:
      name: webapp-build-runtime
      kind: ClusterTask

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

resources:
        inputs:
          - name: image
            resource: built-web-application-image
        outputs:
          - name: image
            resource: runtime-web-application-image
        params:
        - name: TLSVERIFY
          value: "false"
      runAfter:
        - build-web-application

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

เช•เชจเซเชตเซ‡เชฏเชฐ เชถเชฐเซ‚ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชคเซ‡เชฅเซ€, เช…เชฎเชพเชฐเซ€ เชชเชพเช‡เชชเชฒเชพเช‡เชจเชจเชพ เชคเชฎเชพเชฎ เชญเชพเช—เซ‹ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡, เช…เชจเซ‡ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชจเซ€เชšเซ‡เชจเชพ เช†เชฆเซ‡เชถเชฅเซ€ เชšเชฒเชพเชตเซ€เชถเซเช‚:

$ tkn pipeline start build-and-deploy-react

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

? Choose the git resource to use for web-application-repo: web-application-repo (https://github.com/nodeshift-starters/react-pipeline-example)
? Choose the image resource to use for built-web-application-image: built-web-application-image (image-registry.openshift-image-registry.svc:5000/webapp-pipeline/built-web-
application:latest)
? Choose the image resource to use for runtime-web-application-image: runtime-web-application-image (image-registry.openshift-image-registry.svc:5000/webapp-pipeline/runtim
e-web-application:latest)
Pipelinerun started: build-and-deploy-react-run-4xwsr

เชนเชตเซ‡ เชšเชพเชฒเซ‹ เชจเซ€เชšเซ‡เชจเชพ เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชชเชพเช‡เชชเชฒเชพเช‡เชจเชจเซ€ เชธเซเชฅเชฟเชคเชฟ เชคเชชเชพเชธเซ€เช:

$ tkn pipeline logs -f

เชเช•เชตเชพเชฐ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชถเชฐเซ‚ เชฅเชˆ เชœเชพเชฏ เช…เชจเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชคเซˆเชจเชพเชค เชฅเชˆ เชœเชพเชฏ, เช…เชฎเซ‡ เชจเซ€เชšเซ‡เชจเชพ เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เชชเซเชฐเช•เชพเชถเชฟเชค เชฎเชพเชฐเซเช—เชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช:

$ oc get route react-pipeline-example --template='http://{{.spec.host}}'

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

เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชฐ เช†เชงเซเชจเชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ, เชญเชพเช— 3: เชตเชฟเช•เชพเชธ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เช…เชจเซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ

เชซเชฟเช—.1. เชšเชพเชฒเซ€ เชฐเชนเซ‡เชฒ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธเชจเซ€ เชธเชฎเซ€เช•เซเชทเชพ.

เชšเชพเชฒเชคเซ€ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเชตเชพเชฅเซ€ เชตเชงเชพเชฐเชพเชจเซ€ เชตเชฟเช—เชคเซ‹ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชฅเชพเชฏ เช›เซ‡, เชœเซ‡เชฎ เช•เซ‡ เช†เช•เซƒเชคเชฟ 2 เชฎเชพเช‚ เชฌเชคเชพเชตเซ‡เชฒ เช›เซ‡.

เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชฐ เช†เชงเซเชจเชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ, เชญเชพเช— 3: เชตเชฟเช•เชพเชธ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เช…เชจเซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ

เชšเซ‹เช–เชพ. 2. เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชตเชฟเชถเซ‡ เชตเชงเชพเชฐเชพเชจเซ€ เชฎเชพเชนเชฟเชคเซ€.

เชตเชงเซ เชฎเชพเชนเชฟเชคเซ€ เชชเช›เซ€, เชคเชฎเซ‡ เชตเซเชฏเซเชฎเชพเช‚ เชšเชพเชฒเซ€ เชฐเชนเซ‡เชฒเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ เชŸเซ‹เชชเซ‹เชฒเซ‹เชœเซ€, Fig.3 เชฎเชพเช‚ เชฌเชคเชพเชตเซเชฏเชพ เชชเซเชฐเชฎเชพเชฃเซ‡.

เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชฐ เช†เชงเซเชจเชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ, เชญเชพเช— 3: เชตเชฟเช•เชพเชธ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เช…เชจเซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ

เชซเชฟเช— 3. เชฒเซ‹เช‚เชš เช•เชฐเซ‡เชฒ เชชเซ‹เชก.

เชšเชฟเชนเซเชจเชจเชพ เช‰เชชเชฐเชจเชพ เชœเชฎเชฃเชพ เช–เซ‚เชฃเชพเชฎเชพเช‚ เชตเชฐเซเชคเซเชณ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเชตเชพเชฅเซ€ เช…เชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช–เซเชฒเซ‡ เช›เซ‡, เชœเซ‡เชฎ เช•เซ‡ เชซเชฟเช—. 4 เชฎเชพเช‚ เชฌเชคเชพเชตเซเชฏเชพ เชชเซเชฐเชฎเชพเชฃเซ‡.

เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชฐ เช†เชงเซเชจเชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ, เชญเชพเช— 3: เชตเชฟเช•เชพเชธ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เช…เชจเซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ

เชšเซ‹เช–เชพ. 4. เชฐเชฟเชเช•เซเชŸ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชšเชฒเชพเชตเชตเซ€.

เชจเชฟเชทเซเช•เชฐเซเชท

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

เชตเชงเชพเชฐเชพเชจเชพ เชธเช‚เชธเชพเชงเชจเซ‹ (EN)

เช†เช—เชพเชฎเซ€ เชตเซ‡เชฌเชฟเชจเชพเชฐเชจเซ€ เชœเชพเชนเซ‡เชฐเชพเชค

เช…เชฎเซ‡ Red Hat OpenShift เช•เชจเซเชŸเซ‡เชจเชฐ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เช…เชจเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฎเซ‚เชณ เช…เชจเซเชญเชต เชตเชฟเชถเซ‡ เชถเซเช•เซเชฐเชตเชพเชฐเชจเชพ เชตเซ‡เชฌเชฟเชจเชฐเซเชธเชจเซ€ เชถเซเชฐเซ‡เชฃเซ€ เชถเชฐเซ‚ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช:

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

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