ืžืึธื“ืขืจืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื•ื™ืฃ OpenShift, ื˜ื™ื™ืœ 2: ื˜ืฉื™ื™ื ื“ ื‘ื™ืœื“ืขืจ

ื ื’ื•ื˜ืŸ ื™ืขื“ืขืจ! ื“ืึธืก ืื™ื– ื“ื™ ืจื’ืข ืคึผืึธืกื˜ืŸ ืื™ืŸ ืื•ื ื“ื–ืขืจ ืกืขืจื™ืข ืื™ืŸ ื•ื•ืึธืก ืžื™ืจ ื•ื•ื™ื™ึทื–ืŸ ื•ื•ื™ ืฆื• ืฆืขื•ื•ื™ืงืœืขืŸ ืžืึธื“ืขืจืŸ ื•ื•ืขื‘ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื•ื™ืฃ Red Hat OpenShift.

ืžืึธื“ืขืจืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื•ื™ืฃ OpenShift, ื˜ื™ื™ืœ 2: ื˜ืฉื™ื™ื ื“ ื‘ื™ืœื“ืขืจ

ืื™ืŸ ื“ื™ ืคืจื™ืขืจื“ื™ืงืข ืคึผืึธืกื˜ืŸ, ืžื™ืจ ืึท ื‘ื™ืกืœ ื’ืขืจื™ืจื˜ ื“ื™ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืคื•ืŸ ื“ื™ ื ื™ื™ึทืข S2I (ืžืงื•ืจ-ืฆื•-ื‘ื™ืœื“) ื‘ื™ืœื“ืขืจ ื‘ื™ืœื“, ื•ื•ืึธืก ืื™ื– ื“ื™ื–ื™ื™ื ื“ ืคึฟืึทืจ ื‘ื ื™ืŸ ืื•ืŸ ื“ื™ืคึผืœื•ื™ื™ื ื’ ืžืึธื“ืขืจืŸ ื•ื•ืขื‘ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื•ื™ืฃ ื“ื™ OpenShift ืคึผืœืึทื˜ืคืึธืจืžืข. ื“ืขืจื ืึธืš ืžื™ืจ ื–ืขื ืขืŸ ืื™ื ื˜ืขืจืขืกื™ืจื˜ ืื™ืŸ ื“ื™ ื˜ืขืžืข ืคื•ืŸ โ€‹โ€‹ื’ืขืฉื•ื•ื™ื ื“ ื“ื™ืคึผืœื•ื™ื™ื ื’ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ, ืื•ืŸ ื”ื™ื™ึทื ื˜ ืžื™ืจ ื•ื•ืขืœืŸ ืงื•ืงืŸ ื•ื•ื™ ืฆื• ื ื•ืฆืŸ ืึท S2I ื‘ื™ืœื“ ื•ื•ื™ ืึท "ืจื™ื™ืŸ" ื‘ื™ืœื“ืขืจ ื‘ื™ืœื“ ืื•ืŸ ืคืึทืจื‘ื™ื ื“ืŸ ืขืก ืžื™ื˜ ืคึฟืึทืจื‘ื•ื ื“ืขื ืข OpenShift ืึทืกืขืžื‘ืœื™ื–.

ืจื™ื™ืŸ ื‘ื™ืœื“ืขืจ ื‘ื™ืœื“

ื•ื•ื™ ืžื™ืจ ื“ืขืจืžืื ื˜ ืื™ืŸ ื˜ื™ื™ืœ XNUMX, ืจื•ื‘ึฟ ืžืึธื“ืขืจืŸ ื•ื•ืขื‘ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ื”ืึธื‘ืŸ ืึท ืึทื–ื•ื™ ื’ืขืจื•ืคืขื ืข ื‘ื•ื™ืขืŸ ื‘ื™ื ืข, ื•ื•ืึธืก ื˜ื™ืคึผื™ืงืœื™ ืคึผืขืจืคืึธืจืžื– ืึทืคึผืขืจื™ื™ืฉืึทื ื– ืึทื–ืึท ื•ื•ื™ ืงืึธื“ ื˜ืจืึทื ืกืคึผื™ืœืึทื˜ื™ืึธืŸ, ืงื™ื™ืคืœ ื˜ืขืงืข ืงืึทื ืงืึทื˜ืึทื ื™ื™ืฉืึทืŸ ืื•ืŸ ืžื™ื ื™ืคื™ืงืึทื˜ื™ืึธืŸ. ื“ื™ ื˜ืขืงืขืก ื‘ืืงื•ืžืขืŸ ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ื“ื™ ืึทืคึผืขืจื™ื™ืฉืึทื ื– - ืื•ืŸ ื“ืึธืก ืื™ื– ืกื˜ืึทื˜ื™ืง HTML, ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜ ืื•ืŸ CSS - ื–ืขื ืขืŸ ืกื˜ืึธืจื“ ืื™ืŸ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ื˜ืขืงืข. ื“ืขืจ ืึธืจื˜ ืคื•ืŸ ื“ืขื ื˜ืขืงืข ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ื“ืขืคึผืขื ื“ืก ืื•ื™ืฃ ื•ื•ืึธืก ื‘ื•ื™ืขืŸ ืžื›ืฉื™ืจื™ื ื–ืขื ืขืŸ ื’ืขื ื™ืฆื˜, ืื•ืŸ ืคึฟืึทืจ ืจืขืึทืงื˜ ื“ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื™ ./build ื˜ืขืงืข (ืžื™ืจ ื•ื•ืขืœืŸ ืงื•ืžืขืŸ ืฆื•ืจื™ืง ืฆื• ื“ืขื ืื™ืŸ ืžืขืจ ื“ืขื˜ืึทืœ ืื•ื ื˜ืŸ).

