ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π² ΡΠΎΠ·ΠΈ Π±Π»ΠΎΠ³! Π’ΠΎΠ²Π° Π΅ ΡΡΠ΅ΡΠ°ΡΠ° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΠΎΡ ΠΏΠΎΡΠ΅Π΄ΠΈΡΠ°, Π² ΠΊΠΎΡΡΠΎ Π²ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Red Hat OpenShift.
Π ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡΠ΅ Π΄Π²Π΅ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ°Π·Π³Π»Π΅Π΄Π°Ρ
ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°ΠΌΠΎ Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΡΠΏΠΊΠΈ ΠΈ ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π½ΠΎΠ²ΠΎ S2I ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π΅Π΄Π½ΠΎ Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° HTTP ΡΡΡΠ²ΡΡ ΠΊΠ°ΡΠΎ NGINX, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π²Π΅ΡΠΈΠΆΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈ Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅.
ΠΠ½Π΅Ρ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΡΡΠ²ΡΡ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π·Π° Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° OpenShift ΠΈ Π΄Π° Π³ΠΎ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Ρ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ°, Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ OpenShift Pipelines ΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΊΠ°ΡΠΎ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Π½Π° ΡΠ²ΡΡΠ·Π°Π½ΠΈΡΠ΅ Π°ΡΠ΅ΠΌΠ±Π»ΠΈ.
OpenShift ΠΊΠ°ΡΠΎ ΡΡΠ΅Π΄Π° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°
ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°
ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ Π±Π΅ΡΠ΅ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΎ Π²
Π ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΡΠ°ΠΌΠΊΠΈ ΡΠ°ΠΊΡΠ² "ΡΡΡΠ²ΡΡ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°" Π΅ Π²Π³ΡΠ°Π΄Π΅Π½ Π² ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄.
ΠΠ΅ΡΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ
ΠΡΡΠ²ΠΎ, Π½Π΅ΠΊΠ° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»Π½ΠΎ. ΠΠ° Π²Π·Π΅ΠΌΠ΅ΠΌ Π·Π° ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
Π ΡΠ°ΠΊΠ°, Π·Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ βΡΡΡΠ²ΡΡΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°β Π² Π½Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° React, ΡΠ΅ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
$ npm run start
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π² ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠ° Π½Π° ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ Π½Π΅ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ:
Π Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ ΡΠ΅ ΠΎΡΠ²ΠΎΡΠΈ Π² Π±ΡΠ°ΡΠ·ΡΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅:
Π‘Π΅Π³Π°, Π°ΠΊΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π²ΡΠ² ΡΠ°ΠΉΠ»Π°, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²ΠΈ Π² Π±ΡΠ°ΡΠ·ΡΡΠ°.
ΠΠΎΠ±ΡΠ΅, Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π² Π»ΠΎΠΊΠ°Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ Π²ΡΠΈΡΠΊΠΎ Π΅ ΡΡΠ½ΠΎ, Π½ΠΎ ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΠΌ ΡΡΡΠΎΡΠΎ Π½Π° OpenShift?
Π‘ΡΡΠ²ΡΡ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° OpenShift
ΠΠΊΠΎ ΡΠΈ ΡΠΏΠΎΠΌΠ½ΡΡΠ΅ Π²
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π°ΠΊΠΎ ΡΠ΅ Π²Π³Π»Π΅Π΄Π°ΡΠ΅ ΠΏΠΎ-ΠΎΡΠ±Π»ΠΈΠ·ΠΎ
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΌΠΎΠ΄ΡΠ»Π° nodeshift, Π·Π° Π΄Π° Π²Π½Π΅Π΄ΡΠΈΠΌ Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
$ npx nodeshift --deploy.env NPM_RUN="yarn start" --dockerImage=nodeshift/ubi8-s2i-web-app
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΡΠΈΠΌΠ΅ΡΡΡ ΠΏΠΎ-Π³ΠΎΡΠ΅ Π΅ ΡΡΠΊΡΠ°ΡΠ΅Π½, Π·Π° Π΄Π° ΠΈΠ»ΡΡΡΡΠΈΡΠ° ΠΎΠ±ΡΠ°ΡΠ° ΠΈΠ΄Π΅Ρ.
Π’ΡΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ ΠΌΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° NPM_RUN ΠΊΡΠΌ Π½Π°ΡΠ΅ΡΠΎ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅, ΠΊΠΎΡΡΠΎ ΠΊΠ°Π·Π²Π° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° yarn, ΠΊΠΎΡΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ° ΡΡΡΠ²ΡΡΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° React Π² Π½Π°ΡΠΈΡ OpenShift pod.
ΠΠΊΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΡΠ° ΠΊΠ°ΠΏΡΡΠ»Π°, ΡΠΎΠ³Π°Π²Π° ΡΠ΅ ΠΈΠΌΠ° Π½Π΅ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ:
Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π½ΡΠΌΠ° Π΄Π° Π΅ Π½ΠΈΡΠΎ, Π΄ΠΎΠΊΠ°ΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ ΠΊΠΎΠ΄ Ρ ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠΎ ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° Π·Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, Π½ΠΎ ΠΆΠΈΠ²Π΅Π΅ Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ ΡΡΡΠ²ΡΡ.
Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ ΠΈ Π»ΠΎΠΊΠ°Π»Π΅Π½ ΠΊΠΎΠ΄
ΠΠ° ΡΠ°ΡΡΠΈΠ΅, nodeshift ΠΌΠΎΠΆΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ ΠΏΡΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° watch, Π·Π° Π΄Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅.
Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ Π½Π° ΡΡΡΠ²ΡΡΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π·Π° Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅ΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°:
$ npx nodeshift watch
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½Π° Π²ΡΡΠ·ΠΊΠ° Ρ ΡΠ°Π±ΠΎΡΠ΅ΡΠΈΡ pod, ΠΊΠΎΠΉΡΠΎ ΡΡΠ·Π΄Π°Π΄ΠΎΡ ΠΌΠ΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΡΠ°Π½ΠΎ, ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π½Π°ΡΠΈΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΡΡΡΠ΅Ρ ΡΠ΅ Π±ΡΠ΄Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΎ ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Π² Π½Π°ΡΠ°ΡΠ° Π»ΠΎΠΊΠ°Π»Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ΅ Π·Π°ΠΏΠΎΡΠ½Π°Ρ Π΄Π° ΡΠ΅ Π½Π°Π±Π»ΡΠ΄Π°Π²Π°Ρ Π·Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ.
Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, Π°ΠΊΠΎ ΡΠ΅Π³Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΉΠ»Π° src/App.js, ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΠ΅ ΡΠ΅Π°Π³ΠΈΡΠ° Π½Π° ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, ΡΠ΅ Π³ΠΈ ΠΊΠΎΠΏΠΈΡΠ° Π² ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΡΡΡΠ΅Ρ ΠΈ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΡΡΡΠ²ΡΡΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΊΠΎΠΉΡΠΎ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΡΠ°ΡΠ·ΡΡΠ°.
ΠΠ° Π΄Π° Π·Π°Π²ΡΡΡΠΈΠΌ ΠΊΠ°ΡΡΠΈΠ½Π°ΡΠ°, Π½Π΅ΠΊΠ° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ ΡΠ΅Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π² ΡΡΡ Π½Π°ΡΠ° ΡΡΠ»ΠΎΡΡ:
$ npx nodeshift --strictSSL=false --dockerImage=nodeshift/ubi8-s2i-web-app --build.env YARN_ENABLED=true --expose --deploy.env NPM_RUN="yarn start" --deploy.port 3000
$ npx nodeshift watch --strictSSL=false
ΠΠΎΠΌΠ°Π½Π΄Π°ΡΠ° watch Π΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ Π²ΡΡΡ
Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° oc rsync, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΡΡΠΈΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ
Π’ΠΎΠ²Π° Π±Π΅ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° React, Π½ΠΎ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΡΡΡΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ Π΄ΡΡΠ³ΠΈ ΡΠ°ΠΌΠΊΠΈ, ΠΏΡΠΎΡΡΠΎ Π·Π°Π΄Π°ΠΉΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° NPM_RUN ΡΠΏΠΎΡΠ΅Π΄ Π½ΡΠΆΠ΄ΠΈΡΠ΅.
β
Openshift ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΈ
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠ°ΡΠΎ OpenShift Pipelines ΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Π½Π° Π²Π΅ΡΠΈΠΆΠ½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈ.
ΠΠ°ΠΊΠ²ΠΎ Π΅ OpenShift Pipelines
OpenShift Pipelines Π΅ Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° ΠΎΠ±Π»Π°ΠΊ CI/CD Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π·Π° ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΈ Tekton. Tekton Π΅ Π³ΡΠ²ΠΊΠ°Π²Π° CI/CD ΡΠ°ΠΌΠΊΠ° Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ Π½Π° Kubernetes, ΠΊΠΎΡΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ (Kubernetes, Π±Π΅Π· ΡΡΡΠ²ΡΡ, Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ ΠΈ Ρ.Π½.), ΠΊΠ°ΡΠΎ ΡΠ΅ Π°Π±ΡΡΡΠ°Ρ ΠΈΡΠ° ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΡΠ»ΠΎΠΉ.
Π Π°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ Π½Π° ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠΈΠ»Π½ΠΎ Π²ΠΈ ΡΡΠ²Π΅ΡΠ²Π°ΠΌΠ΅ ΠΏΡΡΠ²ΠΎ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° ΡΡΠ΅Π΄Π°
ΠΠ° Π΄Π° ΡΠΈ ΠΏΠΎΠΈΠ³ΡΠ°Π΅ΡΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠ΅ Π² ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ, ΠΏΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΡΡΡΠΎΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ½Π° ΡΡΠ΅Π΄Π°:
- ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΠΊΠ»ΡΡΡΠ΅Ρ OpenShift 4. ΠΠ°ΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ CodeReady Containers (CRD) Π·Π° ΡΠΎΠ²Π°, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π·Π° ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅
ΡΡΠΊ . - Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΊΠ»ΡΡΡΠ΅ΡΡΡ Π΅ Π³ΠΎΡΠΎΠ², ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Pipeline Operator Π²ΡΡΡ
Ρ Π½Π΅Π³ΠΎ. ΠΠ΅ ΡΠ΅ ΡΡΡΠ°Ρ
ΡΠ²Π°ΠΉΡΠ΅, Π»Π΅ΡΠ½ΠΎ Π΅, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅
ΡΡΠΊ . - ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅
Tekton CLI (tkn)ΡΡΠΊ . - Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΡΠ΅Π΄ create-react-app, Π·Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΎ (ΡΠΎΠ²Π° Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
Π Π΅Π°Π³ΠΈΡΠ°Ρ ). - (ΠΠΎ ΠΈΠ·Π±ΠΎΡ) ΠΠ»ΠΎΠ½ΠΈΡΠ°ΠΉΡΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ, Π·Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ Ρ npm install ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° npm start.
Π₯ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΡΠΎ ΡΠ΅ ΠΈΠΌΠ° ΠΏΠ°ΠΏΠΊΠ° k8s, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ° Kubernetes/OpenShift YAML, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. Π©Π΅ ΠΈΠΌΠ° Tasks, ClusterTasks, Resources ΠΈ Pipelines, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π² ΡΠΎΠ²Π°
ΠΠ°Ρ Π²Π°ΡΠ°ΠΌ ΡΠ΅
ΠΡΡΠ²Π°ΡΠ° ΡΡΡΠΏΠΊΠ° Π·Π° Π½Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ Π΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ Π½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° OpenShift. ΠΠ΅ΠΊΠ° Π½Π°ΠΈΠΌΠ΅Π½ΡΠ²Π°ΠΌΠ΅ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ webapp-pipeline ΠΈ Π³ΠΎ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΡΡ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
$ oc new-project webapp-pipeline
ΠΠΎ-ΠΊΡΡΠ½ΠΎ ΡΠΎΠ²Π° ΠΈΠΌΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ Π² ΠΊΠΎΠ΄Π°, ΡΠ°ΠΊΠ° ΡΠ΅ Π°ΠΊΠΎ ΡΠ΅ΡΠΈΡΠ΅ Π΄Π° Π³ΠΎ ΠΊΡΡΡΡΠΈΡΠ΅ ΠΏΠΎ Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½, Π½Π΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅ Π΄Π° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°ΡΠ΅ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ ΠΊΠΎΠ΄Π° ΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠ΅. ΠΠ°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ ΠΎΡ ΡΠ°Π·ΠΈ ΡΠΎΡΠΊΠ°, ΡΠ΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ Π½Π΅ ΠΎΡΠ³ΠΎΡΠ΅ Π½Π°Π΄ΠΎΠ»Ρ, Π° ΠΎΡΠ΄ΠΎΠ»Ρ Π½Π°Π³ΠΎΡΠ΅: ΡΠΎΠ΅ΡΡ ΠΏΡΡΠ²ΠΎ ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π½Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° ΠΈ Π΅Π΄Π²Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ°ΠΌΠΈΡ Π½Π΅Π³ΠΎ.
Π ΡΠ°ΠΊΠ°, Π½Π° ΠΏΡΡΠ²ΠΎ ΠΌΡΡΡΠΎβ¦
ΠΠ°Π΄Π°ΡΠΈ
ΠΠ΅ΠΊΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π·Π°Π΄Π°ΡΠΈ (Π·Π°Π΄Π°ΡΠΈ), ΠΊΠΎΠΈΡΠΎ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π½Π°ΡΠΈΡ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄. ΠΡΡΠ²Π°ΡΠ° Π·Π°Π΄Π°ΡΠ°, apply_manifests_task, ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ΡΠΎ Π½Π° YAML Π½Π° ΠΎΠ½Π΅Π·ΠΈ ΡΠ΅ΡΡΡΡΠΈ Π½Π° Kubernetes (ΡΡΠ»ΡΠ³Π°, Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ ΠΈ ΠΌΠ°ΡΡΡΡΡ), ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°Ρ Π² ΠΏΠ°ΠΏΠΊΠ°ΡΠ° k8s Π½Π° Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠΎΡΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° - update_deployment_task - ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π²Π΅ΡΠ΅ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΎΡΠΎ ΠΎΡ Π½Π°ΡΠΈΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ.
ΠΠ΅ ΡΠ΅ ΠΏΡΠΈΡΠ΅ΡΠ½ΡΠ²Π°ΠΉΡΠ΅, Π°ΠΊΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ½ΠΎ. ΠΡΡΡΠ½ΠΎΡΡ ΡΠ΅Π·ΠΈ Π·Π°Π΄Π°ΡΠΈ ΡΠ° Π½Π΅ΡΠΎ ΠΊΠ°ΡΠΎ ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΈ ΡΠ΅ Π³ΠΈ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ. ΠΠ°ΡΠ΅Π³Π° Π½Π΅ΠΊΠ° ΠΏΡΠΎΡΡΠΎ Π³ΠΈ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ:
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/tasks/update_deployment_task.yaml
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/tasks/apply_manifests_task.yaml
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π°, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° tkn CLI, ΠΏΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π΄Π°Π»ΠΈ Π·Π°Π΄Π°ΡΠΈΡΠ΅ ΡΠ° ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ:
$ tkn task ls
NAME AGE
apply-manifests 1 minute ago
update-deployment 1 minute ago
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: Π’ΠΎΠ²Π° ΡΠ° Π»ΠΎΠΊΠ°Π»Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ Π·Π° ΡΠ΅ΠΊΡΡΠΈΡ Π²ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ.
ΠΠ»ΡΡΡΠ΅ΡΠ½ΠΈ Π·Π°Π΄Π°ΡΠΈ
ΠΠ»ΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΡΠ° ΠΎΡΠ½ΠΎΠ²Π½ΠΎ ΡΡΡΠΈΡΠ΅ ΠΊΠ°ΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ. Π’ΠΎΠ΅ΡΡ, ΡΠΎΠ²Π° Π΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π΅ΠΌΠ° ΠΊΠΎΠ»Π΅ΠΊΡΠΈΡ ΠΎΡ ΡΡΡΠΏΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π·Π°Π΄Π°ΡΠ°. Π Π°Π·Π»ΠΈΠΊΠ°ΡΠ° Π΅, ΡΠ΅ ΠΊΠ»ΡΡΡΠ΅ΡΠ½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π΅ Π΄ΠΎΡΡΡΠΏΠ½Π° Π½Π°Π²ΡΡΠΊΡΠ΄Π΅ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°. ΠΠ° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΏΠΈΡΡΠΊΠ° Ρ ΠΊΠ»ΡΡΡΠ΅ΡΠ½ΠΈ Π·Π°Π΄Π°ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π½Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° tkn CLI:
$ tkn clustertask ls
NAME AGE
buildah 1 day ago
buildah-v0-10-0 1 day ago
jib-maven 1 day ago
kn 1 day ago
maven 1 day ago
openshift-client 1 day ago
openshift-client-v0-10-0 1 day ago
s2i 1 day ago
s2i-go 1 day ago
s2i-go-v0-10-0 1 day ago
s2i-java-11 1 day ago
s2i-java-11-v0-10-0 1 day ago
s2i-java-8 1 day ago
s2i-java-8-v0-10-0 1 day ago
s2i-nodejs 1 day ago
s2i-nodejs-v0-10-0 1 day ago
s2i-perl 1 day ago
s2i-perl-v0-10-0 1 day ago
s2i-php 1 day ago
s2i-php-v0-10-0 1 day ago
s2i-python-3 1 day ago
s2i-python-3-v0-10-0 1 day ago
s2i-ruby 1 day ago
s2i-ruby-v0-10-0 1 day ago
s2i-v0-10-0 1 day ago
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π΄Π²Π΅ ΠΊΠ»ΡΡΡΠ΅ΡΠ½ΠΈ Π·Π°Π΄Π°ΡΠΈ. ΠΡΡΠ²ΠΈΡΡ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° S2I ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅ Π³ΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠΈ Π΄ΠΎ Π²ΡΡΡΠ΅ΡΠ½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ Π½Π° OpenShift; Π²ΡΠΎΡΠΎΡΠΎ Π΅ Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΠΌ Π½Π°ΡΠ΅ΡΠΎ Π±Π°Π·ΠΈΡΠ°Π½ΠΎ Π½Π° NGINX ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π²Π΅ΡΠ΅ ΡΠΌΠ΅ ΡΡΠ·Π΄Π°Π»ΠΈ ΠΊΠ°ΡΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅.
Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ΅ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
ΠΠΎΠ³Π°ΡΠΎ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΡΡΠ²Π°ΡΠ° Π·Π°Π΄Π°ΡΠ°, ΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠΈΠΌ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π²Π΅ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅ Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΡΡΠ°ΡΠΈΡ Π·Π° ΡΠ²ΡΡΠ·Π°Π½ΠΈΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ. Π‘ΠΏΠΎΠΌΠ½Π΅ΡΠ΅ ΡΠΈ, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ΅ S2I ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ (ubi8-s2i-web-app), Π·Π° Π΄Π° βΠΈΠ·Π³ΡΠ°Π΄ΠΈΠΌβ Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°Π²ΡΡΡΠΈΡ ΠΌΠ΅ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΡΡ ΡΠ°Π½Π΅Π½ΠΎ Π²ΡΠ² Π²ΡΡΡΠ΅ΡΠ½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ Π½Π° OpenShift. Π‘Π΅Π³Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠΎΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° S2I ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π·Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ DockerFile Π·Π° Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Buildah, Π·Π° Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΠΌ ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡΠΌ Π²ΡΡΡΠ΅ΡΠ½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ Π½Π° OpenShift, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠ²Π° Π΅ ΡΠΎΡΠ½ΠΎ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ OpenShift ΠΏΡΠ°Π²ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°Π·Π³ΡΡΡΠ°ΡΠ΅ Π²Π°ΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° NodeShift.
ΠΡΠΊΡΠ΄Π΅ Π·Π½Π°Π΅ΠΌ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π°, ΠΏΠΈΡΠ°ΡΠ΅ Π²ΠΈΠ΅? ΠΎΡ
Π ΡΠ°ΠΊΠ°, ΡΠ΅Π³Π° ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π·Π°Π΄Π°ΡΠ°ΡΠ° Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° s2i-web-app:
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/s2i-web-app-task.yaml
ΠΡΠΌΠ° Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠΎΠ²Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ, Π° ΡΠ°ΠΌΠΎ Π΄Π° ΡΠ΅ ΡΠΏΡΠ΅ΠΌ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ° OUTPUT_DIR:
params:
- name: OUTPUT_DIR
description: The location of the build output directory
default: build
ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠΎΠ·ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΅ build, ΠΊΡΠ΄Π΅ΡΠΎ React ΠΏΠΎΡΡΠ°Π²Ρ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ΠΎΡΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅. ΠΡΡΠ³ΠΈ ΡΠ°ΠΌΠΊΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΡΠΈΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² Ember ΡΠΎΠ²Π° Π΅ dist. Π Π΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΡ Π½Π°ΡΠ°ΡΠ° ΠΏΡΡΠ²Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ½Π° Π·Π°Π΄Π°ΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠ΄ΡΡΠΆΠ°ΡΠΎ HTML, JavaScript ΠΈ CSS, ΠΊΠΎΠΈΡΠΎ ΡΠΌΠ΅ ΡΡΠ±ΡΠ°Π»ΠΈ.
ΠΠΈΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°ΠΌΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π±Π°Π·ΠΈΡΠ°Π½ΠΎ Π½Π° NGINX
Π©ΠΎ ΡΠ΅ ΠΎΡΠ½Π°ΡΡ Π΄ΠΎ Π½Π°ΡΠ°ΡΠ° Π²ΡΠΎΡΠ° ΠΊΠ»ΡΡΡΠ΅ΡΠ½Π° Π·Π°Π΄Π°ΡΠ°, ΡΡ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈ Π±Π°Π·ΠΈΡΠ°Π½ΠΎ Π½Π° NGINX ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π° Π½Π°Ρ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π²Π΅ΡΠ΅ ΡΠΌΠ΅ ΡΡΠ·Π΄Π°Π»ΠΈ. ΠΡΡΡΠ½ΠΎΡΡ ΡΠΎΠ²Π° Π΅ ΡΠ°ΡΡΡΠ° ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ ΡΠ°Π·Π΄Π΅Π», Π² ΠΊΠΎΡΡΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π°Ρ ΠΌΠ΅ Π²Π΅ΡΠΈΠΆΠ½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈ.
ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠΎΠ²Π°, Π½ΠΈΠ΅ - ΡΠΎΡΠ½ΠΎ ΠΊΠ°ΠΊΡΠΎ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π³ΠΎΡΠ΅ - ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΊΠ»ΡΡΡΠ΅ΡΠ½Π° Π·Π°Π΄Π°ΡΠ° Π½Π° webapp-build-runtime:
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/webapp-build-runtime-task.yaml
ΠΠΊΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΠΊΠΎΠ΄Π° Π·Π° ΡΠ΅Π·ΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠ½ΠΈ Π·Π°Π΄Π°ΡΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅ ΡΠΎΠΉ Π½Π΅ ΠΏΠΎΡΠΎΡΠ²Π° Git Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ, Ρ ΠΊΠΎΠ΅ΡΠΎ ΡΠ°Π±ΠΎΡΠΈΠΌ, ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅. ΠΠΈΠ΅ ΡΠ°ΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠΎΡΠ½ΠΎ ΠΏΡΠ΅Π΄Π°Π²Π°ΠΌΠ΅ Π½Π° Git ΠΈΠ»ΠΈ Π½ΡΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΡΠ΄Π΅ΡΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΈΠ·Π²Π΅Π΄Π΅ΠΌ ΠΊΡΠ°ΠΉΠ½ΠΎΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠΎ Π·Π°ΡΠΎ ΡΠ΅Π·ΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠΈΡΠ°Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π³ΡΠ°ΡΠΈΠΎΠ·Π½ΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ ΠΊΡΠΌ ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΠΎΡΠΊΠ° ...
Π Π΅ΡΡΡΡΡ
Π’Π°ΠΊΠ° ΡΠ΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ, ΠΊΠ°ΠΊΡΠΎ ΡΠΎΠΊΡ-ΡΠΎ ΠΊΠ°Π·Π°Ρ ΠΌΠ΅, ΠΊΠ»ΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-ΠΎΠ±ΡΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΠ΅ΡΡΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π²ΡΠ² Π²Ρ ΠΎΠ΄Π° (Git Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅) ΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π° (ΠΊΡΠ°ΠΉΠ½ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ). ΠΡΡΠ²ΠΈΡΡ ΡΠ΅ΡΡΡΡ, ΠΎΡ ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ, Π΅ Git, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π΅ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ:
# This resource is the location of the git repo with the web application source
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
name: web-application-repo
spec:
type: git
params:
- name: url
value: https://github.com/nodeshift-starters/react-pipeline-example
- name: revision
value: master
Π’ΡΠΊ PipelineResource Π΅ ΠΎΡ ΡΠΈΠΏ git. Url ΠΊΠ»ΡΡΡΡ Π² ΡΠ΅ΠΊΡΠΈΡΡΠ° params ΡΠΎΡΠΈ ΠΊΡΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΈ Π·Π°Π΄Π°Π²Π° Π³Π»Π°Π²Π½ΠΈΡ ΠΊΠ»ΠΎΠ½ (ΡΠΎΠ²Π° Π½Π΅ Π΅ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ, Π½ΠΎ Π³ΠΎ ΠΏΠΈΡΠ΅ΠΌ Π·Π° ΠΏΡΠ»Π½ΠΎΡΠ°).
Π‘Π΅Π³Π° ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΠ΅ΡΡΡΡ Π·Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ Π·Π°ΠΏΠ°Π·Π΅Π½ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ Π·Π°Π΄Π°ΡΠ°ΡΠ° Π½Π° s2i-web-app, ΡΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
# This resource is the result of running "npm run build", the resulting built files will be located in /opt/app-root/output
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
name: built-web-application-image
spec:
type: image
params:
- name: url
value: image-registry.openshift-image-registry.svc:5000/webapp-pipeline/built-web-application:latest
Π’ΡΠΊ PipelineResource Π΅ ΠΎΡ ΡΠΈΠΏ image ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° url ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ° ΡΠΎΡΠΈ ΠΊΡΠΌ Π²ΡΡΡΠ΅ΡΠ½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡΠ° Π½Π° OpenShift, ΠΏΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΡΠΎΠ·ΠΈ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° webapp-pipeline. ΠΠ΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ°Π·ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°, Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°.
Π Π½Π°ΠΊΡΠ°Ρ, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΡ ΡΠ΅ΡΡΡΡ, ΠΎΡ ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ, ΡΡΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΎΡ ΡΠΈΠΏ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π½ΠΎΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° NGINX, ΠΊΠΎΠ΅ΡΠΎ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ:
# This resource is the image that will be just the static html, css, js files being run with nginx
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
name: runtime-web-application-image
spec:
type: image
params:
- name: url
value: image-registry.openshift-image-registry.svc:5000/webapp-pipeline/runtime-web-application:latest
ΠΡΠ½ΠΎΠ²ΠΎ ΠΈΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ ΡΠΎΠ·ΠΈ ΡΠ΅ΡΡΡΡ ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π²ΡΠ² Π²ΡΡΡΠ΅ΡΠ½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ Π½Π° OpenShift Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° webapp-pipeline.
ΠΠ° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ ΡΠ΅ΡΡΡΡΠΈ Π½Π°Π²Π΅Π΄Π½ΡΠΆ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° create:
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/resources/resource.yaml
ΠΠ° Π΄Π° ΡΡΠ΅ ΡΠΈΠ³ΡΡΠ½ΠΈ, ΡΠ΅ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ ΡΠ° ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
$ tkn resource ls
ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄
Π‘Π΅Π³Π°, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ, ΡΠ΅ ΡΠ³Π»ΠΎΠ±ΠΈΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ ΠΎΡ ΡΡΡ , ΠΊΠ°ΡΠΎ Π³ΠΎ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΡΡ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/pipelines/build-and-deploy-react.yaml
ΠΠΎ ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π½Π΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΠ΅Π·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ. ΠΡΡΠ²ΠΎΡΠΎ Π΅ ΠΈΠΌΠ΅ΡΠΎ:
apiVersion: tekton.dev/v1alpha1
kind: Pipeline
metadata:
name: build-and-deploy-react
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π² ΡΠ΅ΠΊΡΠΈΡΡΠ° ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΈΡ Π·Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΡΠ·Π΄Π°Π΄ΠΎΡ ΠΌΠ΅ ΠΏΠΎ-ΡΠ°Π½ΠΎ:
spec:
resources:
- name: web-application-repo
type: git
- name: built-web-application-image
type: image
- name: runtime-web-application-image
type: image
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π·Π°Π΄Π°ΡΠΈ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π½Π°ΡΠΈΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ. ΠΠ° ΠΏΡΡΠ²ΠΎ ΠΌΡΡΡΠΎ, ΡΠΎΠΉ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈ Π·Π°Π΄Π°ΡΠ°ΡΠ° s2i-web-app, ΠΊΠΎΡΡΠΎ Π²Π΅ΡΠ΅ ΡΠΌΠ΅ ΡΡΠ·Π΄Π°Π»ΠΈ:
tasks:
- name: build-web-application
taskRef:
name: s2i-web-app
kind: ClusterTask
Π’Π°Π·ΠΈ Π·Π°Π΄Π°ΡΠ° ΠΏΡΠΈΠ΅ΠΌΠ° Π²Ρ ΠΎΠ΄Π½ΠΈ (gir ΡΠ΅ΡΡΡΡ) ΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈ (built-web-application-image resource) ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ. ΠΠΈΠ΅ ΡΡΡΠΎ ΠΌΡ ΠΏΡΠ΅Π΄Π°Π²Π°ΠΌΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΡΠ°ΠΊΠ° ΡΠ΅ Π΄Π° Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° TLS, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ°ΠΌΠΎΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ:
resources:
inputs:
- name: source
resource: web-application-repo
outputs:
- name: image
resource: built-web-application-image
params:
- name: TLSVERIFY
value: "false"
Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π΅ ΠΏΠΎΡΡΠΈ ΡΡΡΠ°ΡΠ°, ΡΠ°ΠΌΠΎ ΠΊΠ»ΡΡΡΠ΅ΡΠ½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π½Π° webapp-build-runtime, ΠΊΠΎΡΡΠΎ Π²Π΅ΡΠ΅ ΡΡΠ·Π΄Π°Π΄ΠΎΡ ΠΌΠ΅, ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΡΡΠΊ:
name: build-runtime-image
taskRef:
name: webapp-build-runtime
kind: ClusterTask
ΠΠ°ΠΊΡΠΎ ΠΏΡΠΈ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ°, Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°ΠΌΠ΅ ΡΠ΅ΡΡΡΡ, Π½ΠΎ ΡΠ΅Π³Π° ΡΠΎΠΉ Π΅ Π²Π³ΡΠ°Π΄Π΅Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΠΈΠ·Ρ ΠΎΠ΄ΡΡ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° Π½ΠΈ Π·Π°Π΄Π°ΡΠ°). Π ΠΊΠ°ΡΠΎ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ°Π·ΠΈ Π·Π°Π΄Π°ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈ ΡΠ»Π΅Π΄ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ°, Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΠΏΠΎΠ»Π΅ΡΠΎ runAfter:
resources:
inputs:
- name: image
resource: built-web-application-image
outputs:
- name: image
resource: runtime-web-application-image
params:
- name: TLSVERIFY
value: "false"
runAfter:
- build-web-application
Π‘Π»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ Π΄Π²Π΅ Π·Π°Π΄Π°ΡΠΈ ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡ Π·Π° ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°, ΠΌΠ°ΡΡΡΡΡΠ° ΠΈ YAML ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°Ρ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° k8s Π½Π° Π½Π°ΡΠ΅ΡΠΎ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ Π·Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ²Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ Π½ΠΎΠ²ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡΡΠ°Π²ΠΈΡ ΠΌΠ΅ ΡΠ΅Π·ΠΈ Π΄Π²Π΅ Π·Π°Π΄Π°ΡΠΈ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ°.
ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄Π°
Π ΡΠ°ΠΊΠ°, Π²ΡΠΈΡΠΊΠΈ ΡΠ°ΡΡΠΈ Π½Π° Π½Π°ΡΠΈΡ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ ΡΠ° ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΈ ΡΠ΅ Π³ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΡΡΡ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
$ tkn pipeline start build-and-deploy-react
Π ΡΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡΡ ΡΠ΅Π΄ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·Π±ΡΠ°Π½ΠΈ Π² ΠΎΡΠ³ΠΎΠ²ΠΎΡ Π½Π° Π²ΡΡΠΊΠ° ΠΎΡ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ: Π·Π° git ΡΠ΅ΡΡΡΡΠ° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ web-application-repo, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π·Π° ΠΏΡΡΠ²ΠΈΡ ΡΠ΅ΡΡΡΡ Π·Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²Π³ΡΠ°Π΄Π΅Π½ΠΎ ΡΠ΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅- ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π°ΠΊΡΠ°Ρ Π·Π° Π²ΡΠΎΡΠΈ ΡΠ΅ΡΡΡΡ Π·Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ βΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅:
? Choose the git resource to use for web-application-repo: web-application-repo (https://github.com/nodeshift-starters/react-pipeline-example)
? Choose the image resource to use for built-web-application-image: built-web-application-image (image-registry.openshift-image-registry.svc:5000/webapp-pipeline/built-web-
application:latest)
? Choose the image resource to use for runtime-web-application-image: runtime-web-application-image (image-registry.openshift-image-registry.svc:5000/webapp-pipeline/runtim
e-web-application:latest)
Pipelinerun started: build-and-deploy-react-run-4xwsr
Π‘Π΅Π³Π° ΠΏΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄Π° ΡΡΡ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
$ tkn pipeline logs -f
Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΡΡ ΡΡΠ°ΡΡΠΈΡΠ° ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π±ΡΠ΄Π΅ ΡΠ°Π·Π³ΡΡΠ½Π°ΡΠΎ, Π½Π°ΠΏΡΠ°Π²Π΅ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ ΠΊΡΠΌ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΡΡΡ ΡΡΡ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
$ oc get route react-pipeline-example --template='http://{{.spec.host}}'
ΠΠ° ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ° Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π½Π°ΡΠΈΡ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ Π² ΡΠ΅ΠΆΠΈΠΌΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π½Π° ΡΠ΅Π± ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° Π² ΡΠ΅ΠΊΡΠΈΡΡΠ° Π’ΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΠ³. 1.
Π€ΠΈΠ³. 1. ΠΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΈ.
Π©ΡΠ°ΠΊΠ²Π°Π½Π΅ΡΠΎ Π²ΡΡΡ Ρ ΡΠ°Π±ΠΎΡΠ΅Ρ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Π²Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΠ³ΡΡΠ° 2.
ΠΡΠΈΠ·. 2. ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°.
Π‘Π»Π΅Π΄ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ΅ΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΈΠ·Π³Π»Π΅Π΄Π° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΠ³.3.
Π€ΠΈΠ³. 3. Π’Π΅ΡΠ°ΡΠ° ΠΊΠ°ΠΏΡΡΠ»Π°.
Π©ΡΠ°ΠΊΠ²Π°Π½Π΅ΡΠΎ Π²ΡΡΡ Ρ ΠΊΡΡΠ³Π° Π² Π³ΠΎΡΠ½ΠΈΡ Π΄Π΅ΡΠ΅Π½ ΡΠ³ΡΠ» Π½Π° ΠΈΠΊΠΎΠ½Π°ΡΠ° ΠΎΡΠ²Π°ΡΡ Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΠ³ΡΡΠ° 4.
ΠΡΠΈΠ·. 4. Π Π°Π±ΠΎΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ React.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΠ°ΠΊΠ°, Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ
ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΡΡΠ²ΡΡ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π·Π° Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° OpenShift ΠΈ Π΄Π° Π³ΠΎ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Ρ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ°. Π Π°Π·Π³Π»Π΅Π΄Π°Ρ
ΠΌΠ΅ ΡΡΡΠΎ ΠΊΠ°ΠΊ Π΄Π° ΡΠΈΠΌΡΠ»ΠΈΡΠ°ΠΌΠ΅ ΡΠ°Π±Π»ΠΎΠ½ Π·Π° Π²Π΅ΡΠΈΠΆΠ½ΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° OpenShift Pipelines. ΠΡΠΈΡΠΊΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΈ ΠΊΠΎΠ΄ΠΎΠ²Π΅ ΠΎΡ ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈ
ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ
- ΠΠ΅Π·ΠΏΠ»Π°ΡΠ½Π° Π΅Π»Π΅ΠΊΡΡΠΎΠ½Π½Π° ΠΊΠ½ΠΈΠ³Π°
βΠ Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° OpenShift: Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π·Π° Π½Π΅ΡΡΡΠΏΠ΅Π»ΠΈΠ²ΠΈΡΠ΅β ΠΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ Node.js ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Runtimes Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Red Hat OpenShift ΠΈ Istio ΠΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Node.js Π½Π° OpenShift Ρ Chrome DevTools Π’ΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΠΎΠ²Π»Π°Π΄ΡΠ²Π°Π½Π΅ Π½Π° Express Π½Π° OpenShift ΠΎΡ Π½ΡΠ»Π°ΡΠ° ΠΠ±ΡΠ²ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠ±Π»ΠΈΡΠ½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° Node.js ΠΊΠ°ΡΠΎ ΡΠ°ΡΡ ΠΎΡ Runtimes Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Red Hat OpenShift ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Π½Π° Node.js ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° OpenShift Ρ Prometheus - ΠΠΎΠ²Π΅ΡΠ΅ Π·Π°
OpenShift ΠΈ Kubernetes Π½Π° ΡΠ΅Π±ΡΠ°ΠΉΡΠ° Π½Π° Red Hat
Π‘ΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π·Π° ΠΏΡΠ΅Π΄ΡΡΠΎΡΡΠΈ ΡΠ΅Π±ΠΈΠ½Π°ΡΠΈ
ΠΠ°ΠΏΠΎΡΠ²Π°ΠΌΠ΅ ΠΏΠΎΡΠ΅Π΄ΠΈΡΠ° ΠΎΡ ΠΏΠ΅ΡΡΡΠ½ΠΈ ΡΠ΅Π±ΠΈΠ½Π°ΡΠΈ Π·Π° Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎΡΠΎ ΠΈΠ·ΠΆΠΈΠ²ΡΠ²Π°Π½Π΅ ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Red Hat OpenShift Container Platform ΠΈ Kubernetes:
28 Π°Π²Π³ΡΡΡ, ΡΠ΅Π±ΠΈΠ½Π°Ρ Emperor βOperatorβ: ΠΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ Π² OpenShift ΠΈ Kubernetes 11 ΡΠ΅ΠΏΡΠ΅ΠΌΠ²ΡΠΈ, DeploymentConfig ΡΡΠ΅ΡΡ Deployment β ββΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½Π° Π·Π° OpenShift ΠΌΠ°Π³ΠΈΡ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ 25 ΡΠ΅ΠΏΡΠ΅ΠΌΠ²ΡΠΈ, Red Hat OpenShift ΠΈ Machine API 9 ΠΎΠΊΡΠΎΠΌΠ²ΡΠΈ ΠΠ°ΠΊ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΠΌ Ρ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎΡΠΎ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΌΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ° 23 ΠΎΠΊΡΠΎΠΌΠ²ΡΠΈ, Embedded Jenkins, Pipeline-builds, Tekton Π½Π° Red Hat OpenShift Container Platform
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com