เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเปƒเบ™ OpenShift, เบชเปˆเบงเบ™ 2: เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰

เบชเบฐเบšเบฒเบเบ”เบตเบ—เบธเบเบ„เบปเบ™! เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเบชเบญเบ‡เปƒเบ™เบŠเบธเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบงเบฑเบšเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเปƒเบ™ Red Hat OpenShift.

เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเปƒเบ™ OpenShift, เบชเปˆเบงเบ™ 2: เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰

เปƒเบ™เบšเบปเบ”เบ‚เบฝเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเปเบฒเบœเบฑเบ”เบเบฑเบšเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เบ•เบปเบงเบชเป‰เบฒเบ‡ S2I (เปเบซเบผเปˆเบ‡เป„เบ›เบซเบฒเบฎเบนเบšเบžเบฒเบš) เปƒเบซเบกเปˆ, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบงเบฑเบšเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเปƒเบ™เป€เบงเบ—เบต OpenShift. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเปƒเบ™เบซเบปเบงเบ‚เปเป‰เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบขเปˆเบฒเบ‡เป„เบงเบงเบฒ, เปเบฅเบฐเปƒเบ™เบกเบทเป‰เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบฎเบนเบšเบžเบฒเบš S2I เป€เบ›เบฑเบ™เบฎเบนเบšเบžเบฒเบš builder "เบšเปเบฅเบดเบชเบธเบ”" เปเบฅเบฐเบชเบปเบกเบ—เบปเบšเบเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบš OpenShift เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡.

เบชเบฐเบญเบฒเบ”เบฎเบนเบšเบžเบฒเบš builder

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเปƒเบ™เบžเบฒเบเบ—เบต XNUMX, เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบงเบฑเบšเป„เบŠเบ•เปŒเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบชเปˆเบงเบ™เปƒเบซเบเปˆเบกเบตเบญเบฑเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡, เป€เบŠเบดเปˆเบ‡เบ›เบปเบเบเบฐเบ•เบดเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบฅเบฐเบซเบฑเบ”, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เป„เบŸเบฅเปŒเบซเบผเบฒเบ, เปเบฅเบฐ minification. เป„เบŸเบฅเปŒเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™เบกเบฒเบˆเบฒเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰ - เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™ HTML, JavaScript เปเบฅเบฐ CSS เบ„เบปเบ‡เบ—เบตเปˆ - เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เป‚เบŸเบ™เป€เบ”เบตเบœเบปเบ™เบœเบฐเบฅเบดเบ”. เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เป‚เบŸเบ™เป€เบ”เบตเป‰เบ™เบตเป‰เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบชเป‰เบฒเบ‡เบเปเบฒเบฅเบฑเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰, เปเบฅเบฐเบชเปเบฒเบฅเบฑเบš React เบ™เบตเป‰เบˆเบฐเป€เบ›เบฑเบ™เป‚เบŸเบ™เป€เบ”เบต ./build (เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เบ™เบตเป‰เปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰).

เบ—เบตเปˆเบกเบฒ-to-Image (S2I)

เปƒเบ™เบšเบปเบ”เบ‚เบฝเบ™เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เป€เบงเบปเป‰เบฒเป€เบ–เบดเบ‡เบซเบปเบงเบ‚เปเป‰ "S2I เปเบกเปˆเบ™เบซเบเบฑเบ‡เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เปƒเบŠเป‰เบกเบฑเบ™" (เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰. เบ—เบตเปˆเบ™เบตเป‰), เปเบ•เปˆเบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐเบˆเบฐเปเบˆเป‰เบ‡เบเปˆเบฝเบงเบเบฑเบšเบชเบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ™เบตเป‰เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบฎเบนเบšเบžเบฒเบšเบ‚เบญเบ‡ Web App Builder เป€เบฎเบฑเบ”.

เป„เบฅเบเบฐเบเบฒเบ™เบ›เบฐเบเบญเบš