ืžืงื•ืจ-ืฆื•-ื‘ื™ืœื“ (S2I)

ืื™ืŸ ื“ืขื ืคึผืึธืกื˜ืŸ ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ืึธื ืจื™ืจืŸ ื“ื™ ื˜ืขืžืข "ื•ื•ืึธืก ืื™ื– S2I ืื•ืŸ ื•ื•ื™ ืฆื• ื ื•ืฆืŸ ืขืก" (ืื™ืจ ืงืขื ื˜ ืœื™ื™ืขื ืขืŸ ืžืขืจ ื•ื•ืขื’ืŸ ื“ืขื ื“ืึธ), ืึธื‘ืขืจ ืขืก ืื™ื– ื•ื•ื™ื›ื˜ื™ืง ืฆื• ื–ื™ื™ืŸ ืงืœืึธืจ ื•ื•ืขื’ืŸ ื“ื™ ืฆื•ื•ื™ื™ ืกื˜ืขืคึผืก ืื™ืŸ ื“ืขื ืคึผืจืึธืฆืขืก ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื•ื•ืึธืก ืึท ื•ื•ืขื‘ ืึทืคึผ ื‘ื™ืœื“ืขืจ ื‘ื™ืœื“ ื˜ื•ื˜.

ืึทืกืขืžื‘ืœื™ ืคืึทืกืข

ื“ื™ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืคืึทืกืข ืื™ื– ื–ื™ื™ืขืจ ืขื ืœืขืš ืื™ืŸ ื ืึทื˜ื•ืจ ืฆื• ื•ื•ืึธืก ื›ืึทืคึผืึทื ื– ื•ื•ืขืŸ ืื™ืจ ืœื•ื™ืคืŸ ื“ืึธืงืขืจ ื‘ื•ื™ืขืŸ ืื•ืŸ ืขื ื“ื™ืงืŸ ืžื™ื˜ ืึท ื ื™ื™ึท ื“ืึธืงืงืขืจ ื‘ื™ืœื“. ืึทืงืงืึธืจื“ื™ื ื’ืœื™, ื“ืขื ื‘ื™ื ืข ืึทืงืขืจื– ื•ื•ืขืŸ ืื™ืจ ืึธื ื”ื™ื™ื‘ืŸ ืึท ื‘ื•ื™ืขืŸ ืื•ื™ืฃ ื“ื™ OpenShift ืคึผืœืึทื˜ืคืึธืจืžืข.

ืื™ืŸ ื“ืขื ืคืึทืœ ืคื•ืŸ ืึท ื•ื•ืขื‘ ืึทืคึผ ื‘ื™ืœื“ืขืจ ื‘ื™ืœื“, ืขืก ืื™ื– ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš ืคึฟืึทืจ ื™ื ืกื˜ืึธืœื™ื ื’ ื“ื™ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื– ืคื•ืŸ ื“ื™ื™ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ืŸ ืœื•ื™ืคืŸ ื“ื™ ื‘ื•ื™ืขืŸ. ืึทืกืขืžื‘ืึทืœ ืฉืจื™ืคื˜. ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜, ื“ื™ ื‘ื™ืœื“ืขืจ ื‘ื™ืœื“ ื ื™ืฆื˜ ื“ื™ npm run build construct, ืึธื‘ืขืจ ื“ืึธืก ืงืขืŸ ื–ื™ื™ืŸ ืึธื•ื•ื•ืขืจืจื™ื™ื“ ื“ื•ืจืš ื“ื™ NPM_BUILD ืกื•ื•ื™ื•ื•ืข ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง.

