ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈ прилоТСния Π½Π° OpenShift, част 2: Π²Π΅Ρ€ΠΈΠΆΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ всички! Π’ΠΎΠ²Π° Π΅ Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° публикация ΠΎΡ‚ Π½Π°ΡˆΠ°Ρ‚Π° ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π°, Π² която ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈ ΡƒΠ΅Π± прилоТСния Π½Π° Red Hat OpenShift.

ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈ прилоТСния Π½Π° OpenShift, част 2: Π²Π΅Ρ€ΠΈΠΆΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ

Π’ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° публикация засСгнахмС Π»Π΅ΠΊΠΎ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° новия S2I (source-to-image) строитСлСн ΠΎΠ±Ρ€Π°Π·, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ внСдряванС Π½Π° ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈ ΡƒΠ΅Π± прилоТСния Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° OpenShift. Π’ΠΎΠ³Π°Π²Π° сС заинтСрСсувахмС ΠΎΡ‚ Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π·Π° Π±ΡŠΡ€Π·ΠΎ внСдряванС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ днСс Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ S2I ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°Ρ‚ΠΎ β€žΡ‡ΠΈΡΡ‚ΠΎβ€œ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ ΠΈ Π΄Π° Π³ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°ΠΌΠ΅ със ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ сглобки OpenShift.

Π˜Π·Ρ‡ΠΈΡΡ‚Π΅Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° строитСля

ΠšΠ°ΠΊΡ‚ΠΎ спомСнахмС Π² част XNUMX, ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ ΡƒΠ΅Π± прилоТСния ΠΈΠΌΠ°Ρ‚ Ρ‚Π°ΠΊΠ° нарСчСния Π΅Ρ‚Π°ΠΏ Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ изпълнява ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°Ρ‚ΠΎ транспилация Π½Π° ΠΊΠΎΠ΄, конкатСнация Π½Π° мноТСство Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅. Π€Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚Π΅Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ - Π° Ρ‚ΠΎΠ²Π° Π΅ статичСн HTML, JavaScript ΠΈ CSS - сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π² ΠΈΠ·Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° ΠΏΠ°ΠΏΠΊΠ°. ΠœΠ΅ΡΡ‚ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π°Π·ΠΈ ΠΏΠ°ΠΏΠΊΠ° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ зависи ΠΎΡ‚ Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΈ инструмСнти Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚, Π° Π·Π° React Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° ./build (Ρ‰Π΅ сС Π²ΡŠΡ€Π½Π΅ΠΌ към Ρ‚ΠΎΠ²Π° ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ).

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ към ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (S2I)

Π’ Ρ‚Π°Π·ΠΈ публикация Π½Π΅ засягамС Ρ‚Π΅ΠΌΠ°Ρ‚Π° β€žΠΊΠ°ΠΊΠ²ΠΎ Π΅ S2I ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅β€œ (ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Ρ‚ΠΎΠ²Π° Ρ‚ΡƒΠΊ), Π½ΠΎ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° стС наясно с Π΄Π²Π΅Ρ‚Π΅ ΡΡ‚ΡŠΠΏΠΊΠΈ Π² Ρ‚ΠΎΠ·ΠΈ процСс, Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡ€Π°Π²ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Web App Builder.

Ѐаза на сглобяванС

Π€Π°Π·Π°Ρ‚Π° Π½Π° сглобяванС Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° ΠΏΠΎ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π° Π½Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ сС случва, ΠΊΠΎΠ³Π°Ρ‚ΠΎ стартиратС компилация Π½Π° docker ΠΈ Π·Π°Π²ΡŠΡ€ΡˆΠΈΡ‚Π΅ с Π½ΠΎΠ²ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Docker. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ възниква ΠΏΡ€ΠΈ стартиранС Π½Π° компилация Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° OpenShift.

Π’ случай Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Web App Builder, Ρ‚ΠΎ Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π½ΠΎ Π·Π° инсталиранСто Π½Π° зависимоститС Π½Π° Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° компилацията. сглобяванС Π½Π° скрипт. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° конструкцията Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° npm run, Π½ΠΎ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Ρ‡Ρ€Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° срСдата NPM_BUILD.