เป„เบฅเบเบฐเบเบฒเบ™เบ›เบฐเบเบญเบšเปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบซเบผเบฒเบเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡ docker เปเบฅเบฐเบชเบดเป‰เบ™เบชเบธเบ”เบ”เป‰เบงเบเบฎเบนเบšเบžเบฒเบš Docker เปƒเบซเบกเปˆ. เบ•เบฒเบกเบ™เบฑเป‰เบ™เปเบฅเป‰เบง, เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™เป€เบกเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปƒเบ™เป€เบงเบ—เบต OpenShift.

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบš Web App Builder, เบกเบฑเบ™เบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเปƒเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡. เบ›เบฐเบเบญเบšเบชเบฐเบ„เบดเบš. เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบฎเบนเบšเบžเบฒเบš builder เปƒเบŠเป‰ npm run build build, เปเบ•เปˆเบ™เบตเป‰เบชเบฒเบกเบฒเบ” overridden เบœเปˆเบฒเบ™เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก NPM_BUILD.

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบเปˆเบฒเบงเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเปเบฒเป€เบฅเบฑเบ”เบฎเบนเบš, เบเปเปˆเบชเป‰เบฒเบ‡เปเบฅเป‰เบงเปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบ—เปˆเบฒเบ™เปƒเบŠเป‰. เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡ React เบ™เบตเป‰เบˆเบฐเป€เบ›เบฑเบ™เป‚เบŸเบ™เป€เบ”เบต ./build, เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ Angular เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เป‚เบŸเบ™เป€เบ”เบต project_name/dist. เปเบฅเบฐ, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบœเบปเบ™เบœเบฐเบฅเบดเบ”, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เป€เบ›เบฑเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบปเบšเบฅเป‰เบฒเบ‡เบœเปˆเบฒเบ™เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก OUTPUT_DIR. เบ”เบต, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เป‚เบŸเป€เบ”เบตเบœเบปเบ™เบœเบฐเบฅเบดเบ”เปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบเบญเบšเบเบฑเบšเบเบญเบš, เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ„เบฑเบ”เบฅเบญเบเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบชเปˆเป‚เบŸเบ™เป€เบ”เบตเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบ™เบฎเบนเบšเบžเบฒเบš, เบ„เบท /opt/apt-root/output. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบขเปˆเบฒเบ‡เป„เบงเบงเบฒเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เปเปˆเป„เบ› - เป„เบฅเบเบฐเบเบฒเบ™เปเบฅเปˆเบ™.

เป„เบฅเบเบฐเปเบฅเปˆเบ™

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เป‚เบ—เบซเบฒ docker เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเบนเปˆเปƒเบ™เบฎเบนเบšเบžเบฒเบšเปƒเบซเบกเปˆเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ›เบฐเบเบญเบš. เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™เป€เบกเบทเปˆเบญเบ™เบณเปƒเบŠเป‰เปƒเบ™เป€เบงเบ—เบต OpenShift. เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ เปเบฅเปˆเบ™เบชเบฐเบ„เบฃเบดเบš เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ เป‚เบกเบ”เบนเบ™เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™ เป€เบžเบทเปˆเบญเบฎเบฑเบšเปƒเบŠเป‰เป€เบ™เบทเป‰เบญเบซเบฒเบ—เบตเปˆเบชเบฐเบ–เบดเบ”เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡.

เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบ”เบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบขเปˆเบฒเบ‡เบงเปˆเบญเบ‡เป„เบง, เปเบ•เปˆเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบงเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป€เบ™เบทเป‰เบญเปƒเบ™เบ„เบปเบ‡เบ—เบตเปˆเบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰. เบ”เบต, เป€เบžเบฒเบฐเบงเปˆเบฒเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป€เบ™เบทเป‰เบญเบซเบฒเบ„เบปเบ‡เบ—เบตเปˆ, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™ Node.js เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบฎเบนเบšเบžเบฒเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ - เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ•เปŒเบˆเบฐเบžเบฝเบ‡เบžเป.

เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ›เบฐเบเบญเบšเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡, เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบดเปˆเบ‡เบญเบทเปˆเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ™เบตเป‰, เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰เบกเบฒเบขเบนเปˆเปƒเบ™เบชเบฐเบ”เบงเบ.

เบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เปˆเบญเบ‡เป‚เบชเป‰

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบ‚เบฝเบ™เบเปˆเบฝเบงเบเบฑเบš เบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เปˆเบญเบ‡เป‚เบชเป‰ เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™ OpenShift:

"เบชเบญเบ‡เบชเบฐเบžเบฒเปเบซเปˆเบ‡เบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰, เป‚เบ”เบเบซเบ™เบถเปˆเบ‡เบชเป‰เบฒเบ‡เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเปเบฅเบฐเบญเบตเบเบซเบ™เปˆเบงเบเบซเบ™เบถเปˆเบ‡เป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบžเบฒเบšเปƒเบ™เบฎเบนเบšเบžเบฒเบšเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ™เบฑเป‰เบ™."

เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบฎเบนเบšเบžเบฒเบš Web App Builder เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ™เปเบฒเปƒเบŠเป‰เบฎเบนเบšเบžเบฒเบšเป€เบŠเบตเบŸเป€เบงเบตเป€เบงเบฑเบš, NGINX เบ”เบฝเบงเบเบฑเบ™, เป€เบžเบทเปˆเบญเบฎเบฑเบšเปƒเบŠเป‰เป€เบ™เบทเป‰เบญเบซเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบฎเบนเบšเบžเบฒเบš Web App Builder เป€เบ›เบฑเบ™เบ•เบปเบงเบชเป‰เบฒเบ‡ "เบšเปเบฅเบดเบชเบธเบ”" เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เบกเบตเบฎเบนเบšเบžเบฒเบš runtime เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ.

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เบ”เป‰เบงเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบชเบฐเป€เบžเบฒเบฐ.

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰ เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ React เบ‡เปˆเบฒเบเบ”เบฒเบ, เบชเป‰เบฒเบ‡เป‚เบ”เบเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบชเบฒเบเบ„เปเบฒเบชเบฑเปˆเบ‡ create-react-app.

เบกเบฑเบ™เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบฎเปˆเบงเบกเบเบฑเบ™ เป„เบŸเบฅเปŒเปเบกเปˆเปเบšเบš OpenShift.

เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เป„เบŸเบฅเปŒเบ™เบตเป‰เปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เปเบฅเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบžเบฒเบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต.

parameters:
  - name: SOURCE_REPOSITORY_URL
    description: The source URL for the application
    displayName: Source URL
    required: true
  - name: SOURCE_REPOSITORY_REF
    description: The branch name for the application
    displayName: Source Branch
    value: master
    required: true
  - name: SOURCE_REPOSITORY_DIR
    description: The location within the source repo of the application
    displayName: Source Directory
    value: .
    required: true
  - name: OUTPUT_DIR
    description: The location of the compiled static files from your web apps builder
    displayName: Output Directory
    value: build
    required: false

เบ—เบธเบเบขเปˆเบฒเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบˆเบฐเปเบˆเป‰เบ‡เบžเปเบชเบปเบกเบ„เบงเบ™, เปเบ•เปˆเบ„เบงเบ™เป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆเบเบฑเบšเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต OUTPUT_DIR. เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ React เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ—เบตเปˆเบˆเบฐเบเบฑเบ‡เบงเบปเบ™, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ React เปƒเบŠเป‰เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ›เบฑเบ™เป‚เบŸเป€เบ”เบตเบœเบปเบ™เบœเบฐเบฅเบดเบ”, เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡ Angular เบซเบผเบทเบชเบดเปˆเบ‡เบญเบทเปˆเบ™, เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ™เบตเป‰เบˆเบฐเบ•เป‰เบญเบ‡เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ•เบฒเบกเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™.

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบฎเบปเบฒเบกเบฒเป€เบšเบดเปˆเบ‡เบžเบฒเบเบชเปˆเบงเบ™ ImageStreams.