ื•ื•ื™ ืžื™ืจ ื’ืขื–ืื’ื˜ ืคืจื™ืขืจ, ื“ื™ ืึธืจื˜ ืคื•ืŸ ื“ื™ ืคืึทืจื˜ื™ืง, ืฉื•ื™ืŸ ื’ืขื‘ื•ื™ื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื“ืขืคึผืขื ื“ืก ืื•ื™ืฃ ื•ื•ืึธืก ืžื›ืฉื™ืจื™ื ืื™ืจ ื ื•ืฆืŸ. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื™ืŸ ื“ืขื ืคืึทืœ ืคื•ืŸ ืจืขืึทืงื˜, ื“ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื™ ./build ื˜ืขืงืข, ืื•ืŸ ืคึฟืึทืจ ืึทื ื’ื•ืœืึทืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื™ project_name/dist ื˜ืขืงืข. ืื•ืŸ, ื•ื•ื™ ืฉื•ื™ืŸ ื’ืขื•ื•ื™ื–ืŸ ืื™ืŸ ื“ื™ ืคืจื™ืขืจื“ื™ืงืข ืคึผืึธืกื˜ืŸ, ื“ื™ ืึธืจื˜ ืคื•ืŸ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ, ื•ื•ืึธืก ืื™ื– ื‘ืึทืฉื˜ื™ืžื˜ ืฆื• ื‘ื•ื™ืขืŸ ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜, ืงืขื ืขืŸ ื–ื™ื™ืŸ ืึธื•ื•ื•ืขืจืจื™ื™ื“ ื“ื•ืจืš ื“ื™ OUTPUT_DIR ืกื•ื•ื™ื•ื•ืข ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง. ื ื•, ื–ื™ื ื˜ ื“ืขืจ ืึธืจื˜ ืคื•ืŸ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ื˜ืขืงืข ืื™ื– ืึทื ื“ืขืจืฉ ืคื•ืŸ ืคืจื™ื™ืžื•ื•ืขืจืง ืฆื• ืคืจื™ื™ืžื•ื•ืขืจืง, ืื™ืจ ืคืฉื•ื˜ ื ืึธื›ืžืึทื›ืŸ ื“ื™ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ืจืขื–ื•ืœื˜ืึทื˜ ืฆื• ื“ื™ ื ืึธืจืžืึทืœ ื˜ืขืงืข ืื™ืŸ ื“ื™ ื‘ื™ืœื“, ื ื™ื™ืžืœื™ /ืึธืคึผื˜/ืึทืคึผื˜-ื•ื•ืึธืจืฆืœ/output. ื“ืึธืก ืื™ื– ื•ื•ื™ื›ื˜ื™ืง ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื“ื™ ืจืขืฉื˜ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, ืึธื‘ืขืจ ืื™ืฆื˜ ืœืึธื–ืŸ ืื•ื ื“ื– ื’ืขืฉื•ื•ื™ื ื“ ืงื•ืงืŸ ืื™ืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ื‘ื™ื ืข - ื“ื™ ืœื•ื™ืคืŸ ืคืึทืกืข.

ืœื•ื™ืคืŸ ืคืึทืกืข

ื“ืขืจ ื‘ื™ื ืข ืึทืงืขืจื– ื•ื•ืขืŸ ืึท ืจื•ืคืŸ ืฆื• ื“ืึทืงืขืจ ืœื•ื™ืคืŸ ืื™ื– ื’ืขืžืื›ื˜ ืื•ื™ืฃ ื“ื™ ื ื™ื™ึทืข ื‘ื™ืœื“ ื‘ืืฉืืคืŸ ื‘ืขืฉืึทืก ื“ื™ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ื‘ื™ื ืข. ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ื›ืึทืคึผืึทื ื– ื•ื•ืขืŸ ื“ื™ืคึผืœื•ื™ื™ื ื’ ืื•ื™ืฃ ื“ื™ OpenShift ืคึผืœืึทื˜ืคืึธืจืžืข. ืคืขืœื™ืงื™ื™ึทื˜ ืœื•ื™ืคืŸ ืฉืจื™ืคื˜ ื ื™ืฆื˜ ื“ื™ื ืขืŸ ืžืึธื“ื•ืœืข ืฆื• ื“ื™ื ืขืŸ ืกื˜ืึทื˜ื™ืง ืื™ื ื”ืึทืœื˜ ืื™ืŸ ื“ื™ ืื•ื™ื‘ืŸ ื ืึธืจืžืึทืœ ืจืขื–ื•ืœื˜ืึทื˜ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ.

ื“ืขืจ ืื•ืคึฟืŸ ืื™ื– ื’ื•ื˜ ืคึฟืึทืจ ื’ืขืฉื•ื•ื™ื ื“ ื“ื™ืคึผืœื•ื™ื™ื ื’ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–, ืึธื‘ืขืจ ืขืก ืื™ื– ื‘ื›ืœืœ ื ื™ืฉื˜ ืจืขืงืึทืžืขื ื“ื™ื“ ืฆื• ื“ื™ื ืขืŸ ืกื˜ืึทื˜ื™ืง ืื™ื ื”ืึทืœื˜ ืื•ื™ืฃ ื“ืขื ื•ื•ืขื’. ื ื•, ื–ื™ื ื˜ ืื™ืŸ ืคืึทืงื˜ ืžื™ืจ ื“ื™ื ืขืŸ ื‘ืœื•ื™ื– ืกื˜ืึทื˜ื™ืง ืื™ื ื”ืึทืœื˜, ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื“ืึทืจืคึฟืŸ Node.js ืื™ื ืกื˜ืึทืœื™ืจืŸ ืื™ืŸ ืื•ื ื“ื–ืขืจ ื‘ื™ืœื“ - ืึท ื•ื•ืขื‘ ืกืขืจื•ื•ืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื ื•ื’.

ืื™ืŸ ืื ื“ืขืจืข ื•ื•ืขืจื˜ืขืจ, ื•ื•ืขืŸ ืึทืกืขืžื‘ืึทืœื™ื ื’ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืื™ื™ืŸ ื–ืึทืš, ื•ื•ืขืŸ ืขืงืกืึทืงื™ื•ื˜ื™ื ื’ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืื ื“ืขืจืŸ. ืื™ืŸ ื“ืขื ืกื™ื˜ื•ืึทืฆื™ืข, ื˜ืฉื™ื™ื ื“ ื‘ื™ืœื“ืขืจ ืงื•ืžืขืŸ ืื™ืŸ ื”ืึทื ื˜ื™ืง.

ื˜ืฉื™ื™ื ื“ื™ื“ ื‘ื•ื™ืขืŸ

