ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° OpenShift, Π΄Π΅Π» 2: ΠΎΠΊΠΎΠ²Π°Π½ΠΈ Π³Ρ€Π°Π΄Π±ΠΈ

Π—Π΄Ρ€Π°Π²ΠΎ Π½Π° ситС! Ова Π΅ Π²Ρ‚ΠΎΡ€ пост Π²ΠΎ Π½Π°ΡˆΠ°Ρ‚Π° ΡΠ΅Ρ€ΠΈΡ˜Π° Π²ΠΎ кој ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° распорСдимС ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈ Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° Red Hat OpenShift.

ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° OpenShift, Π΄Π΅Π» 2: ΠΎΠΊΠΎΠ²Π°Π½ΠΈ Π³Ρ€Π°Π΄Π±ΠΈ

Π’ΠΎ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΈΠΎΡ‚ пост, ΠΌΠ°Π»ΠΊΡƒ Π³ΠΈ Π΄ΠΎΠΏΡ€Π΅Π²ΠΌΠ΅ моТноститС Π½Π° Π½ΠΎΠ²Π°Ρ‚Π° S2I (ΠΈΠ·Π²ΠΎΡ€-Π½Π°-слика) Π³Ρ€Π°Π΄ΠΈΡ‚Π΅Π» слика, која Π΅ Π½Π°ΠΌΠ΅Π½Π΅Ρ‚Π° Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΈ Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈ Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° OpenShift. Вогаш Π±Π΅Π²ΠΌΠ΅ заинтСрСсирани Π·Π° Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π·Π° Π±Ρ€Π·ΠΎ Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°, Π° дСнСс ќС ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° користимС S2I слика ΠΊΠ°ΠΊΠΎ β€žΡ‡ΠΈΡΡ‚Π°β€œ Π³Ρ€Π°Π΄Π΅ΠΆΠ½Π° слика ΠΈ Π΄Π° ја ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°ΠΌΠ΅ со сродни склопови Π½Π° OpenShift.

Чиста слика Π½Π° Π³Ρ€Π°Π΄ΠΈΡ‚Π΅Π»

Како ΡˆΡ‚ΠΎ спомСнавмС Π²ΠΎ Π”Π΅Π» XNUMX, ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈ Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈΠΌΠ°Π°Ρ‚ Ρ‚Π°ΠΊΠ°Π½Π°Ρ€Π΅Ρ‡Π΅Π½Π° Ρ„Π°Π·Π° Π½Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅, која ΠΎΠ±ΠΈΡ‡Π½ΠΎ Π²Ρ€ΡˆΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС Ρ‚Ρ€Π°Π½ΡΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΊΠΎΠ΄, ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ Π½Π° повСќС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΈ ΠΌΠΈΠ½ΠΈΡ„ΠΈΠΊΡƒΠ²Π°ΡšΠ΅. Π”Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈ ΠΊΠ°ΠΊΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΎΠ²ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ - ΠΈ ΠΎΠ²Π° Π΅ статичСн HTML, JavaScript ΠΈ CSS - сС Π·Π°Ρ‡ΡƒΠ²Π°Π½ΠΈ Π²ΠΎ ΠΈΠ·Π»Π΅Π·Π½Π°Ρ‚Π° ΠΏΠ°ΠΏΠΊΠ°. Π›ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΎΠ²Π°Π° ΠΏΠ°ΠΏΠΊΠ° ΠΎΠ±ΠΈΡ‡Π½ΠΎ зависи ΠΎΠ΄ Ρ‚ΠΎΠ° ΠΊΠΎΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ сС користат, Π° Π·Π° React ΠΎΠ²Π° ќС Π±ΠΈΠ΄Π΅ ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° ./build (ќС сС Π½Π°Π²Ρ€Π°Ρ‚ΠΈΠΌΠ΅ Π½Π° ΠΎΠ²Π° ΠΏΠΎΠ΄Π΅Ρ‚Π°Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ).

Π˜Π·Π²ΠΎΡ€ Π΄ΠΎ слика (S2I)