- apiVersion: v1
  kind: ImageStream
  metadata:
    name: react-web-app-builder  // 1 
  spec: {}
- apiVersion: v1
  kind: ImageStream
  metadata:
    name: react-web-app-runtime  // 2 
  spec: {}
- apiVersion: v1
  kind: ImageStream
  metadata:
    name: web-app-builder-runtime // 3
  spec:
    tags:
    - name: latest
      from:
        kind: DockerImage
        name: nodeshift/ubi8-s2i-web-app:10.x
- apiVersion: v1
  kind: ImageStream
  metadata:
    name: nginx-image-runtime // 4
  spec:
    tags:
    - name: latest
      from:
        kind: DockerImage
        name: 'centos/nginx-112-centos7:latest'

เป€เบšเบดเปˆเบ‡เบฎเบนเบšเบ—เบตเบชเบฒเบก เปเบฅเบฐเบชเบตเปˆ. เบžเบงเบเป€เบ‚เบปเบฒเบ—เบฑเบ‡เบชเบญเบ‡เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™เบฎเบนเบšเบžเบฒเบš Docker, เปเบฅเบฐเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบกเบฒเบˆเบฒเบเปƒเบช.

เบฎเบนเบšเบžเบฒเบšเบ—เบตเบชเบฒเบกเปเบกเปˆเบ™ web-app-builder เปเบฅเบฐเบกเบฑเบ™เบกเบฒเบˆเบฒเบ nodeshift/ubi8-s2i-web-app tagged 10.x on เบชเบนเบ™เบเบฒเบ‡ Docker.

เบญเบฑเบ™เบ—เบตเบชเบตเปˆเปเบกเปˆเบ™เบฎเบนเบšเบžเบฒเบš NGINX (เบฎเบธเปˆเบ™ 1.12) เบ—เบตเปˆเบกเบตเปเบ—เบฑเบเบซเบผเป‰เบฒเบชเบธเบ” เบชเบนเบ™เบเบฒเบ‡ Docker.

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบชเบญเบ‡เบฎเบนเบšเบ—เปเบฒเบญเบดเบ”. เบžเบงเบเป€เบ‚เบปเบฒเบ—เบฑเบ‡เบชเบญเบ‡เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒเปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเบฐเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เป„เบฅเบเบฐเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡. เบฎเบนเบšเบžเบฒเบšเบ—เปเบฒเบญเบดเบ”, react-web-app-builder, เบˆเบฐเป€เบ›เบฑเบ™เบœเบปเบ™เบกเบฒเบˆเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ›เบฐเบเบญเบšเบ—เบตเปˆเบˆเบฐเบชเบปเบกเบ—เบปเบšเบฎเบนเบšเบžเบฒเบš web-app-builder-runtime เปเบฅเบฐเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบžเบตเปˆเบก "-builder" เปƒเบชเปˆเบŠเบทเปˆเบ‚เบญเบ‡เบฎเบนเบšเบ™เบตเป‰.

เบฎเบนเบšเบžเบฒเบšเบ—เบตเบชเบญเบ‡ - react-web-app-runtime - เบˆเบฐเป€เบ›เบฑเบ™เบœเบปเบ™เบกเบฒเบˆเบฒเบเบเบฒเบ™เบฅเบงเบก nginx-image-runtime เปเบฅเบฐเบšเบฒเบ‡เป„เบŸเบฅเปŒเบˆเบฒเบเบฎเบนเบšเบžเบฒเบš react-web-app-builder. เบฎเบนเบšเบžเบฒเบšเบ™เบตเป‰เบเบฑเบ‡เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบฅเบฐเบˆเบฐเบกเบตเบžเบฝเบ‡เปเบ•เปˆเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบงเบฑเบšเปเบฅเบฐ HTML, JavaScript, CSS เบ„เบปเบ‡เบ—เบตเปˆเบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบชเบฑเบšเบชเบปเบ™? เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบฎเบปเบฒเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปเบฅเบฐเบกเบฑเบ™เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบเบงเปˆเบฒเป€เบฅเบฑเบเบ™เป‰เบญเบ.

เปเบกเปˆเปเบšเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบชเบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เบญเบฑเบ™เบ—เปเบฒเบญเบดเบ”, เปเบฅเบฐเบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ—เบตเปˆเบชเบงเบเบ‡เบฒเบก:

  apiVersion: v1
  kind: BuildConfig
  metadata:
    name: react-web-app-builder
  spec:
    output:
      to:
        kind: ImageStreamTag
        name: react-web-app-builder:latest // 1
    source:   // 2 
      git:
        uri: ${SOURCE_REPOSITORY_URL}
        ref: ${SOURCE_REPOSITORY_REF}
      contextDir: ${SOURCE_REPOSITORY_DIR}
      type: Git
    strategy:
      sourceStrategy:
        env:
          - name: OUTPUT_DIR // 3 
            value: ${OUTPUT_DIR}
        from:
          kind: ImageStreamTag
          name: web-app-builder-runtime:latest // 4
        incremental: true // 5
      type: Source
    triggers: // 6
    - github:
        secret: ${GITHUB_WEBHOOK_SECRET}
      type: GitHub
    - type: ConfigChange
    - imageChange: {}
      type: ImageChange

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เป€เบชเบฑเป‰เบ™เบ—เบตเปˆเบกเบตเบ›เป‰เบฒเบเบŠเบทเปˆ 1 เบเปˆเบฒเบงเบงเปˆเบฒเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ™เบตเป‰เบˆเบฐเบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™เบฎเบนเบšเบžเบฒเบš react-web-app-builder เบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบซเบฑเบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เป€เบฅเบฑเบเบ™เป‰เบญเบเปƒเบ™เบžเบฒเบ ImageStreams.

เป€เบชเบฑเป‰เบ™เบŠเบทเปˆ 2 เบšเบญเบเป€เบˆเบปเป‰เบฒเบงเปˆเบฒเบˆเบฐเป€เบญเบปเบฒเบฅเบฐเบซเบฑเบ”เบกเบฒเบˆเบฒเบเปƒเบช. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบ™เบตเป‰เปเบกเปˆเบ™ git repository, เปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ, ref เปเบฅเบฐ context folder เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบซเบฑเบ™เปเบฅเป‰เบงเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡.

เป€เบชเบฑเป‰เบ™เบ—เบตเปˆเบ•เบดเบ”เบชเบฐเบซเบผเบฒเบ 3 เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เปเบฅเป‰เบงเปƒเบ™เบžเบฒเบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต. เบกเบฑเบ™เป€เบžเบตเปˆเบกเบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก OUTPUT_DIR, เป€เบŠเบดเปˆเบ‡เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เบชเป‰เบฒเบ‡.
เป€เบชเบฑเป‰เบ™เบ›เป‰เบฒเบเบŠเบทเปˆ 4 เบšเบญเบเบงเปˆเบฒเปƒเบซเป‰เปƒเบŠเป‰เบฎเบนเบšเบžเบฒเบš web-app-builder-runtime, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบซเบฑเบ™เปเบฅเป‰เบงเปƒเบ™เบžเบฒเบ ImageStream.