ื“ืึธืก ืื™ื– ื•ื•ืึธืก ื–ื™ื™ ืฉืจื™ื™ึทื‘ืŸ ื•ื•ืขื’ืŸ ื˜ืฉื™ื™ื ื“ื™ื“ ื‘ื•ื™ืขืŸ ืื™ืŸ ื“ื™ OpenShift ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ:

"ืฆื•ื•ื™ื™ ืึทืกืขืžื‘ืœื™ื– ืงืขื ืขืŸ ื–ื™ื™ืŸ ืœื™ื ื’ืงื˜ ืฆื•ื–ืึทืžืขืŸ, ืžื™ื˜ ืื™ื™ื ืขืจ ื“ื–ืฉืขื ืขืจื™ื™ื˜ื™ื ื’ ืึท ืงืึธืžืคึผื™ืœืขื“ ืขื ื˜ื™ื˜ื™ ืื•ืŸ ื“ื™ ืื ื“ืขืจืข ื”ืึธืกื˜ื™ื ื’ ื“ื™ ืขื ื˜ื™ื˜ื™ ืื™ืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ื‘ื™ืœื“ ื•ื•ืึธืก ืื™ื– ื’ืขื ื™ืฆื˜ ืฆื• ืœื•ื™ืคืŸ ื“ื™ ืขื ื˜ื™ื˜ื™."

ืื™ืŸ ืื ื“ืขืจืข ื•ื•ืขืจื˜ืขืจ, ืžื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ื“ื™ ื•ื•ืขื‘ ืึทืคึผ ื‘ื™ืœื“ืขืจ ื‘ื™ืœื“ ืฆื• ืœื•ื™ืคืŸ ืื•ื ื“ื–ืขืจ ื‘ื•ื™ืขืŸ, ืื•ืŸ ื“ืขืจื ืึธืš ื ื•ืฆืŸ ื“ื™ ื•ื•ืขื‘ ืกืขืจื•ื•ืขืจ ื‘ื™ืœื“, ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ NGINX, ืฆื• ื“ื™ื ืขืŸ ืื•ื ื“ื–ืขืจ ืื™ื ื”ืึทืœื˜.

ืื–ื•ื™, ืžื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ื“ื™ ื•ื•ืขื‘ ืึทืคึผ ื‘ื™ืœื“ืขืจ ื‘ื™ืœื“ ื•ื•ื™ ืึท "ืจื™ื™ืŸ" ื‘ื™ืœื“ืขืจ ืื•ืŸ ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜ ื”ืึธื‘ืŸ ืึท ืงืœื™ื™ืŸ ืจื•ื ื˜ื™ืžืข ื‘ื™ืœื“.

ืื™ืฆื˜ ืœืึธืžื™ืจ ืงื•ืงืŸ ืื™ืŸ ื“ืขื ืžื™ื˜ ืึท ืกืคึผืขืฆื™ืคื™ืฉ ื‘ื™ื™ึทืฉืคึผื™ืœ.

ืคึฟืึทืจ ื˜ืจื™ื™ื ื™ื ื’ ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ ืคึผืฉื•ื˜ ืจืขืึทืงื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ, ื‘ืืฉืืคืŸ ืžื™ื˜ ื“ื™ 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 ื ื™ืฆื˜ ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ื•ื•ืขืจื˜ ื•ื•ื™ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ื˜ืขืงืข, ืึธื‘ืขืจ ืื™ืŸ ื“ืขื ืคืึทืœ ืคื•ืŸ ืึทื ื’ื•ืœืึทืจ ืึธื“ืขืจ ืขืคึผืขืก ืึทื ื“ืขืจืฉ, ื“ืขื ืคึผืึทืจืึทืžืขื˜ืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื‘ื™ื˜ืŸ ื•ื•ื™ ื ื™ื™ื˜ื™ืง.

ืื™ืฆื˜ ืœืึธื–ืŸ ืื•ื ื“ื– ืงื•ืง ืื™ืŸ ื“ื™ 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'

ื ืขืžืขืŸ ืึท ืงื•ืง ื‘ื™ื™ึท ื“ื™ ื“ืจื™ื˜ ืื•ืŸ ืคืขืจื˜ ื‘ื™ืœื“ืขืจ. ื–ื™ื™ ื–ืขื ืขืŸ ื‘ื™ื™ื“ืข ื“ื™ืคื™ื™ื ื“ ื•ื•ื™ ื“ืึธืงืขืจ ื‘ื™ืœื“ืขืจ, ืื•ืŸ ืื™ืจ ืงืขื ืขืŸ ืงืœืืจ ื–ืขืŸ ื•ื•ื• ื–ื™ื™ ืงื•ืžืขืŸ ืคื•ืŸ.

ื“ื™ ื“ืจื™ื˜ ื‘ื™ืœื“ ืื™ื– ื•ื•ืขื‘-ืึทืคึผ-ื‘ื™ืœื“ืขืจ ืื•ืŸ ืขืก ืงื•ืžื˜ ืคึฟื•ืŸ ื ืึธื“ืขืฉื™ืคื˜/ubi8-s2i-web-app ื˜ืึทื’ื“ 10.x ืื•ื™ืฃ ื“ืึธืงืงืขืจ ื›ืึทื‘.