Π’ΠΎ овој пост Π½Π΅ ја Π΄ΠΎΠΏΠΈΡ€Π°ΠΌΠ΅ Ρ‚Π΅ΠΌΠ°Ρ‚Π° β€žΡˆΡ‚ΠΎ Π΅ S2I ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° сС ΠΊΠΎΡ€ΠΈΡΡ‚ΠΈβ€œ (ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅ повСќС Π·Π° ΠΎΠ²Π° Ρ‚ΡƒΠΊΠ°), Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° сС Π±ΠΈΠ΄Π΅ јасно Π·Π° Π΄Π²Π°Ρ‚Π° Ρ‡Π΅ΠΊΠΎΡ€ΠΈ Π²ΠΎ овој процСс Π·Π° Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅ ΡˆΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ сликата Π½Π° Web App Builder.

Π€Π°Π·Π° Π½Π° ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅

Π€Π°Π·Π°Ρ‚Π° Π½Π° ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅ Π΅ ΠΌΠ½ΠΎΠ³Ρƒ слична ΠΏΠΎ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π° Π½Π° ΠΎΠ½Π° ΡˆΡ‚ΠΎ сС случува ΠΊΠΎΠ³Π° ќС ја стартуватС Π΄ΠΎΠΊΠ΅Ρ€ build ΠΈ ќС Π·Π°Π²Ρ€ΡˆΠΈΡ‚Π΅ со Π½ΠΎΠ²Π° слика Π½Π° Docker. Π‘ΠΎΠΎΠ΄Π²Π΅Ρ‚Π½ΠΎ Π½Π° Ρ‚ΠΎΠ°, ΠΎΠ²Π°Π° Ρ„Π°Π·Π° сС Ρ˜Π°Π²ΡƒΠ²Π° ΠΏΡ€ΠΈ Π·Π°ΠΏΠΎΡ‡Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° OpenShift.

Π’ΠΎ ΡΠ»ΡƒΡ‡Π°Ρ˜ Π½Π° слика Π½Π° Web App Builder, Ρ‚Π°Π° Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π½Π° Π·Π° ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ Π½Π° зависноститС Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΈ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°Ρ‚Π°. состави скрипта. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π½ΠΎ, сликата Π½Π° Π³Ρ€Π°Π΄ΠΈΡ‚Π΅Π»ΠΎΡ‚ ја користи ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π½Π° npm, Π½ΠΎ ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΡ‚Ρ„Ρ€Π»ΠΈ ΠΏΡ€Π΅ΠΊΡƒ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π° 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 ΠΊΠ°ΠΊΠΎ β€žΡ‡ΠΈΡΡ‚β€œ Π³Ρ€Π°Π΄ΠΈΡ‚Π΅Π» ΠΈ Π²ΠΎ исто Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ°Π»Π° слика Π·Π° Ρ‚Ρ€Π°Π΅ΡšΠ΅.

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

Π—Π° ΠΎΠ±ΡƒΠΊΠ° ќС користимС Сдноставна Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° 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, ќС Π±ΠΈΠ΄Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‡Π΅ΠΊΠΎΡ€ΠΎΡ‚ Π½Π° ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅ ΡˆΡ‚ΠΎ ќС Π³ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π° сликата Π·Π° Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°-Π³Ρ€Π°Π΄ΠΈΡ‚Π΅Π»-Ρ‚Ρ€Π°Π΅ΡšΠ΅ ΠΈ Π½Π°ΡˆΠΈΠΎΡ‚ ΠΈΠ·Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄. Π—Π°Ρ‚ΠΎΠ° Π΄ΠΎΠ΄Π°Π΄ΠΎΠ²ΠΌΠ΅ β€ž-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.

Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Сдноставно создава Π½ΠΎΠ²Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π²Ρ€Π· основа Π½Π° овој шаблон.

ΠžΡ‚ΠΊΠ°ΠΊΠΎ ќС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ ΠΎΠ²ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, ќС Π²ΠΈΠ΄ΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π΅ склопови:

ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° OpenShift, Π΄Π΅Π» 2: ΠΎΠΊΠΎΠ²Π°Π½ΠΈ Π³Ρ€Π°Π΄Π±ΠΈ

И Π²Ρ€Π°ΡœΠ°Ρ˜ΡœΠΈ сС Π½Π° Π΅ΠΊΡ€Π°Π½ΠΎΡ‚ ΠŸΡ€Π΅Π³Π»Π΅Π΄, ќС Π³ΠΎ Π²ΠΈΠ΄ΠΈΠΌΠ΅ лансираниот ΠΏΠΎΠ΄:

ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° OpenShift, Π΄Π΅Π» 2: ΠΎΠΊΠΎΠ²Π°Π½ΠΈ Π³Ρ€Π°Π΄Π±ΠΈ

ΠšΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ Π½Π° врската ΠΈ ќС Π±ΠΈΠ΄Π΅ΠΌΠ΅ однСсСни Π΄ΠΎ Π½Π°ΡˆΠ°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, која Π΅ стандардната страница Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° React:

ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° OpenShift, Π΄Π΅Π» 2: ΠΎΠΊΠΎΠ²Π°Π½ΠΈ Π³Ρ€Π°Π΄Π±ΠΈ

Π”ΠΎΠ΄Π°Ρ‚ΠΎΠΊ 1 Π³ΠΎΠ΄ΠΈΠ½Π°

Π—Π° Ρ™ΡƒΠ±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° Angular исто Ρ‚Π°ΠΊΠ° ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°.

Π¨Π΅ΠΌΠ°Ρ‚Π° ΠΎΠ²Π΄Π΅ Π΅ иста, освСн Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° OUTPUT_DIR.

Π”ΠΎΠ΄Π°Ρ‚ΠΎΠΊ 2 Π³ΠΎΠ΄ΠΈΠ½Π°

Π’ΠΎ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° Π³ΠΎ користСвмС NGINX ΠΊΠ°ΠΊΠΎ Π²Π΅Π±-сСрвСр, Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ Π΅ лСсно Π΄Π° Π³ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ со Apache, само смСнСтС Π³ΠΎ ΡˆΠ°Π±Π»ΠΎΠ½ΠΎΡ‚ Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π‘Π»ΠΈΠΊΠ° NGINX Π½Π° Апачи слика.

Π—Π°ΠΊΠ»ΡƒΡ‡ΠΎΠΊ

Π’ΠΎ ΠΏΡ€Π²ΠΈΠΎΡ‚ Π΄Π΅Π» ΠΎΠ΄ ΠΎΠ²Π°Π° ΡΠ΅Ρ€ΠΈΡ˜Π°, ΠΏΠΎΠΊΠ°ΠΆΠ°Π²ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π±Ρ€Π·ΠΎ Π΄Π° сС распорСдат ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈ Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° OpenShift. ДСнСс ΠΏΠΎΠ³Π»Π΅Π΄Π½Π°Π²ΠΌΠ΅ ΡˆΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ сликата Π½Π° Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΈ ΠΊΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π° со чист Π²Π΅Π±-сСрвСр ΠΊΠ°ΠΊΠΎ NGINX со помош Π½Π° ΠΎΠΊΠΎΠ²Π°Π½ΠΈ конструкции Π·Π° Π΄Π° сС создадС повСќС ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½Π° Π·Π° производство Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°. Π’ΠΎ слСдната ΠΈ послСдна ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ΠΎΠ΄ ΠΎΠ²Π°Π° ΡΠ΅Ρ€ΠΈΡ˜Π°, ќС ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° стартуватС сСрвСр Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜ Π·Π° Π²Π°ΡˆΠ°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π° OpenShift ΠΈ Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΡ‚Π΅ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΈ ΠΎΠ΄Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ.

Π‘ΠΎΠ΄Ρ€ΠΆΠΈΠ½Π° Π½Π° ΠΎΠ²Π°Π° ΡΠ΅Ρ€ΠΈΡ˜Π° написи

  • Π”Π΅Π» 1: ΠΊΠ°ΠΊΠΎ Π΄Π° распорСдитС ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈ Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π²ΠΎ само Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Ρ‡Π΅ΠΊΠΎΡ€ΠΈ;
  • Π”Π΅Π» 2: Како Π΄Π° сС користи Π½ΠΎΠ²Π° слика S2I со постоСчка слика Π½Π° сСрвСрот HTTP, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ NGINX, ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ склопови Π½Π° OpenShift Π·Π° Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° производството;
  • Π”Π΅Π» 3: ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ Ρ€Π°Π·Π²ΠΎΡ˜Π΅Π½ сСрвСр Π·Π° Π²Π°ΡˆΠ°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° OpenShift ΠΈ Π΄Π° Π³ΠΎ синхронизиратС со Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ‚ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π΅Π½ систСм.

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

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€