Line labeled 5 เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰ incremental build เบ–เป‰เบฒเบฎเบนเบšเบžเบฒเบš S2I เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบกเบฑเบ™, เปเบฅเบฐเบฎเบนเบšเบžเบฒเบš Web App Builder เป€เบฎเบฑเบ”. เปƒเบ™เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบชเปเบฒเป€เบฅเบฑเบ”เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ›เบฐเบเบญเบš, เบฎเบนเบšเบžเบฒเบšเบˆเบฐเบšเบฑเบ™เบ—เบถเบเป‚เบŸเบ™เป€เบ”เบต node_modules เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เปเบŸเป‰เบกเบˆเบฑเบ”เป€เบเบฑเบš. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ•เปเปˆเป„เบ›, เบฎเบนเบšเบžเบฒเบšเบžเบฝเบ‡เปเบ•เปˆเบˆเบฐ unzip เป‚เบŸเบ™เป€เบ”เบตเบ™เบตเป‰เป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เป€เบงเบฅเบฒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡.

เปเบฅเบฐเบชเบธเบ”เบ—เป‰เบฒเบ, เป€เบชเบฑเป‰เบ™เบ—เบตเปˆเบ•เบดเบ”เบชเบฐเบซเบผเบฒเบ 6 เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบญเบ‡เบชเบฒเบกเบ•เบปเบงเบเบฐเบ•เบธเป‰เบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เปเบŠเบเปเบŠเบ‡เบ„เบนเปˆเบกเบท, เป€เบกเบทเปˆเบญเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ›เปˆเบฝเบ™เปเบ›เบ‡.

เป‚เบ”เบเบฅเบงเบกเปเบฅเป‰เบงเบ™เบตเป‰เปเบกเปˆเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเบชเบงเบเบ‡เบฒเบก.

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบฎเบปเบฒเบกเบฒเป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเบชเบญเบ‡. เบกเบฑเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบญเบฑเบ™เบ—เปเบฒเบญเบดเบ”, เปเบ•เปˆเบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบซเบ™เบถเปˆเบ‡.

apiVersion: v1
  kind: BuildConfig
  metadata:
    name: react-web-app-runtime
  spec:
    output:
      to:
        kind: ImageStreamTag
        name: react-web-app-runtime:latest // 1
    source: // 2
      type: Image
      images:                              
        - from:
            kind: ImageStreamTag
            name: react-web-app-builder:latest // 3
          paths:
            - sourcePath: /opt/app-root/output/.  // 4
              destinationDir: .  // 5
             
    strategy: // 6
      sourceStrategy:
        from:
          kind: ImageStreamTag
          name: nginx-image-runtime:latest
        incremental: true
      type: Source
    triggers:
    - github:
        secret: ${GITHUB_WEBHOOK_SECRET}
      type: GitHub
    - type: ConfigChange
    - type: ImageChange
      imageChange: {}
    - type: ImageChange
      imageChange:
        from:
          kind: ImageStreamTag
          name: react-web-app-builder:latest // 7

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™ react-web-app-runtime, เปเบฅเบฐเบกเบฑเบ™เป€เบฅเบตเปˆเบกเบญเบญเบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ—เบตเปˆเบชเบงเบเบ‡เบฒเบก.

เป€เบชเบฑเป‰เบ™เบ›เป‰เบฒเบเบŠเบทเปˆ 1 เปเบกเปˆเบ™เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เปƒเบซเบกเปˆ - เบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบงเบปเป‰เบฒเบงเปˆเบฒเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปเบกเปˆเบ™เปƒเบชเปˆเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฎเบนเบšเบžเบฒเบš react-web-app-runtime.