ื“ืขืจ ืคืขืจื˜ ืื™ื– ืึท NGINX ื‘ื™ืœื“ (ื•ื•ืขืจืกื™ืข 1.12) ืžื™ื˜ ื“ื™ ืœืขืฆื˜ืข ืงื•ื•ื™ื˜ืœ ืื•ื™ืฃ ื“ืึธืงืงืขืจ ื›ืึทื‘.

ืื™ืฆื˜ ืœืึธืžื™ืจ ืงื•ืงืŸ ืื™ืŸ ื“ื™ ืขืจืฉื˜ืข ืฆื•ื•ื™ื™ ื‘ื™ืœื“ืขืจ. ื–ื™ื™ ื–ืขื ืขืŸ ื‘ื™ื™ื“ืข ืœื™ื™ื“ื™ืง ืื™ืŸ ืึธื ื”ื™ื™ื‘ ืื•ืŸ ื–ืขื ืขืŸ ื‘ืืฉืืคืŸ ื‘ืœื•ื™ื– ื‘ืขืฉืึทืก ื“ื™ ื‘ื•ื™ืขืŸ ืคืึทืกืข. ื“ืขืจ ืขืจืฉื˜ืขืจ ื‘ื™ืœื“, ืจืขืึทืงื˜-ื•ื•ืขื‘-ืึทืคึผ-ื‘ื™ืœื“ืขืจ, ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ืึท ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืฉืจื™ื˜ ื•ื•ืึธืก ื•ื•ืขื˜ ืคืึทืจื‘ื™ื ื“ืŸ ื“ื™ ื•ื•ืขื‘-ืึทืคึผ-ื‘ื™ืœื“ืขืจ-ืจื•ื ื˜ื™ืžืข ื‘ื™ืœื“ ืื•ืŸ ืื•ื ื“ื–ืขืจ ืžืงื•ืจ ืงืึธื“. ืึทื– ืื™ื– ื•ื•ืึธืก ืžื™ืจ ืฆื•ื’ืขื’ืขื‘ืŸ "-ื‘ื™ืœื“ืขืจ" ืฆื• ื“ืขื ื ืึธืžืขืŸ ืคื•ืŸ ื“ืขื ื‘ื™ืœื“.

ื“ื™ ืจื’ืข ื‘ื™ืœื“ - ืจืขืึทืงื˜-ื•ื•ืขื‘-ืึทืคึผ-ืจื•ื ื˜ื™ืžืข - ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ืงืึทืžื‘ื™ื™ื ื™ื ื’ nginx-image-runtime ืื•ืŸ ืขื˜ืœืขื›ืข ื˜ืขืงืขืก ืคื•ืŸ ื“ื™ ืจืขืึทืงื˜-ื•ื•ืขื‘-ืึทืคึผ-ื‘ื™ืœื“ืขืจ ื‘ื™ืœื“. ื“ืขืจ ื‘ื™ืœื“ ื•ื•ืขื˜ ืื•ื™ืš ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ื‘ืขืฉืึทืก ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื•ืŸ ื•ื•ืขื˜ ื‘ืœื•ื™ื– ืึทื ื˜ื”ืึทืœื˜ืŸ ื“ื™ ื•ื•ืขื‘ ืกืขืจื•ื•ืขืจ ืื•ืŸ ืกื˜ืึทื˜ื™ืง HTML, ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜, 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 ื–ืื’ื˜ ืึทื– ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ื“ืขื ื‘ื•ื™ืขืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืฉื˜ืขืœื˜ ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืจืขืึทืงื˜-ื•ื•ืขื‘-ืึทืคึผ-ื‘ื™ืœื“ืขืจ ื‘ื™ืœื“ ื•ื•ืึธืก ืžื™ืจ ื’ืขื–ืขืŸ ืึท ื‘ื™ืกืœ ืคืจื™ืขืจ ืื™ืŸ ื“ื™ ImageStreams ืึธืคึผื˜ื™ื™ืœื•ื ื’.

ื“ื™ ืฉื•ืจื” ืžื™ื˜ืŸ ื ืึธืžืขืŸ 2 ื“ืขืจืฆื™ื™ืœื˜ ืื™ืจ ื•ื•ื• ืฆื• ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืงืึธื“. ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ, ื“ืึธืก ืื™ื– ืึท ื’ื™ื˜ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™, ืื•ืŸ ื“ื™ ืึธืจื˜, ืจืขืฃ ืื•ืŸ ืงืึธื ื˜ืขืงืกื˜ ื˜ืขืงืข ื–ืขื ืขืŸ ื‘ืืฉืœืืกืŸ ื“ื•ืจืš ื“ื™ ืคึผืึทืจืึทืžืขื˜ืขืจืก ื•ื•ืึธืก ืžื™ืจ ืฉื•ื™ืŸ ื’ืขื–ืขืŸ ืื•ื™ื‘ืŸ.

