ΠΠ΄ΡΠ°Π²ΠΎ Π½Π° ΡΠΈΡΠ΅ Π½Π° ΠΎΠ²ΠΎΡ Π±Π»ΠΎΠ³! ΠΠ²Π° Π΅ ΡΡΠ΅ΡΠ° ΠΎΠ±ΡΠ°Π²Π° Π²ΠΎ ΡΠ΅ΡΠΈΡΠ°ΡΠ° Π²ΠΎ ΠΊΠΎΡΠ° ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΠΈΠΌΠ΅ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° Red Hat OpenShift.
ΠΠΎ ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΈΡΠ΅ Π΄Π²Π΅ ΠΎΠ±ΡΠ°Π²ΠΈ, ΠΏΠΎΠΊΠ°ΠΆΠ°Π²ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π°Ρ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π²ΠΎ ΡΠ°ΠΌΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΠ΅ΠΊΠΎΡΠΈ ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π½ΠΎΠ²Π° ΡΠ»ΠΈΠΊΠ° S2I Π·Π°Π΅Π΄Π½ΠΎ ΡΠΎ ΡΠ»ΠΈΠΊΠ° ΠΎΠ΄ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ HTTP, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ NGINX, ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΠΎΠΊΠΎΠ²Π°Π½ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΠΎΡΠΊΠ΅ΡΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ. .
ΠΠ΅Π½Π΅Ρ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ ΡΠ΅ΡΠ²Π΅Ρ Π·Π° ΡΠ°Π·Π²ΠΎΡ Π·Π° Π²Π°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° OpenShift ΠΈ Π΄Π° ΡΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ Π΄Π°ΡΠΎΡΠ΅ΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌ, Π° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ°Π·Π³ΠΎΠ²Π°ΡΠ°ΠΌΠ΅ Π·Π° ΡΠΎΠ° ΡΡΠΎ ΡΠ΅ OpenShift Pipelines ΠΈ ΠΊΠ°ΠΊΠΎ ΡΠΈΠ΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΊΠ°ΠΊΠΎ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Π½Π° ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈΡΠ΅ ΡΠΊΠ»ΠΎΠΏΠΎΠ²ΠΈ.
OpenShift ΠΊΠ°ΠΊΠΎ ΡΠ°Π·Π²ΠΎΡΠ½Π° ΡΡΠ΅Π΄ΠΈΠ½Π°
Π Π°Π±ΠΎΡΠ΅Π½ ΡΠ΅ΠΊ Π½Π° ΡΠ°Π·Π²ΠΎΡ
ΠΠ°ΠΊΠΎ ΡΡΠΎ Π΅ Π²Π΅ΡΠ΅ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ Π²ΠΎ
ΠΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ ΡΠ°ΠΌΠΊΠΈ, ΡΠ°ΠΊΠΎΠ² βΡΠ΅ΡΠ²Π΅Ρ Π·Π° ΡΠ°Π·Π²ΠΎΡβ Π΅ Π²Π³ΡΠ°Π΄Π΅Π½ Π²ΠΎ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΈΡΠ΅ Π°Π»Π°ΡΠΊΠΈ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°ΡΠ° Π»ΠΈΠ½ΠΈΡΠ°.
ΠΠΎΠΊΠ°Π»Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ
ΠΡΠ²ΠΎ, Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠ΅ ΠΊΠ°ΠΊΠΎ ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° ΠΊΠΎΠ³Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ. ΠΠ° ΡΠ° Π·Π΅ΠΌΠ΅ΠΌΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΊΠ°ΠΊΠΎ ΠΏΡΠΈΠΌΠ΅Ρ
ΠΠ½Π°ΡΠΈ, Π·Π° Π΄Π° Π³ΠΎ ΡΡΠ°ΡΡΡΠ²Π°ΠΌΠ΅ βdev serverβ Π²ΠΎ Π½Π°ΡΠΈΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ 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 ΠΏΠΎΠ΄Π»ΠΎΠ³Π°.
ΠΠΊΠΎ Π³ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ Π½Π° ΡΡΡΠ°ΡΠ΅, ΡΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:
Π‘Π΅ ΡΠ°Π·Π±ΠΈΡΠ°, ΡΠ΅ΡΠΎ ΠΎΠ²Π° Π½Π΅ΠΌΠ° Π΄Π° Π±ΠΈΠ΄Π΅ Π½ΠΈΡΡΠΎ Π΄ΠΎΠ΄Π΅ΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ ΠΊΠΎΠ΄ ΡΠΎ ΠΊΠΎΠ΄ΠΎΡ, ΠΊΠΎΡ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ»Π΅Π΄ΠΈ Π·Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, Π½ΠΎ ΠΆΠΈΠ²Π΅Π΅ Π½Π° ΠΎΠ΄Π΄Π°Π»Π΅ΡΠ΅Π½ ΡΠ΅ΡΠ²Π΅Ρ.
Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π΄Π°Π»Π΅ΡΠΈΠ½ΡΠΊΠΈ ΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ ΠΊΠΎΠ΄
ΠΠ° ΡΡΠ΅ΡΠ°, nodeshift Π»Π΅ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ ΠΏΡΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡΠ°ΡΠ° ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊ Π·Π° ΡΠ»Π΅Π΄Π΅ΡΠ΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅.
ΠΠ½Π°ΡΠΈ, ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ° ΠΈΠ·Π²ΡΡΠΈΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ°Π·Π²ΠΎΡΠ½ΠΈΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ Π·Π° Π½Π°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎ Π΄Π° ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΡΠ»Π΅Π΄Π½Π°Π²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
$ npx nodeshift watch
ΠΠ°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ°, ΡΠ΅ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π²ΡΡΠΊΠ° ΡΠΎ ΠΏΠΎΠ΄Π»ΠΎΠ³Π°ΡΠ° ΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ ΠΌΠ°Π»ΠΊΡ ΠΏΠΎΡΠ°Π½ΠΎ, ΡΠ΅ ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡΠ°ΡΠ° Π½Π° Π½Π°ΡΠΈΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΠΎ Π΄Π°Π»Π΅ΡΠΈΠ½ΡΠΊΠΈΠΎΡ ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π½Π° Π½Π°ΡΠΈΠΎΡ Π»ΠΎΠΊΠ°Π»Π΅Π½ ΡΠΈΡΡΠ΅ΠΌ ΡΠ΅ ΠΏΠΎΡΠ½Π°Ρ Π΄Π° ΡΠ΅ ΡΠ»Π΅Π΄Π°Ρ Π·Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ.
ΠΠ°ΡΠΎΠ°, Π°ΠΊΠΎ ΡΠ΅Π³Π° ΡΠ° Π°ΠΆΡΡΠΈΡΠ°ΠΌΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° 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
ΠΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊ Π΅ Π°ΠΏΡΡΡΠ°ΠΊΡΠΈΡΠ° Π½Π° Π²ΡΠ²ΠΎΡ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° 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) Π·Π° ΠΎΠ²Π°, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ° Π·Π° ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΠ΄Π°Ρ
ΡΡΠΊΠ° . - ΠΡΠΊΠ°ΠΊΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½, ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΡ Π½Π° ΡΠ΅Π²ΠΊΠΎΠ²ΠΎΠ΄ΠΈ Π½Π° Π½Π΅Π³ΠΎ. ΠΠ΅ ΠΏΠ»Π°ΡΠ΅ΡΠ΅ ΡΠ΅, Π»Π΅ΡΠ½ΠΎ Π΅, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ°
ΡΡΠΊΠ° . - ΠΡΠ΅Π²Π·Π΅ΠΌΠΈ
Tekton CLI (tkn)ΡΡΠΊΠ° . - ΠΠ·Π²ΡΡΠ΅ΡΠ΅ ΡΠ° Π°Π»Π°ΡΠΊΠ°ΡΠ° Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π° Π»ΠΈΠ½ΠΈΡΠ° create-react-app Π·Π° Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΊΠΎΡΠ° ΠΏΠΎΡΠΎΠ° ΡΠ΅ ΡΠ° ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΠΈΡΠ΅ (ΠΎΠ²Π° Π΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°
Π Π΅Π°Π³ΠΈΡΠ°Π°Ρ ). - (ΠΠ·Π±ΠΎΡΠ½ΠΎ) ΠΠ»ΠΎΠ½ΠΈΡΠ°ΡΡΠ΅ Π³ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ Π·Π° Π΄Π° ΡΠ° ΠΈΠ·Π²ΡΡΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΏΡΠΈΠΌΠ΅Ρ Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΠΎ npm ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ° ΠΈ ΠΏΠΎΡΠΎΠ° ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ npm.
Π‘ΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅ ΠΈΠΌΠ° ΠΈ ΠΏΠ°ΠΏΠΊΠ° 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-Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ:
$ 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. Π£Π Π-ΠΊΠ»ΡΡΠΎΡ Π²ΠΎ Π΄Π΅Π»ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠΈ ΡΠΊΠ°ΠΆΡΠ²Π° Π½Π° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ ΠΈ ΡΠ° ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π° Π³Π»Π°Π²Π½Π°ΡΠ° Π³ΡΠ°Π½ΠΊΠ° (ΠΎΠ²Π° Π΅ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½ΠΎ, Π½ΠΎ Π½ΠΈΠ΅ Π³ΠΎ ΠΏΠΈΡΡΠ²Π°ΠΌΠ΅ Π·Π°ΡΠ°Π΄ΠΈ ΠΊΠΎΠΌΠΏΠ»Π΅ΡΠ½ΠΎΡΡΠ°).
Π‘Π΅Π³Π° ΡΡΠ΅Π±Π° Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ ΡΠ΅ΡΡΡΡ Π·Π° ΡΠ»ΠΈΠΊΠ°ΡΠ° ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΡΠ΅ ΡΠ΅ Π·Π°ΡΡΠ²Π°Π°Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΠ΄ Π·Π°Π΄Π°ΡΠ°ΡΠ° 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 Π΅ ΠΎΠ΄ ΡΠΈΠΏΠΎΡ ΡΠ»ΠΈΠΊΠ°, Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ 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 Π²ΠΎ ΠΈΠΌΠ΅Π½ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ Π½Π° Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°.
ΠΠ° Π΄Π° Π³ΠΈ ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ ΡΠΈΡΠ΅ ΠΎΠ²ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΈ ΠΎΠ΄Π΅Π΄Π½Π°Ρ, ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅:
$ 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 ΡΠ΅ΡΡΡΡ) ΠΈ ΠΈΠ·Π»Π΅Π·Π½ΠΈ (ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½Π° Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°-ΡΠ΅ΡΡΡΡ Π·Π° ΡΠ»ΠΈΠΊΠ°) ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ. ΠΡΡΠΎ ΡΠ°ΠΊΠ°, ΠΌΡ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π°ΠΌΠ΅ ΠΏΠΎΡΠ΅Π±Π΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π·Π° Π΄Π° Π½Π΅ Π³ΠΎ ΠΏΠΎΡΠ²ΡΠ΄ΠΈ 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, ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°-ΡΠ΅ΠΏΠΎ, ΠΏΠΎΡΠΎΠ° Π·Π° ΠΏΡΠ²ΠΈΠΎΡ ΡΠ΅ΡΡΡΡ ΡΠΎ ΡΠ»ΠΈΠΊΠ°, Π²Π³ΡΠ°Π΄Π΅Π½Π° Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° -ΡΠ»ΠΈΠΊΠ°, ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π·Π° ΡΠ΅ΡΡΡΡ Π½Π° Π²ΡΠΎΡΠ° ΡΠ»ΠΈΠΊΠ° -runtime-web-application-image:
? 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. Π‘ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΈ ΠΎΠ΄ ΠΎΠ²ΠΎΡ Π½Π°ΠΏΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΠ΄Π°Ρ
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ (EN)
- ΠΠ΅ΡΠΏΠ»Π°ΡΠ½Π° Π΅-ΠΊΠ½ΠΈΠ³Π°
βΠ Π°Π·Π²ΠΎΡ Π½Π° OpenShift: Π²ΠΎΠ΄ΠΈΡ Π·Π° Π½Π΅ΡΡΠΏΠ΅Π»ΠΈΠ²ΠΈΡΠ΅β ΠΡΠ°Π΄Π΅ΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΡΠ΅Π½ΡΡΠΈΡΠ½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Node.js ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Red Hat OpenShift Application Runtimes ΠΈ Istio ΠΠ΅Π±Π°Π³ΠΈΡΠ°ΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ Node.js Π½Π° OpenShift ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° Chrome DevTools Π’ΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΡΠΎΠ²Π»Π°Π΄ΡΠ²Π°ΡΠ΅ Π½Π° Express Π½Π° OpenShift ΠΎΠ΄ Π½ΡΠ»Π° ΠΠ°ΡΠ°Π²Π° Π·Π° ΠΎΠΏΡΡΠΎ Π΄ΠΎΡΡΠ°ΠΏΠ½Π°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° Node.js ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ Red Hat OpenShift Application Runtimes Π‘Π»Π΅Π΄Π΅ΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ Π½Π° Node.js Π½Π° OpenShift ΡΠΎ Prometheus - ΠΡΡΠ³ΠΈ ΡΡΠ°ΡΠΈΠΈ Π½Π°
OpenShift ΠΈ Kubernetes Π½Π° Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Π½Π° Red Hat
ΠΠ°ΡΠ°Π²ΠΈ Π·Π° ΠΏΡΠ΅ΡΡΡΠΎΡΠ½ΠΈΡΠ΅ Π²Π΅Π±ΠΈΠ½Π°ΡΠΈ
ΠΠ°ΠΏΠΎΡΠ½ΡΠ²Π°ΠΌΠ΅ ΡΠ΅ΡΠΈΡΠ° Π²Π΅Π±ΠΈΠ½Π°ΡΠΈ Π²ΠΎ ΠΏΠ΅ΡΠΎΠΊ Π·Π° ΠΌΠ°ΡΡΠΈΠ½ ΠΈΡΠΊΡΡΡΠ²ΠΎ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Red Hat OpenShift Container Platform ΠΈ Kubernetes:
28 Π°Π²Π³ΡΡΡ, Π²Π΅Π±ΠΈΠ½Π°Ρ ΠΠΌΠΏΠ΅ΡΠ°ΡΠΎΡ βΠΠΏΠ΅ΡΠ°ΡΠΎΡβ: ΠΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ Π²ΠΎ OpenShift ΠΈ Kubernetes 11 ΡΠ΅ΠΏΡΠ΅ΠΌΠ²ΡΠΈ, DeploymentConfig vs Deployment - ΠΌΠ°Π³ΠΈΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½Π° Π·Π° OpenShift Π·Π° Π³ΡΠ°Π΄Π΅ΡΠ΅ ΠΈ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ 25 ΡΠ΅ΠΏΡΠ΅ΠΌΠ²ΡΠΈ, Red Hat OpenShift ΠΈ Machine API 9 ΠΎΠΊΡΠΎΠΌΠ²ΡΠΈ, ΠΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎ Π½Π°Π³Π»ΠΎΡΠΎ Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π°ΡΠ΅ Π½Π° ΠΎΠ±Π΅ΠΌΠΎΡ Π½Π° ΡΠ°Π±ΠΎΡΠ° 23 ΠΎΠΊΡΠΎΠΌΠ²ΡΠΈ, Embedded Jenkins, Pipeline-builds, Tekton in Red Hat OpenShift Container Platform
ΠΠ·Π²ΠΎΡ: www.habr.com