ΠšΠ°ΠΊΡ‚ΠΎ ΠΊΠ°Π·Π°Ρ…ΠΌΠ΅ ΠΏΠΎ-Ρ€Π°Π½ΠΎ, мСстополоТСниСто Π½Π° Π³ΠΎΡ‚ΠΎΠ²ΠΎΡ‚ΠΎ, Π²Π΅Ρ‡Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ зависи ΠΎΡ‚ Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΈ инструмСнти ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅. НапримСр, Π² случая Π½Π° React Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° ./build, Π° Π·Π° прилоТСнията Π½Π° Angular Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° project_name/dist. И ΠΊΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ бСшС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° публикация, мСстополоТСниСто Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° дирСктория, която Π΅ настроСна Π΄Π° сС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π·Π°ΠΌΠ΅Π½Π΅Π½Π° Ρ‡Ρ€Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° срСдата OUTPUT_DIR. Π•, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ мСстополоТСниСто Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° ΠΏΠ°ΠΏΠΊΠ° сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ Ρ€Π°ΠΌΠΊΠ° Π΄ΠΎ Ρ€Π°ΠΌΠΊΠ°, Π²ΠΈΠ΅ просто ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ гСнСрирания ΠΈΠ·Ρ…ΠΎΠ΄ Π² стандартната ΠΏΠ°ΠΏΠΊΠ° Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ /opt/apt-root/output. Π’ΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° останалата част ΠΎΡ‚ Ρ‚Π°Π·ΠΈ статия, Π½ΠΎ засСга Π½Π΅ΠΊΠ° Π±ΡŠΡ€Π·ΠΎ Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ слСдващия Π΅Ρ‚Π°ΠΏ - Ρ„Π°Π·Π°Ρ‚Π° Π½Π° изпълнСниС.

Ρ„Π°Π·Π° Π½Π° изпълнСниС

Π’ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ възниква, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° docker run Π½Π° Π½ΠΎΠ²ΠΎΡ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, създадСно ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° асСмблиранС. Π‘ΡŠΡ‰ΠΎΡ‚ΠΎ сС случва ΠΏΡ€ΠΈ внСдряванС Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° OpenShift. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ стартирайтС скрипт ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° обслуТващ ΠΌΠΎΠ΄ΡƒΠ» Π·Π° обслуТванС Π½Π° статично ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅, Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ Π² Π³ΠΎΡ€Π½Π°Ρ‚Π° стандартна ΠΈΠ·Ρ…ΠΎΠ΄Π½Π° дирСктория.

Π’ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΅ Π΄ΠΎΠ±ΡŠΡ€ Π·Π° Π±ΡŠΡ€Π·ΠΎ внСдряванС Π½Π° прилоТСния, Π½ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½Π΅ сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° Π΄Π° сС обслуТва статично ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½. Π•, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π² дСйствитСлност обслуТвамС само статично ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅, Π½Π΅ сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ‚ инсталиран Node.js Π² Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ - ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€ Ρ‰Π΅ бъдС Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½.

Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, ΠΏΡ€ΠΈ сглобяванСто Π½ΠΈ трябва Π΅Π΄Π½ΠΎ Π½Π΅Ρ‰ΠΎ, ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½ΠΈ трябва Π΄Ρ€ΡƒΠ³ΠΎ. Π’ Ρ‚Π°Π·ΠΈ ситуация Π²Π΅Ρ€ΠΈΠΆΠ½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ са ΠΏΠΎΠ»Π΅Π·Π½ΠΈ.

Π’Π΅Ρ€ΠΈΠΆΠ½ΠΈ конструкции

Π—Π° Ρ‚ΠΎΠ²Π° ΠΏΠΈΡˆΠ°Ρ‚ Π²Π΅Ρ€ΠΈΠΆΠ½ΠΈ конструкции Π² докумСнтацията Π½Π° OpenShift:

β€žΠ”Π²Π΅ сборки ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ Π·Π°Π΅Π΄Π½ΠΎ, ΠΊΠ°Ρ‚ΠΎ Π΅Π΄Π½Π°Ρ‚Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ ΠΎΠ±Π΅ΠΊΡ‚, Π° Π΄Ρ€ΡƒΠ³Π°Ρ‚Π° хоства Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ Π² ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° изпълнСниС Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Π΅ΠΊΡ‚.β€œ

Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Web App Builder, Π·Π° Π΄Π° стартирамС Π½Π°ΡˆΠ°Ρ‚Π° компилация, ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€Π°, ΡΡŠΡ‰ΠΈΡ NGINX, Π·Π° Π΄Π° обслуТвамС Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅.

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Web App Builder ΠΊΠ°Ρ‚ΠΎ β€žΡ‡ΠΈΡΡ‚β€œ builder ΠΈ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ°Π»ΠΊΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π° изпълнСниС.

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Ρ‚ΠΎΠ²Π° с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π—Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ просто ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 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 с Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ 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.

Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° просто създава Π½ΠΎΠ²ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ въз основа Π½Π° Ρ‚ΠΎΠ·ΠΈ шаблон.

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ работят, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π΅ сглобки:

ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈ прилоТСния Π½Π° OpenShift, част 2: Π²Π΅Ρ€ΠΈΠΆΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ

И Π²Ρ€ΡŠΡ‰Π°ΠΉΠΊΠΈ сС към Π΅ΠΊΡ€Π°Π½Π° ΠžΠ±Ρ‰ ΠΏΡ€Π΅Π³Π»Π΅Π΄, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ стартираната Π³Ρ€ΡƒΠΏΠ°:

ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈ прилоТСния Π½Π° OpenShift, част 2: Π²Π΅Ρ€ΠΈΠΆΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ

Π©Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° ΠΈ Ρ‰Π΅ бъдСм ΠΎΡ‚Π²Π΅Π΄Π΅Π½ΠΈ Π΄ΠΎ Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ страницата Π½Π° React App ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅:

ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈ прилоТСния Π½Π° OpenShift, част 2: Π²Π΅Ρ€ΠΈΠΆΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ

Π”ΠΎΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅ 1Π³

Π—Π° Π»ΡŽΠ±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° Angular ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

ΠœΠΎΠ΄Π΅Π»ΡŠΡ‚ Ρ‚ΡƒΠΊ Π΅ ΡΡŠΡ‰ΠΈΡΡ‚, с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° OUTPUT_DIR.

Π”ΠΎΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅ 2Π³

Π’ Ρ‚Π°Π·ΠΈ статия ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ NGINX ΠΊΠ°Ρ‚ΠΎ ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€, Π½ΠΎ Π΅ доста лСсно Π΄Π° Π³ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ с Apache, просто смСнСтС шаблона във Ρ„Π°ΠΉΠ»Π° Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° NGINX Π½Π° Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Apache.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ ΠΏΡŠΡ€Π²Π°Ρ‚Π° част ΠΎΡ‚ Ρ‚Π°Π·ΠΈ ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π° ΠΏΠΎΠΊΠ°Π·Π°Ρ…ΠΌΠ΅ ΠΊΠ°ΠΊ Π±ΡŠΡ€Π·ΠΎ Π΄Π° Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈ ΡƒΠ΅Π± прилоТСния Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° OpenShift. ДнСс Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡ€Π°Π²ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΡƒΠ΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π° с чист ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€ ΠΊΠ°Ρ‚ΠΎ NGINX, ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π²Π΅Ρ€ΠΈΠΆΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ, Π·Π° Π΄Π° сС създадС ΠΏΠΎ-Π³ΠΎΡ‚ΠΎΠ²Π° Π·Π° производство компилация Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ слСдващата ΠΈ послСдна статия ΠΎΡ‚ Ρ‚Π°Π·ΠΈ ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π° Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° стартиратС ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π·Π° Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° OpenShift ΠΈ Π΄Π° осигуритС синхронизиранС Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΈ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.

Π‘ΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚Π°Π·ΠΈ ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π° ΠΎΡ‚ статии

  • Част 1: ΠΊΠ°ΠΊ Π΄Π° Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈ ΡƒΠ΅Π± прилоТСния само с няколко ΡΡ‚ΡŠΠΏΠΊΠΈ;
  • Част 2: Как Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π½ΠΎΠ²ΠΎ S2I ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ със ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° HTTP ΡΡŠΡ€Π²ΡŠΡ€, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ NGINX, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ асоциирани ΠΌΠΎΠ΄ΡƒΠ»ΠΈ OpenShift Π·Π° производствСно внСдряванС;
  • Част 3: ΠΊΠ°ΠΊ Π΄Π° стартиратС ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π·Π° Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° OpenShift ΠΈ Π΄Π° Π³ΠΎ синхронизиратС с Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма.

Π”ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ рСсурси

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€