ื“ื™ ืฉื•ืจื” ืžื™ื˜ืŸ ื ืึธืžืขืŸ 3 ืื™ื– ื•ื•ืึธืก ืžื™ืจ ืฉื•ื™ืŸ ื’ืขื–ืขืŸ ืื™ืŸ ื“ื™ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืึธืคึผื˜ื™ื™ืœื•ื ื’. ืขืก ืžื•ืกื™ืฃ ื“ื™ OUTPUT_DIR ืกื•ื•ื™ื•ื•ืข ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง, ื•ื•ืึธืก ืื™ืŸ ืื•ื ื“ื–ืขืจ ื‘ื™ื™ึทืฉืคึผื™ืœ ืื™ื– ื‘ื•ื™ืขืŸ.
ื“ื™ ืฉื•ืจื” ืžื™ื˜ืŸ ื ืึธืžืขืŸ 4 ื–ืื’ื˜ ืฆื• ื ื•ืฆืŸ ื“ื™ ื•ื•ืขื‘-ืึทืคึผ-ื‘ื™ืœื“ืขืจ-ืจื•ื ื˜ื™ืžืข ื‘ื™ืœื“, ื•ื•ืึธืก ืžื™ืจ ืฉื•ื™ืŸ ื’ืขื–ืขืŸ ืื™ืŸ ื“ื™ ImageStream ืึธืคึผื˜ื™ื™ืœื•ื ื’.

ืฉื•ืจื” ืžื™ื˜ืŸ ื ืึธืžืขืŸ 5 ื–ืื’ื˜ ืึทื– ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื ื•ืฆืŸ ืึท ื™ื ืงืจืึทืžืขื ื˜ืึทืœ ื‘ื•ื™ืขืŸ ืื•ื™ื‘ ื“ื™ S2I ื‘ื™ืœื“ ืฉื˜ื™ืฆื˜ ืขืก, ืื•ืŸ ื“ื™ ื•ื•ืขื‘ ืึทืคึผ ื‘ื™ืœื“ืขืจ ื‘ื™ืœื“. ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืงืึทื˜ืขืจ, ื ืึธืš ื“ื™ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ื‘ื™ื ืข ืื™ื– ื’ืขืขื ื“ื™ืงื˜, ื“ื™ ื‘ื™ืœื“ ื•ื•ืขื˜ ืจืึทื˜ืขื•ื•ืขืŸ ื“ื™ node_modules ื˜ืขืงืข ืื™ืŸ ืึทืŸ ืึทืจืงื™ื™ื•ื• ื˜ืขืงืข. ื“ืขืจื ืึธืš, ืื•ื™ืฃ ืกืึทื‘ืกืึทืงื•ื•ืึทื ื˜ ืจืึทื ื–, ื“ื™ ื‘ื™ืœื“ ื•ื•ืขื˜ ืคืฉื•ื˜ ืึทื ื–ื™ืคึผ ื“ืขื ื˜ืขืงืข ืฆื• ืจืขื“ื•ืฆื™ืจืŸ ื“ื™ ื‘ื•ื™ืขืŸ ืฆื™ื™ื˜.

ืื•ืŸ ืœืขืกืึธืฃ, ื“ื™ ืฉื•ืจื” ืžื™ื˜ืŸ ื ืึธืžืขืŸ 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

ืึทื–ื•ื™ ื“ื™ ืฆื•ื•ื™ื™ื˜ืข ื‘ื•ื™ืขืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ื– ืจืขืึทืงื˜-ื•ื•ืขื‘-ืึทืคึผ-ืจื•ื ื˜ื™ืžืข, ืื•ืŸ ืขืก ืกื˜ืึทืจืฅ ืึท ืฉื™ื™ืŸ ื ืึธืจืžืึทืœ.

ื“ื™ ืฉื•ืจื” ืžื™ื˜ืŸ ื ืึธืžืขืŸ 1 ืื™ื– ื’ืึธืจื ื™ืฉื˜ ื ื™ื™ึท - ืขืก ืคืฉื•ื˜ ื–ืื’ื˜ ืึทื– ื“ื™ ื‘ื•ื™ืขืŸ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ื– ืฉื˜ืขืœืŸ ืื™ืŸ ื“ื™ ืจืขืึทืงื˜-ื•ื•ืขื‘-ืึทืคึผ-ืจื•ื ื˜ื™ืžืข ื‘ื™ืœื“.

ื“ื™ ืฉื•ืจื” ืžื™ื˜ืŸ ื ืึธืžืขืŸ 2, ื•ื•ื™ ืื™ืŸ ื“ื™ ืคืจื™ืขืจื“ื™ืงืข ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ, ื™ื ื“ื™ืงื™ื™ืฅ ื•ื•ื• ืฆื• ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืžืงื•ืจ ืงืึธื“. ืึธื‘ืขืจ ื‘ืึทืžืขืจืงืŸ ืึทื– ื“ืึธ ืžื™ืจ ื–ืึธื’ืŸ ืึทื– ืขืก ืื™ื– ื’ืขื ื•ืžืขืŸ ืคื•ืŸ ื“ื™ ื‘ื™ืœื“. ื“ืขืจืฆื•, ืคึฟื•ืŸ ื“ื™ ื‘ื™ืœื“ ื•ื•ืึธืก ืžื™ืจ ืคึผื•ื ืงื˜ ื‘ืืฉืืคืŸ - ืคึฟื•ืŸ ืจืขืึทืงื˜-ื•ื•ืขื‘-ืึทืคึผ-ื‘ื™ืœื“ืขืจ (ื™ื ื“ื™ืงืึทื˜ืขื“ ืื™ืŸ ืฉื•ืจื” ืžื™ื˜ืŸ ื ืึธืžืขืŸ 3). ื“ื™ ื˜ืขืงืขืก ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื ื•ืฆืŸ ื–ืขื ืขืŸ ื™ืŸ ื“ื™ ื‘ื™ืœื“ ืื•ืŸ ื–ื™ื™ืขืจ ืึธืจื˜ ืื™ื– ื‘ืึทืฉื˜ื™ืžื˜ ืื™ืŸ ืฉื•ืจื” ืžื™ื˜ืŸ ื ืึธืžืขืŸ 4, ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ ืขืก ืื™ื– /ืึธืคึผื˜/ืึทืคึผ-ื•ื•ืึธืจืฆืœ/ ืจืขื–ื•ืœื˜ืึทื˜/. ืื•ื™ื‘ ืื™ืจ ื’ืขื“ืขื ืงืขืŸ, ื“ืึธืก ืื™ื– ื•ื•ื• ื“ื™ ื˜ืขืงืขืก ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ืŸ ื‘ื ื™ืŸ ืื•ื ื“ื–ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื–ืขื ืขืŸ ืกื˜ืึธืจื“.

