ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅ Π²ΡΠΈΡΠΊΠΈ! Π’ΠΎΠ²Π° Π΅ Π²ΡΠΎΡΠ°ΡΠ° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΠΎΡ Π½Π°ΡΠ°ΡΠ° ΠΏΠΎΡΠ΅Π΄ΠΈΡΠ°, Π² ΠΊΠΎΡΡΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Red Hat OpenShift.
Π ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ Π·Π°ΡΠ΅Π³Π½Π°Ρ
ΠΌΠ΅ Π»Π΅ΠΊΠΎ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Π½ΠΎΠ²ΠΈΡ S2I (source-to-image) ΡΡΡΠΎΠΈΡΠ΅Π»Π΅Π½ ΠΎΠ±ΡΠ°Π·, ΠΊΠΎΠΉΡΠΎ Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° OpenShift. Π’ΠΎΠ³Π°Π²Π° ΡΠ΅ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°Ρ
ΠΌΠ΅ ΠΎΡ ΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π±ΡΡΠ·ΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π½Π΅Ρ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ S2I ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΡΠΎ βΡΠΈΡΡΠΎβ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ ΠΈ Π΄Π° Π³ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΠΌΠ΅ ΡΡΡ ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΡΠ³Π»ΠΎΠ±ΠΊΠΈ OpenShift.
ΠΠ·ΡΠΈΡΡΠ΅Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡΡΠΎΠΈΡΠ΅Π»Ρ
ΠΠ°ΠΊΡΠΎ ΡΠΏΠΎΠΌΠ΅Π½Π°Ρ ΠΌΠ΅ Π² ΡΠ°ΡΡ XNUMX, ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠΌΠ°Ρ ΡΠ°ΠΊΠ° Π½Π°ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΅ΡΠ°ΠΏ Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, ΠΊΠΎΠΉΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠ°ΡΠΎ ΡΡΠ°Π½ΡΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° ΠΊΠΎΠ΄, ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΡ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅. Π€Π°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠ΅Π·ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ - Π° ΡΠΎΠ²Π° Π΅ ΡΡΠ°ΡΠΈΡΠ΅Π½ HTML, JavaScript ΠΈ CSS - ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ Π² ΠΈΠ·Ρ ΠΎΠ΄Π½Π°ΡΠ° ΠΏΠ°ΠΏΠΊΠ°. ΠΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΈ ΠΏΠ°ΠΏΠΊΠ° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π·Π°Π²ΠΈΡΠΈ ΠΎΡ ΡΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ, Π° Π·Π° React ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° ./build (ΡΠ΅ ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ ΠΊΡΠΌ ΡΠΎΠ²Π° ΠΏΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ).
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ ΠΊΡΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (S2I)
Π ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ Π½Π΅ Π·Π°ΡΡΠ³Π°ΠΌΠ΅ ΡΠ΅ΠΌΠ°ΡΠ° βΠΊΠ°ΠΊΠ²ΠΎ Π΅ S2I ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅β (ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠΎΠ²Π°
Π€Π°Π·Π° Π½Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅
Π€Π°Π·Π°ΡΠ° Π½Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° ΠΏΠΎ ΠΏΡΠΈΡΠΎΠ΄Π° Π½Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° docker ΠΈ Π·Π°Π²ΡΡΡΠΈΡΠ΅ Ρ Π½ΠΎΠ²ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° 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 ΠΊΠ°ΡΠΎ βΡΠΈΡΡβ 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, ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΎΡ ΡΡΡΠΏΠΊΠ° Π½Π° Π°ΡΠ΅ΠΌΠ±Π»ΠΈΡΠ°Π½Π΅, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° 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 Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΈ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ΅Ρ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΏΠ°ΠΏΠΊΠ° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π²Π΅ΡΠ΅ Π²ΠΈΠ΄ΡΡ ΠΌΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅.
Π Π΅Π΄ΡΡ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ Ρ 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 ΠΈ Π·Π°ΠΏΠΎΡΠ²Π° Π΄ΠΎΡΡΠ° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎ.
Π Π΅Π΄ΡΡ, ΠΎΠ·Π½Π°ΡΠ΅Π½ Ρ 1, Π½Π΅ Π΅ Π½ΠΈΡΠΎ Π½ΠΎΠ²ΠΎ - ΡΠΎΠΉ ΠΏΡΠΎΡΡΠΎ ΠΊΠ°Π·Π²Π°, ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Ρ Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
Π Π΅Π΄ΡΡ Ρ Π΅ΡΠΈΠΊΠ΅Ρ 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.
ΠΠ½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
Π’Π°ΠΊΠ° ΡΠ΅ ΡΠ΅Π³Π°, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π°Ρ ΠΌΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π°, Π½Π΅ΠΊΠ° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ 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 App ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅:
ΠΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ 1Π³
ΠΠ° Π»ΡΠ±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Angular ΡΡΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅
ΠΠΎΠ΄Π΅Π»ΡΡ ΡΡΠΊ Π΅ ΡΡΡΠΈΡΡ, Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° OUTPUT_DIR.
ΠΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ 2Π³
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
ΠΌΠ΅ NGINX ΠΊΠ°ΡΠΎ ΡΠ΅Π± ΡΡΡΠ²ΡΡ, Π½ΠΎ Π΅ Π΄ΠΎΡΡΠ° Π»Π΅ΡΠ½ΠΎ Π΄Π° Π³ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ Ρ Apache, ΠΏΡΠΎΡΡΠΎ ΡΠΌΠ΅Π½Π΅ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π° Π²ΡΠ² ΡΠ°ΠΉΠ»Π°
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΠΏΡΡΠ²Π°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΡΠ°Π·ΠΈ ΠΏΠΎΡΠ΅Π΄ΠΈΡΠ° ΠΏΠΎΠΊΠ°Π·Π°Ρ ΠΌΠ΅ ΠΊΠ°ΠΊ Π±ΡΡΠ·ΠΎ Π΄Π° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° OpenShift. ΠΠ½Π΅Ρ ΡΠ°Π·Π³Π»Π΅Π΄Π°Ρ ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡΠ°Π²ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ° Ρ ΡΠΈΡΡ ΡΠ΅Π± ΡΡΡΠ²ΡΡ ΠΊΠ°ΡΠΎ NGINX, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π²Π΅ΡΠΈΠΆΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈ, Π·Π° Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ ΠΏΠΎ-Π³ΠΎΡΠΎΠ²Π° Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π° ΡΡΠ°ΡΠΈΡ ΠΎΡ ΡΠ°Π·ΠΈ ΠΏΠΎΡΠ΅Π΄ΠΈΡΠ° ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΡΡΠ²ΡΡ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π·Π° Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° OpenShift ΠΈ Π΄Π° ΠΎΡΠΈΠ³ΡΡΠΈΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΈ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅.
Π‘ΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·ΠΈ ΠΏΠΎΡΠ΅Π΄ΠΈΡΠ° ΠΎΡ ΡΡΠ°ΡΠΈΠΈ
- Π§Π°ΡΡ 1:
ΠΊΠ°ΠΊ Π΄Π° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°ΠΌΠΎ Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΡΠΏΠΊΠΈ ; - Π§Π°ΡΡ 2: ΠΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π½ΠΎΠ²ΠΎ S2I ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° HTTP ΡΡΡΠ²ΡΡ, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ NGINX, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π°ΡΠΎΡΠΈΠΈΡΠ°Π½ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ OpenShift Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅;
- Π§Π°ΡΡ 3: ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΡΡΠ²ΡΡ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π·Π° Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° OpenShift ΠΈ Π΄Π° Π³ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Ρ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ°.
ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ
- ΠΠ΅Π·ΠΏΠ»Π°ΡΠ½Π° Π΅Π»Π΅ΠΊΡΡΠΎΠ½Π½Π° ΠΊΠ½ΠΈΠ³Π°
ΠΠ½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π² OpenShift . - ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π°
OpenShift ΠΈ Kubernetes .
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com