ΠΠ΄ΡΠ°Π²ΠΎ Π½Π° ΡΠΈΡΠ΅! ΠΠ²Π° Π΅ Π²ΡΠΎΡ ΠΏΠΎΡΡ Π²ΠΎ Π½Π°ΡΠ°ΡΠ° ΡΠ΅ΡΠΈΡΠ° Π²ΠΎ ΠΊΠΎΡ ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΠΈΠΌΠ΅ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° Red Hat OpenShift.
ΠΠΎ ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΈΠΎΡ ΠΏΠΎΡΡ, ΠΌΠ°Π»ΠΊΡ Π³ΠΈ Π΄ΠΎΠΏΡΠ΅Π²ΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Π½ΠΎΠ²Π°ΡΠ° S2I (ΠΈΠ·Π²ΠΎΡ-Π½Π°-ΡΠ»ΠΈΠΊΠ°) Π³ΡΠ°Π΄ΠΈΡΠ΅Π» ΡΠ»ΠΈΠΊΠ°, ΠΊΠΎΡΠ° Π΅ Π½Π°ΠΌΠ΅Π½Π΅ΡΠ° Π·Π° Π³ΡΠ°Π΄Π΅ΡΠ΅ ΠΈ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° OpenShift. Π’ΠΎΠ³Π°Ρ Π±Π΅Π²ΠΌΠ΅ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ°Π½ΠΈ Π·Π° ΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π±ΡΠ·ΠΎ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°, Π° Π΄Π΅Π½Π΅Ρ ΡΠ΅ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ S2I ΡΠ»ΠΈΠΊΠ° ΠΊΠ°ΠΊΠΎ βΡΠΈΡΡΠ°β Π³ΡΠ°Π΄Π΅ΠΆΠ½Π° ΡΠ»ΠΈΠΊΠ° ΠΈ Π΄Π° ΡΠ° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΠΌΠ΅ ΡΠΎ ΡΡΠΎΠ΄Π½ΠΈ ΡΠΊΠ»ΠΎΠΏΠΎΠ²ΠΈ Π½Π° OpenShift.
Π§ΠΈΡΡΠ° ΡΠ»ΠΈΠΊΠ° Π½Π° Π³ΡΠ°Π΄ΠΈΡΠ΅Π»
ΠΠ°ΠΊΠΎ ΡΡΠΎ ΡΠΏΠΎΠΌΠ΅Π½Π°Π²ΠΌΠ΅ Π²ΠΎ ΠΠ΅Π» XNUMX, ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΈΠΌΠ°Π°Ρ ΡΠ°ΠΊΠ°Π½Π°ΡΠ΅ΡΠ΅Π½Π° ΡΠ°Π·Π° Π½Π° Π³ΡΠ°Π΄Π΅ΡΠ΅, ΠΊΠΎΡΠ° ΠΎΠ±ΠΈΡΠ½ΠΎ Π²ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΡΡΠ°Π½ΡΠΏΠΈΠ»Π°ΡΠΈΡΠ° Π½Π° ΠΊΠΎΠ΄, ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΠΈ ΠΌΠΈΠ½ΠΈΡΠΈΠΊΡΠ²Π°ΡΠ΅. ΠΠ°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈ ΠΊΠ°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΠΎΠ²ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ - ΠΈ ΠΎΠ²Π° Π΅ ΡΡΠ°ΡΠΈΡΠ΅Π½ HTML, JavaScript ΠΈ CSS - ΡΠ΅ Π·Π°ΡΡΠ²Π°Π½ΠΈ Π²ΠΎ ΠΈΠ·Π»Π΅Π·Π½Π°ΡΠ° ΠΏΠ°ΠΏΠΊΠ°. ΠΠΎΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΎΠ²Π°Π° ΠΏΠ°ΠΏΠΊΠ° ΠΎΠ±ΠΈΡΠ½ΠΎ Π·Π°Π²ΠΈΡΠΈ ΠΎΠ΄ ΡΠΎΠ° ΠΊΠΎΠΈ Π°Π»Π°ΡΠΊΠΈ Π·Π° Π³ΡΠ°Π΄Π΅ΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ, Π° Π·Π° React ΠΎΠ²Π° ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° ./build (ΡΠ΅ ΡΠ΅ Π½Π°Π²ΡΠ°ΡΠΈΠΌΠ΅ Π½Π° ΠΎΠ²Π° ΠΏΠΎΠ΄Π΅ΡΠ°Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ»Ρ).
ΠΠ·Π²ΠΎΡ Π΄ΠΎ ΡΠ»ΠΈΠΊΠ° (S2I)
ΠΠΎ ΠΎΠ²ΠΎΡ ΠΏΠΎΡΡ Π½Π΅ ΡΠ° Π΄ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ ΡΠ΅ΠΌΠ°ΡΠ° βΡΡΠΎ Π΅ S2I ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈβ (ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° ΠΎΠ²Π°
Π€Π°Π·Π° Π½Π° ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅
Π€Π°Π·Π°ΡΠ° Π½Π° ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ Π΅ ΠΌΠ½ΠΎΠ³Ρ ΡΠ»ΠΈΡΠ½Π° ΠΏΠΎ ΠΏΡΠΈΡΠΎΠ΄Π° Π½Π° ΠΎΠ½Π° ΡΡΠΎ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° ΠΊΠΎΠ³Π° ΡΠ΅ ΡΠ° ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ Π΄ΠΎΠΊΠ΅Ρ build ΠΈ ΡΠ΅ Π·Π°Π²ΡΡΠΈΡΠ΅ ΡΠΎ Π½ΠΎΠ²Π° ΡΠ»ΠΈΠΊΠ° Π½Π° Docker. Π‘ΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎ Π½Π° ΡΠΎΠ°, ΠΎΠ²Π°Π° ΡΠ°Π·Π° ΡΠ΅ ΡΠ°Π²ΡΠ²Π° ΠΏΡΠΈ Π·Π°ΠΏΠΎΡΠ½ΡΠ²Π°ΡΠ΅ Π½Π° ΠΈΠ·Π³ΡΠ°Π΄Π±Π° Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° OpenShift.
ΠΠΎ ΡΠ»ΡΡΠ°Ρ Π½Π° ΡΠ»ΠΈΠΊΠ° Π½Π° Web App Builder, ΡΠ°Π° Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ½Π° Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Π½Π° Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Π²Π°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΈΠ·Π³ΡΠ°Π΄Π±Π°ΡΠ°.
ΠΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ΠΊΠΎΠ²ΠΌΠ΅ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ, Π»ΠΎΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° Π³ΠΎΡΠΎΠ²Π°ΡΠ°, Π²Π΅ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π·Π°Π²ΠΈΡΠΈ ΠΎΠ΄ ΡΠΎΠ° ΠΊΠΎΠΈ Π°Π»Π°ΡΠΊΠΈ Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎ ΡΠ»ΡΡΠ°ΡΠΎΡ React ΠΎΠ²Π° ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° ./build, Π° Π·Π° Angular Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° project_name/dist. Π, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π²Π΅ΡΠ΅ Π±Π΅ΡΠ΅ ΠΏΡΠΈΠΊΠ°ΠΆΠ°Π½ΠΎ Π²ΠΎ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΈΠΎΡ ΠΏΠΎΡΡ, Π»ΠΎΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΈΠ·Π»Π΅Π·Π½ΠΈΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ, ΠΊΠΎΡ Π΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ ΠΏΠΎΡΡΠ°Π²Π΅Π½ Π΄Π° ΡΠ΅ Π³ΡΠ°Π΄ΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΡΡΡΠ»ΠΈ ΠΏΡΠ΅ΠΊΡ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ° OUTPUT_DIR. ΠΠ°, Π±ΠΈΠ΄Π΅ΡΡΠΈ Π»ΠΎΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΈΠ·Π»Π΅Π·Π½Π°ΡΠ° ΠΏΠ°ΠΏΠΊΠ° ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΡΠ²Π° ΠΎΠ΄ ΡΠ°ΠΌΠΊΠ° Π΄ΠΎ ΡΠ°ΠΌΠΊΠ°, Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π³ΠΎ ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈΠΎΡ ΠΈΠ·Π»Π΅Π· Π²ΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° ΠΏΠ°ΠΏΠΊΠ° Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ°, ΠΈΠΌΠ΅Π½ΠΎ /opt/apt-root/output. ΠΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π° ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΎΡΡΠ°ΡΠΎΠΊΠΎΡ ΠΎΠ΄ ΠΎΠ²ΠΎΡ Π½Π°ΠΏΠΈΡ, Π½ΠΎ ΡΠ΅Π³Π° Π·Π° ΡΠ΅Π³Π° Π±ΡΠ·ΠΎ Π΄Π° ΡΠ° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΠ°Π·Π° - ΡΠ°Π·Π°ΡΠ° Π½Π° ΡΡΡΠ°ΡΠ΅.
ΡΠ°Π·Π° Π½Π° ΡΡΡΠ°ΡΠ΅
ΠΠ²Π°Π° ΡΠ°Π·Π° ΡΠ΅ ΡΠ°Π²ΡΠ²Π° ΠΊΠΎΠ³Π° ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ ΠΏΠΎΠ²ΠΈΠΊ Π΄ΠΎ docker run Π½Π° Π½ΠΎΠ²Π°ΡΠ° ΡΠ»ΠΈΠΊΠ° ΡΠΎΠ·Π΄Π°Π΄Π΅Π½Π° Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π·Π°ΡΠ° Π½Π° ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅. ΠΡΡΠΎΡΠΎ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° ΠΈ ΠΏΡΠΈ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° OpenShift. Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ
ΠΠ²ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π΅ Π΄ΠΎΠ±Π°Ρ Π·Π° Π±ΡΠ·ΠΎ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ, Π½ΠΎ Π³Π΅Π½Π΅ΡΠ°Π»Π½ΠΎ Π½Π΅ ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π° Π΄Π° ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠ° ΡΡΠ°ΡΠΈΡΠ½Π° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π° Π½Π° ΠΎΠ²ΠΎΡ Π½Π°ΡΠΈΠ½. ΠΠ°, Π±ΠΈΠ΄Π΅ΡΡΠΈ Π²ΠΎ ΡΠ΅Π°Π»Π½ΠΎΡΡΠ° Π½ΠΈΠ΅ ΡΠ»ΡΠΆΠΈΠΌΠ΅ ΡΠ°ΠΌΠΎ ΡΡΠ°ΡΠΈΡΠ½Π° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°, Π½Π΅ Π½ΠΈ ΡΡΠ΅Π±Π° Node.js ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Π²ΠΎ Π½Π°ΡΠ°ΡΠ° ΡΠ»ΠΈΠΊΠ° - Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠΎΡ ΡΠ΅ Π±ΠΈΠ΄Π΅ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½.
Π‘ΠΎ Π΄ΡΡΠ³ΠΈ Π·Π±ΠΎΡΠΎΠ²ΠΈ, ΠΏΡΠΈ ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ Π½ΠΈ ΡΡΠ΅Π±Π° Π΅Π΄Π½ΠΎ, Π° ΠΏΡΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π΄ΡΡΠ³ΠΎ. ΠΠΎ ΠΎΠ²Π°Π° ΡΠΈΡΡΠ°ΡΠΈΡΠ°, ΠΎΠΊΠΎΠ²Π°Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½ΠΈ ΡΠ΅ Π΄ΠΎΠ±ΡΠΎ.
ΠΠΊΠΎΠ²Π°Π½ΠΈ Π³ΡΠ°Π΄Π±ΠΈ
ΠΠ° ΠΎΠ²Π° ΠΏΠΈΡΡΠ²Π°Π°Ρ
βΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π°Ρ Π΄Π²Π° ΡΠΊΠ»ΠΎΠΏΠ°, ΠΏΡΠΈ ΡΡΠΎ Π΅Π΄Π½ΠΈΠΎΡ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°Π½ Π΅Π½ΡΠΈΡΠ΅Ρ, Π° Π΄ΡΡΠ³ΠΈΠΎΡ Π³ΠΎ Ρ ΠΎΡΡΠΈΡΠ° ΡΠΎΡ Π΅Π½ΡΠΈΡΠ΅Ρ Π²ΠΎ ΠΏΠΎΡΠ΅Π±Π½Π° ΡΠ»ΠΈΠΊΠ° ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° Π²ΠΎΠ΄Π΅ΡΠ΅ Π½Π° ΡΠΎΡ Π΅Π½ΡΠΈΡΠ΅Ρβ.
Π‘ΠΎ Π΄ΡΡΠ³ΠΈ Π·Π±ΠΎΡΠΎΠ²ΠΈ, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΡΠ»ΠΈΠΊΠ°ΡΠ° Π½Π° Web App Builder Π·Π° Π΄Π° ΡΠ° ΠΈΠ·Π²ΡΡΠΈΠΌΠ΅ Π½Π°ΡΠ°ΡΠ° ΠΈΠ·Π³ΡΠ°Π΄Π±Π°, Π° ΠΏΠΎΡΠΎΠ° Π΄Π° ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΡΠ»ΠΈΠΊΠ°ΡΠ° Π½Π° Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠΎΡ, ΠΈΡΡΠΈΠΎΡ NGINX, Π·Π° Π΄Π° ΡΠ° ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠ΅ Π½Π°ΡΠ°ΡΠ° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°.
Π’Π°ΠΊΠ°, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΡΠ»ΠΈΠΊΠ°ΡΠ° Π½Π° Web App Builder ΠΊΠ°ΠΊΠΎ βΡΠΈΡΡβ Π³ΡΠ°Π΄ΠΈΡΠ΅Π» ΠΈ Π²ΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ°Π»Π° ΡΠ»ΠΈΠΊΠ° Π·Π° ΡΡΠ°Π΅ΡΠ΅.
Π‘Π΅Π³Π° Π΄Π° Π³ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠΎΠ²Π° ΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ.
ΠΠ° ΠΎΠ±ΡΠΊΠ° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅
Π’ΠΎΠ° ΡΠ΅ Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΡΠΎΡΡΠ°Π²ΠΈΠΌΠ΅ ΡΓ¨ Π·Π°Π΅Π΄Π½ΠΎ
ΠΡΠ΄Π΅ Π΄Π° ΡΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΎΠ²Π°Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ΄Π΅ΡΠ°Π»Π½ΠΎ ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌΠ΅ ΡΠΎ Π΄Π΅Π»ΠΎΡ Π·Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ.
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 ΠΎΠ·Π½Π°ΡΠ΅Π½Π° 10.x Π½Π°
Π§Π΅ΡΠ²ΡΡΠ°ΡΠ° Π΅ ΡΠ»ΠΈΠΊΠ° NGINX (Π²Π΅ΡΠ·ΠΈΡΠ° 1.12) ΡΠΎ Π½Π°ΡΠ½ΠΎΠ²Π°ΡΠ° ΠΎΠ·Π½Π°ΠΊΠ°
Π‘Π΅Π³Π° Π΄Π° Π³ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠΏΡΠ²ΠΈΡΠ΅ Π΄Π²Π΅ ΡΠ»ΠΈΠΊΠΈ. Π Π΄Π²Π΅ΡΠ΅ ΡΠ΅ ΠΏΡΠ°Π·Π½ΠΈ Π½Π° ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ ΠΈ ΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Π°Ρ ΡΠ°ΠΌΠΎ Π²ΠΎ ΡΠ°Π·Π°ΡΠ° Π½Π° ΠΈΠ·Π³ΡΠ°Π΄Π±Π°. ΠΡΠ²Π°ΡΠ° ΡΠ»ΠΈΠΊΠ°, react-web-app-builder, ΡΠ΅ Π±ΠΈΠ΄Π΅ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠ΅ΠΊΠΎΡΠΎΡ Π½Π° ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ ΡΡΠΎ ΡΠ΅ Π³ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ° ΡΠ»ΠΈΠΊΠ°ΡΠ° Π·Π° Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°-Π³ΡΠ°Π΄ΠΈΡΠ΅Π»-ΡΡΠ°Π΅ΡΠ΅ ΠΈ Π½Π°ΡΠΈΠΎΡ ΠΈΠ·Π²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄. ΠΠ°ΡΠΎΠ° Π΄ΠΎΠ΄Π°Π΄ΠΎΠ²ΠΌΠ΅ β-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, Π° Π»ΠΎΠΊΠ°ΡΠΈΡΠ°ΡΠ°, ref ΠΈ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΠ΅ ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π°Π°Ρ ΡΠΏΠΎΡΠ΅Π΄ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΡΠΎ Π²Π΅ΡΠ΅ Π³ΠΈ Π²ΠΈΠ΄ΠΎΠ²ΠΌΠ΅ ΠΏΠΎΠ³ΠΎΡΠ΅.
ΠΠΈΠ½ΠΈΡΠ°ΡΠ° ΠΎΠ·Π½Π°ΡΠ΅Π½Π° ΡΠΎ 3 Π΅ ΠΎΠ½Π° ΡΡΠΎ Π²Π΅ΡΠ΅ Π³ΠΎ Π²ΠΈΠ΄ΠΎΠ²ΠΌΠ΅ Π²ΠΎ Π΄Π΅Π»ΠΎΡ Π·Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ. ΠΠ° Π΄ΠΎΠ΄Π°Π²Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ° OUTPUT_DIR, ΠΊΠΎΡΠ° Π²ΠΎ Π½Π°ΡΠΈΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π΅ build.
ΠΠΈΠ½ΠΈΡΠ°ΡΠ° ΠΎΠ·Π½Π°ΡΠ΅Π½Π° ΡΠΎ 4 Π²Π΅Π»ΠΈ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ»ΠΈΠΊΠ°ΡΠ° Π½Π° Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°-Π³ΡΠ°Π΄ΠΈΡΠ΅Π»-ΡΡΠ°Π΅ΡΠ΅, ΠΊΠΎΡΠ° Π²Π΅ΡΠ΅ ΡΠ° Π²ΠΈΠ΄ΠΎΠ²ΠΌΠ΅ Π²ΠΎ Π΄Π΅Π»ΠΎΡ ImageStream.
ΠΠΈΠ½ΠΈΡΠ°ΡΠ° ΠΎΠ·Π½Π°ΡΠ΅Π½Π° ΡΠΎ 5 Π²Π΅Π»ΠΈ Π΄Π΅ΠΊΠ° ΡΠ°ΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°Π»Π½Π° Π³ΡΠ°Π΄Π±Π° Π°ΠΊΠΎ ΡΠ»ΠΈΠΊΠ°ΡΠ° S2I Π³ΠΎ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π°, Π° ΡΠ»ΠΈΠΊΠ°ΡΠ° Π½Π° Web App Builder Π³ΠΎ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π°. ΠΡΠΈ ΠΏΡΠ²ΠΎΡΠΎ Π»Π°Π½ΡΠΈΡΠ°ΡΠ΅, ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠ΅ Π·Π°Π²ΡΡΠΈ ΡΠ°Π·Π°ΡΠ° Π½Π° ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅, ΡΠ»ΠΈΠΊΠ°ΡΠ° ΡΠ΅ ΡΠ° Π·Π°ΡΡΠ²Π° ΠΏΠ°ΠΏΠΊΠ°ΡΠ° 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
ΠΠ½Π°ΡΠΈ, Π²ΡΠΎΡΠ°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°Π΄Π±Π° Π΅ 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 Π΅ Π΄Π΅Π» ΠΎΠ΄ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΡΠ²Π°ΡΠΈ ΠΊΠΎΠΈ ΡΠ΅ ΡΠ° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π°Ρ ΠΎΠ²Π°Π° Π³ΡΠ°Π΄Π±Π° ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΠΊΠΎΠ³Π° ΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΡΠ»ΠΈΠΊΠ°ΡΠ° Π½Π° 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.
ΠΡΠΎΡΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π° Π½ΠΎΠ²Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΎΠ²ΠΎΡ ΡΠ°Π±Π»ΠΎΠ½.
ΠΡΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Ρ ΠΎΠ²ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π΅ ΡΠΊΠ»ΠΎΠΏΠΎΠ²ΠΈ:
Π Π²ΡΠ°ΡΠ°ΡΡΠΈ ΡΠ΅ Π½Π° Π΅ΠΊΡΠ°Π½ΠΎΡ ΠΡΠ΅Π³Π»Π΅Π΄, ΡΠ΅ Π³ΠΎ Π²ΠΈΠ΄ΠΈΠΌΠ΅ Π»Π°Π½ΡΠΈΡΠ°Π½ΠΈΠΎΡ ΠΏΠΎΠ΄:
ΠΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π½Π° Π²ΡΡΠΊΠ°ΡΠ° ΠΈ ΡΠ΅ Π±ΠΈΠ΄Π΅ΠΌΠ΅ ΠΎΠ΄Π½Π΅ΡΠ΅Π½ΠΈ Π΄ΠΎ Π½Π°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°, ΠΊΠΎΡΠ° Π΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° React:
ΠΠΎΠ΄Π°ΡΠΎΠΊ 1 Π³ΠΎΠ΄ΠΈΠ½Π°
ΠΠ° ΡΡΠ±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Angular ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈΠΌΠ°ΠΌΠ΅
Π¨Π΅ΠΌΠ°ΡΠ° ΠΎΠ²Π΄Π΅ Π΅ ΠΈΡΡΠ°, ΠΎΡΠ²Π΅Π½ Π·Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° OUTPUT_DIR.
ΠΠΎΠ΄Π°ΡΠΎΠΊ 2 Π³ΠΎΠ΄ΠΈΠ½Π°
ΠΠΎ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅Π²ΠΌΠ΅ NGINX ΠΊΠ°ΠΊΠΎ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ, Π½ΠΎ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ Π΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π³ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠΎ Apache, ΡΠ°ΠΌΠΎ ΡΠΌΠ΅Π½Π΅ΡΠ΅ Π³ΠΎ ΡΠ°Π±Π»ΠΎΠ½ΠΎΡ Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°
ΠΠ°ΠΊΠ»ΡΡΠΎΠΊ
ΠΠΎ ΠΏΡΠ²ΠΈΠΎΡ Π΄Π΅Π» ΠΎΠ΄ ΠΎΠ²Π°Π° ΡΠ΅ΡΠΈΡΠ°, ΠΏΠΎΠΊΠ°ΠΆΠ°Π²ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π±ΡΠ·ΠΎ Π΄Π° ΡΠ΅ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π°Ρ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° OpenShift. ΠΠ΅Π½Π΅Ρ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π°Π²ΠΌΠ΅ ΡΡΠΎ ΠΏΡΠ°Π²ΠΈ ΡΠ»ΠΈΠΊΠ°ΡΠ° Π½Π° Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΈ ΠΊΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ° ΡΠΎ ΡΠΈΡΡ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ ΠΊΠ°ΠΊΠΎ NGINX ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° ΠΎΠΊΠΎΠ²Π°Π½ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° Π΄Π° ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½Π° Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°. ΠΠΎ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π° ΡΡΠ°ΡΠΈΡΠ° ΠΎΠ΄ ΠΎΠ²Π°Π° ΡΠ΅ΡΠΈΡΠ°, ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ ΡΠ΅ΡΠ²Π΅Ρ Π·Π° ΡΠ°Π·Π²ΠΎΡ Π·Π° Π²Π°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π° OpenShift ΠΈ Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡΠ° Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΈ ΠΎΠ΄Π΄Π°Π»Π΅ΡΠ΅Π½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ.
Π‘ΠΎΠ΄ΡΠΆΠΈΠ½Π° Π½Π° ΠΎΠ²Π°Π° ΡΠ΅ΡΠΈΡΠ° Π½Π°ΠΏΠΈΡΠΈ
- ΠΠ΅Π» 1:
ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΠΈΡΠ΅ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π²ΠΎ ΡΠ°ΠΌΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΠ΅ΠΊΠΎΡΠΈ ; - ΠΠ΅Π» 2: ΠΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π½ΠΎΠ²Π° ΡΠ»ΠΈΠΊΠ° S2I ΡΠΎ ΠΏΠΎΡΡΠΎΠ΅ΡΠΊΠ° ΡΠ»ΠΈΠΊΠ° Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ HTTP, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ NGINX, ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ ΡΠΊΠ»ΠΎΠΏΠΎΠ²ΠΈ Π½Π° OpenShift Π·Π° ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ;
- ΠΠ΅Π» 3: ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΈΠ·Π²ΡΡΠΈΡΠ΅ ΡΠ°Π·Π²ΠΎΡΠ΅Π½ ΡΠ΅ΡΠ²Π΅Ρ Π·Π° Π²Π°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° OpenShift ΠΈ Π΄Π° Π³ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ Π΄Π°ΡΠΎΡΠ΅ΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌ.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ
- ΠΠ΅ΡΠΏΠ»Π°ΡΠ½Π° Π΅-ΠΊΠ½ΠΈΠ³Π°
Π‘Π΅ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π° Π½Π° OpenShift . - ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π°
OpenShift ΠΈ Kubernetes .
ΠΠ·Π²ΠΎΡ: www.habr.com