ื“ื™ ื“ืขืกื˜ื™ื ื™ื™ืฉืึทืŸ ื˜ืขืงืข ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ื“ื™ ื˜ืขืจืžื™ืŸ ืžื™ื˜ ืคื™ืจืžืข 5 ืื™ื– ืคืฉื•ื˜ ื“ื™ ืงืจืึทื ื˜ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ (ื“ืึธืก ืื™ื– ืึทืœืข, ื’ืขื“ืขื ืงืขืŸ, ืคืœื™ืกื ื“ื™ืง ืื™ืŸ ืขื˜ืœืขื›ืข ืžืึทื“ื–ืฉื™ืงืึทืœ ื–ืึทืš ื’ืขืจื•ืคึฟืŸ OpenShift, ืื•ืŸ ื ื™ืฉื˜ ืื•ื™ืฃ ื“ื™ื™ืŸ ื”ื™ื’ืข ืงืึธืžืคึผื™ื•ื˜ืขืจ).

ื“ื™ ืกื˜ืจืึทื˜ืขื’ื™ืข ืึธืคึผื˜ื™ื™ืœื•ื ื’ - ืฉื•ืจื” ืžื™ื˜ืŸ ื ืึธืžืขืŸ 6 - ืื™ื– ืื•ื™ืš ืขื ืœืขืš ืฆื• ื“ืขืจ ืขืจืฉื˜ืขืจ ื‘ื•ื™ืขืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ. ื‘ืœื•ื™ื– ื“ืึธืก ืžืึธืœ ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ nginx-image-runtime, ื•ื•ืึธืก ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื’ืขื–ืขืŸ ืื™ืŸ ื“ื™ ImageStream ืึธืคึผื˜ื™ื™ืœื•ื ื’.

ืฆื•ื ืกื•ืฃ, ื“ื™ ืฉื•ืจื” ืžื™ื˜ืŸ ื ืึธืžืขืŸ 7 ืื™ื– ืึท ืึธืคึผื˜ื™ื™ืœื•ื ื’ ืคื•ืŸ ื˜ืจื™ื’ืขืจื– ื•ื•ืึธืก ื•ื•ืขื˜ ืึทืงื˜ืึทื•ื•ื™ื™ื˜ ื“ืขื ื‘ื•ื™ืขืŸ ื™ืขื“ืขืจ ืžืึธืœ ื•ื•ืขืŸ ื“ื™ ืจืขืึทื’ื™ืจืŸ-ื•ื•ืขื‘-ืึทืคึผ-ื‘ื™ืœื“ืขืจ ื‘ื™ืœื“ ืขื ื“ืขืจื•ื ื’ืขืŸ.

ืึทื ื“ืขืจืฉ, ื“ืขื ื˜ืขืžืคึผืœืึทื˜ืข ื›ึผื•ืœืœ ืฉื™ื™ืŸ ื ืึธืจืžืึทืœ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ื˜ื™ื ื’ื– ื•ื•ืึธืก ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ื‘ืึทื“ื™ื ื•ื ื’ืก ืื•ืŸ ืจื•ืฅ, ืึธื‘ืขืจ ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ื’ื™ื™ืŸ ืื™ืŸ ืฆื• ืคื™ืœ ื“ืขื˜ืึทืœ. ื‘ื™ื˜ืข ื˜ืึธืŸ ืึทื– ื“ื™ ื‘ื™ืœื“ ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื™ืคึผืœื•ื™ื“ ืื™ื– ื“ื™ ืจืขืึทืงื˜-ื•ื•ืขื‘-ืึทืคึผ-ืจื•ื ื˜ื™ืžืข ื‘ื™ืœื“.

ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜

ืื™ืฆื˜ ืึทื– ืžื™ืจ ื”ืึธื‘ืŸ ื’ืขืงื•ืงื˜ ืื•ื™ืฃ ื“ืขื ืžื•ืกื˜ืขืจ, ืœืึธื–ืŸ ืื•ื ื“ื– ื–ืขืŸ ื•ื•ื™ ืฆื• ื ื•ืฆืŸ ืขืก ืฆื• ืฆืขื•ื•ื™ืงืœืขืŸ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ.

ืžื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ื“ื™ 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: ื˜ืฉื™ื™ื ื“ ื‘ื™ืœื“ืขืจ