เปเบ–เบงเบ—เบตเปˆเบกเบตเบ›เป‰เบฒเบเบŠเบทเปˆ 2, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบŠเบตเป‰เบšเบญเบเบšเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบกเบฒเบˆเบฒเบ. เปเบ•เปˆเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเปˆเบฒเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบงเบปเป‰เบฒเบงเปˆเบฒเบกเบฑเบ™เบกเบฒเบˆเบฒเบเบฎเบนเบšเบžเบฒเบš. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบˆเบฒเบเบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบซเบฒเบเปเปˆเบชเป‰เบฒเบ‡ - เบˆเบฒเบ react-web-app-builder (เบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เป€เบชเบฑเป‰เบ™เบ›เป‰เบฒเบเบŠเบทเปˆ 3). เป„เบŸเบฅเปŒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰เปเบกเปˆเบ™เบขเบนเปˆเบžเบฒเบเปƒเบ™เบฎเบนเบšเบžเบฒเบšเปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบžเบงเบเบกเบฑเบ™เบกเบตเบขเบนเปˆเปƒเบ™เป€เบชเบฑเป‰เบ™เบ›เป‰เบฒเบเบŠเบทเปˆ 4, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบฑเบ™เปเบกเปˆเบ™ /opt/app-root/output/. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบˆเบทเปˆ, เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเป„เบŸเบฅเปŒเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰.

เป‚เบŸเบ™เป€เบ”เบตเบ›เบฒเบเบ—เบฒเบ‡เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ—เบตเปˆเบกเบตเบ›เป‰เบฒเบเบŠเบทเปˆ 5 เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ›เบฐเบˆเบธเบšเบฑเบ™ (เบ™เบตเป‰เปเบกเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เบˆเบทเปˆ, เปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฐเบซเบฑเบ”เบชเบฐเบˆเบฑเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ OpenShift, เปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™).

เบžเบฒเบเบชเปˆเบงเบ™เบเบธเบ”เบ—เบฐเบชเบฒเบ” - เป€เบชเบฑเป‰เบ™เบ—เบตเปˆเบ•เบดเบ”เบชเบฐเบซเบผเบฒเบ 6 - เบเบฑเบ‡เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”. เบžเบฝเบ‡เปเบ•เปˆเป€เบงเบฅเบฒเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰ nginx-image-runtime, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบซเบฑเบ™เปเบฅเป‰เบงเปƒเบ™เบžเบฒเบ ImageStream.

เบชเบธเบ”เบ—เป‰เบฒเบ, เป€เบชเบฑเป‰เบ™เบ—เบตเปˆเบกเบตเบ›เป‰เบฒเบเบŠเบทเปˆ 7 เปเบกเปˆเบ™เบžเบฒเบเบชเปˆเบงเบ™เบ‚เบญเบ‡ triggers เบ—เบตเปˆเบˆเบฐเบเบฐเบ•เบธเป‰เบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบ™เบตเป‰เบ—เบธเบเบ„เบฑเป‰เบ‡เบ—เบตเปˆ react-web-app-builder เบฎเบนเบšเบžเบฒเบšเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡.

เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปเบกเปˆเปเบšเบšเบ™เบตเป‰เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบเบฒเบ™เบ›เบฑเบšเบ„เปˆเบฒเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ—เบตเปˆเบชเบงเบเบ‡เบฒเบก, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เปเบฅเบฐเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›. เบเบฐเบฅเบธเบ™เบฒเบฎเบฑเบšเบŠเบฒเบšเบงเปˆเบฒเบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบˆเบฐเบ–เบทเบเบ™เบณเปƒเบŠเป‰เปเบกเปˆเบ™เบฎเบนเบšเบžเบฒเบš react-web-app-runtime.

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบšเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™เปเบกเปˆเปเบšเบš, เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบกเบฑเบ™เป€เบžเบทเปˆเบญเบ›เบฑเบšเปƒเบŠเป‰เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™.

เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบฅเบนเบเบ„เป‰เบฒ OpenShift เป€เบญเบตเป‰เบ™เบงเปˆเบฒ oc เป€เบžเบทเปˆเบญเบ™เบณเปƒเบŠเป‰เปเบกเปˆเปเบšเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

$ find . | grep openshiftio | grep application | xargs -n 1 oc apply -f

$ oc new-app --template react-web-app -p SOURCE_REPOSITORY_URL=https://github.com/lholmquist/react-web-app

เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เปƒเบ™เบฎเบนเบšเบซเบ™เป‰เบฒเบˆเปเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบงเบดเบชเบฐเบงเบฐเบเปเบฒเป‚เบ”เบเป€เบˆเบ”เบ•เบฐเบ™เบฒเป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเปเบกเปˆเปเบšเบš./openshiftio/application.yaml.

เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเบชเบญเบ‡เบžเบฝเบ‡เปเบ•เปˆเบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปƒเบซเบกเปˆเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเปเบกเปˆเปเบšเบšเบ™เบตเป‰.

เบซเบผเบฑเบ‡เบˆเบฒเบเบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป€เบฎเบฑเบ”เบงเบฝเบ, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบชเบญเบ‡เบชเบฐเบžเบฒเปเบซเปˆเบ‡:

เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเปƒเบ™ OpenShift, เบชเปˆเบงเบ™ 2: เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰

เปเบฅเบฐเบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบซเบ™เป‰เบฒเบˆเปเบžเบฒเบšเบฅเบงเบก, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™ pod เป€เบ›เบตเบ”เบ•เบปเบง:

เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเปƒเบ™ OpenShift, เบชเปˆเบงเบ™ 2: เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰

เบ„เบฅเบดเบเบ—เบตเปˆเบฅเบดเป‰เบ‡เบ™เบฑเป‰เบ™เปเบฅเป‰เบงเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ–เบทเบเบžเบฒเป„เบ›เบ—เบตเปˆเปเบญเบฑเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เปœเป‰เบฒเปเบญเบฑเบš React เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™:

เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเปƒเบ™ OpenShift, เบชเปˆเบงเบ™ 2: เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰

เป€เบชเบตเบกเบ›เบต 1

เบชเปเบฒเบฅเบฑเบš lovers Angular เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบกเบต เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ•เบปเบงเบขเปˆเบฒเบ‡.

เบฎเบนเบšเปเบšเบšเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™, เบเบปเบเป€เบงเบฑเป‰เบ™เบ•เบปเบงเปเบ› OUTPUT_DIR.

เป€เบชเบตเบกเบ›เบต 2

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เปƒเบŠเป‰ NGINX เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ•เปŒ, เปเบ•เปˆเบกเบฑเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบ—เบปเบ”เปเบ—เบ™เบกเบฑเบ™เบ”เป‰เบงเบ Apache, เบžเบฝเบ‡เปเบ•เปˆเบ›เปˆเบฝเบ™เปเบกเปˆเปเบšเบšเปƒเบ™เป„เบŸเบฅเปŒ. เบฎเบนเบšเบžเบฒเบš NGINX เบชเบธเบ” เบฎเบนเบšเบžเบฒเบš Apache.

เบชเบฐเบซเบฅเบธเบš

เปƒเบ™เบชเปˆเบงเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบŠเบธเบ”เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบงเบฑเบšเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบขเปˆเบฒเบ‡เป„เบงเบงเบฒเปƒเบ™เป€เบงเบ—เบต OpenShift. เบกเบทเป‰เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบฎเบนเบšเบžเบฒเบšเบ‚เบญเบ‡ Web App เป€เบฎเบฑเบ”เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบงเบฑเบšเบ—เบตเปˆเบšเปเบฅเบดเบชเบธเบ”เป€เบŠเบฑเปˆเบ™ NGINX เป‚เบ”เบเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเบœเบฐเบฅเบดเบ”เบซเบผเบฒเบเบ‚เบถเป‰เบ™. เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ•เปเปˆเป„เบ›เปเบฅเบฐเบชเบธเบ”เบ—เป‰เบฒเบเปƒเบ™เบŠเบธเบ”เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบชเปเบฒเบฅเบฑเบšเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปƒเบ™ OpenShift เปเบฅเบฐเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบฒเบ™ synchronization เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปเบฅเบฐเบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบ.

เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบŠเบธเบ”เบ™เบตเป‰

เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™