ืื•ืŸ ืฆื•ืจื™ืงืงื•ืžืขืŸ ืฆื• ื“ื™ ืึธื•ื•ืขืจื•ื•ื™ืขื•ื• ืคืึทืจืฉื˜ืขืœืŸ, ืžื™ืจ ื•ื•ืขืœืŸ ื–ืขืŸ ื“ื™ ืœืึธื ื˜ืฉื˜ ืคึผืึธื“:

ืžืึธื“ืขืจืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื•ื™ืฃ OpenShift, ื˜ื™ื™ืœ 2: ื˜ืฉื™ื™ื ื“ ื‘ื™ืœื“ืขืจ

ื“ืจื™ืงื˜ ื“ืขื ืœื™ื ืง ืื•ืŸ ืžื™ืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื ื•ืžืขืŸ ืฆื• ืื•ื ื“ื–ืขืจ ืึทืคึผ, ื•ื•ืึธืก ืื™ื– ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ืจืขืึทืงื˜ ืึทืคึผ ื‘ืœืึทื˜:

ืžืึธื“ืขืจืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื•ื™ืฃ OpenShift, ื˜ื™ื™ืœ 2: ื˜ืฉื™ื™ื ื“ ื‘ื™ืœื“ืขืจ

ื”ืขืกืึธืคืข 1

ืคึฟืึทืจ ื•ื•ื™ื ืงืœื“ื™ืง ืœื™ื‘ื”ืื‘ืขืจืก ืžื™ืจ ืื•ื™ืš ื”ืึธื‘ืŸ ื‘ื™ื™ึทืฉืคึผื™ืœ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ.

ื“ืขืจ ืžื•ืกื˜ืขืจ ื“ืึธ ืื™ื– ื“ื™ ื–ืขืœื‘ืข, ืึทื—ื•ืฅ ืคึฟืึทืจ ื“ื™ OUTPUT_DIR ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง.

ื”ืขืกืึธืคืข 2

ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืžื™ืจ ื’ืขื•ื•ื™ื™ื ื˜ NGINX ื•ื•ื™ ืึท ื•ื•ืขื‘ ืกืขืจื•ื•ืขืจ, ืึธื‘ืขืจ ืขืก ืื™ื– ื’ืึทื ืฅ ื’ืจื™ื ื’ ืฆื• ืคืึทืจื‘ื™ื™ึทื˜ืŸ ืขืก ืžื™ื˜ ืึทืคึผืึทื˜ืฉื™, ื ืึธืจ ื˜ื•ื™ืฉืŸ ื“ื™ ืžื•ืกื˜ืขืจ ืื™ืŸ ื“ืขืจ ื˜ืขืงืข NGINX ื‘ื™ืœื“ ืื•ื™ืฃ ืึทืคึผืึทื˜ืฉื™ ื‘ื™ืœื“.

ืกืึธืฃ

ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ื˜ื™ื™ืœ ืคื•ืŸ ื“ืขื ืกืขืจื™ืข, ืžื™ืจ ื’ืขื•ื•ื™ื–ืŸ ื•ื•ื™ ืฆื• ื’ืขืฉื•ื•ื™ื ื“ ืฆืขื•ื•ื™ืงืœืขืŸ ืžืึธื“ืขืจืŸ ื•ื•ืขื‘ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื•ื™ืฃ ื“ื™ OpenShift ืคึผืœืึทื˜ืคืึธืจืžืข. ื”ื™ื™ึทื ื˜ ืžื™ืจ ื’ืขืงื•ืงื˜ ืื•ื™ืฃ ื•ื•ืึธืก ืึท ื•ื•ืขื‘ ืึทืคึผ ื‘ื™ืœื“ ื˜ื•ื˜ ืื•ืŸ ื•ื•ื™ ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืงืึทืžื‘ื™ื™ื ื“ ืžื™ื˜ ืึท ืจื™ื™ืŸ ื•ื•ืขื‘ ืกืขืจื•ื•ืขืจ ื•ื•ื™ NGINX ื ื™ืฆืŸ ื˜ืฉื™ื™ื ื“ ื‘ื™ืœื“ื– ืฆื• ืฉืึทืคึฟืŸ ืึท ืžืขืจ ืคึผืจืึธื“ื•ืงืฆื™ืข-ื’ืจื™ื™ื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื‘ื•ื™ืขืŸ. ืื™ืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืื•ืŸ ืœืขืฆื˜ ืึทืจื˜ื™ืงืœ ืื™ืŸ ื“ืขื ืกืขืจื™ืข, ืžื™ืจ ื•ื•ืขืœืŸ ื•ื•ื™ื™ึทื–ืŸ ื•ื•ื™ ืฆื• ืœื•ื™ืคืŸ ืึท ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืกืขืจื•ื•ืขืจ ืคึฟืึทืจ ื“ื™ื™ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ื™ืฃ OpenShift ืื•ืŸ ืขื ืฉื•ืจ ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ ืคื•ืŸ ื”ื™ื’ืข ืื•ืŸ ื•ื•ื™ื™ึทื˜ ื˜ืขืงืขืก.

ืื™ื ื”ืึทืœื˜ ืคื•ืŸ ื“ืขื ืกืขืจื™ืข ืคื•ืŸ โ€‹โ€‹ืึทืจื˜ื™ืงืœืขืŸ

ื ืึธืš ืจืขืกื•ืจืกืŸ

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’