{"id":92048,"date":"2020-08-22T07:42:57","date_gmt":"2020-08-22T05:42:57","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/sovremennye-prilozheniya-na-openshift-chast-3-openshift-kak-sreda-razrabotki-i-konvejery-openshift-pipelines"},"modified":"2020-08-22T07:42:57","modified_gmt":"2020-08-22T05:42:57","slug":"sovremennye-prilozheniya-na-openshift-chast-3-openshift-kak-sreda-razrabotki-i-konvejery-openshift-pipelines","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/sovremennye-prilozheniya-na-openshift-chast-3-openshift-kak-sreda-razrabotki-i-konvejery-openshift-pipelines","title":{"rendered":"Modern applications on OpenShift, part 3: OpenShift as a development environment and OpenShift Pipelines","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00dcdv\u00f6z\u00f6lj\u00fck a blogban! Itt a harmadik bejegyz\u00e9s a sorozatunkb\u00f3l, amelyben bemutatjuk, hogyan lehet modern webalkalmaz\u00e1sokat telep\u00edteni a Red Hat OpenShift-en.<\/p>\n<p><img decoding=\"async\" alt=\"Modern applications on OpenShift, part 3: OpenShift as a development environment and OpenShift Pipelines\" src=\"\/wp-content\/uploads\/2020\/08\/9c3337b13a3f045d36343308ce6154cc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz el\u0151z\u0151 k\u00e9t bejegyz\u00e9sben elmondtuk, hogyan lehet modern webalkalmaz\u00e1sokat telep\u00edteni mind\u00f6ssze n\u00e9h\u00e1ny l\u00e9p\u00e9sben, \u00e9s hogyan haszn\u00e1lhatjuk az \u00faj S2I k\u00e9pet egy el\u0151re elk\u00e9sz\u00edtett HTTP-szerver k\u00e9ppel, p\u00e9ld\u00e1ul az NGINX-szel, a kapcsolt build-ek seg\u00edts\u00e9g\u00e9vel a termel\u00e9si telep\u00edt\u00e9s szervez\u00e9s\u00e9hez.<\/p>\n<p>Ma megmutatjuk, hogyan ind\u00edthatunk fejleszt\u0151i szervert az OpenShift platformon az alkalmaz\u00e1sunk sz\u00e1m\u00e1ra, \u00e9s hogyan szinkroniz\u00e1lhatjuk azt a helyi f\u00e1jlrendszerrel, valamint besz\u00e9lni fogunk arr\u00f3l, mi az OpenShift Pipelines \u00e9s hogyan alkalmazhat\u00f3 a kapcsolt build-ek alternat\u00edv\u00e1jak\u00e9nt.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>OpenShift mint fejleszt\u0151i k\u00f6rnyezet<\/h3>\n<p><\/p>\n<h4>Fejleszt\u00e9si munkafolyamat<\/h4>\n<p>\nAhogyan azt kor\u00e1bban eml\u00edtett\u00fck a <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/511954\/\">els\u0151 bejegyz\u00e9sben<\/a><\/noindex>, a modern webalkalmaz\u00e1sok tipikus fejleszt\u00e9si folyamata egy \u201efejleszt\u0151i szerver\u201d, amely figyeli a helyi f\u00e1jlokban v\u00e9grehajtott v\u00e1ltoz\u00e1sokat. Amikor ezek bek\u00f6vetkeznek, elindul az alkalmaz\u00e1s build folyamata, majd az a b\u00f6ng\u00e9sz\u0151ben friss\u00fcl.<\/p>\n<p>A legt\u00f6bb modern keretrendszerben az ilyen \u201efejleszt\u0151i szerver\u201d be van \u00e9p\u00edtve a megfelel\u0151 parancssori eszk\u00f6z\u00f6kbe.<\/p>\n<h4>Helyi p\u00e9lda<\/h4>\n<p>\nEl\u0151sz\u00f6r n\u00e9zz\u00fck meg, hogyan m\u0171k\u00f6dik ez a helyi alkalmaz\u00e1sok ind\u00edt\u00e1sakor. P\u00e9ldak\u00e9nt vegy\u00fck az alkalmaz\u00e1st <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lholmquist\/react-web-app\">React<\/a><\/noindex> az el\u0151z\u0151 cikkekb\u0151l, b\u00e1r gyakorlatilag ugyanazokat a munkafolyamat-koncepci\u00f3kat alkalmazz\u00e1k a t\u00f6bbi modern keretrendszerben is.<br \/>\nTeh\u00e1t, hogy elind\u00edtsuk a \u201efejleszt\u0151i szervert\u201d a React p\u00e9ld\u00e1nkban, adjuk ki a k\u00f6vetkez\u0151 parancsot:<\/p>\n<pre><code class=\"plaintext\">$ npm run start\n<\/code><\/pre>\n<p>\n\u00cdgy a termin\u00e1l ablakban k\u00f6r\u00fclbel\u00fcl a k\u00f6vetkez\u0151t fogjuk l\u00e1tni:<\/p>\n<p><img decoding=\"async\" alt=\"Modern applications on OpenShift, part 3: OpenShift as a development environment and OpenShift Pipelines\" src=\"\/wp-content\/uploads\/2020\/08\/06f84ffb4c9a6a5868b8b47b8ad1d9ec.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u00c9s az alkalmaz\u00e1sunk megny\u00edlik az alap\u00e9rtelmezett b\u00f6ng\u00e9sz\u0151ben:<\/p>\n<p><img decoding=\"async\" alt=\"Modern applications on OpenShift, part 3: OpenShift as a development environment and OpenShift Pipelines\" src=\"\/wp-content\/uploads\/2020\/08\/72341bb0796352e7343bf31ceb8233cd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Most, ha m\u00f3dos\u00edtunk egy f\u00e1jlt, az alkalmaz\u00e1snak friss\u00fclnie kell a b\u00f6ng\u00e9sz\u0151ben.<\/p>\n<p>Rendben, a helyi fejleszt\u00e9ssel minden vil\u00e1gos, de hogyan \u00e9rhetj\u00fck el ugyanezt OpenShift-en?<\/p>\n<h4>Fejleszt\u0151i szerver OpenShift-en<\/h4>\n<p>\nHa eml\u00e9keztek, a <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/513948\/\">kor\u00e1bbi bejegyz\u00e9sben<\/a><\/noindex>-ben foglalkoztunk az S2I k\u00e9p ind\u00edt\u00e1si f\u00e1zis\u00e1val, \u00e9s l\u00e1ttuk, hogy alap\u00e9rtelmez\u00e9s szerint a webalkalmaz\u00e1sunk kiszolg\u00e1l\u00e1s\u00e1t a serve modul v\u00e9gzi.<\/p>\n<p>Azonban \u00e9rdemes alaposabban megn\u00e9zni <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nodeshift\/ubi8-s2i-web-app\/blob\/master\/s2i\/run#L10\">run script<\/a><\/noindex> abb\u00f3l a p\u00e9ld\u00e1b\u00f3l, hogy van egy $NPM_RUN k\u00f6rnyezeti v\u00e1ltoz\u00f3, amely lehet\u0151v\u00e9 teszi a saj\u00e1t parancsunk v\u00e9grehajt\u00e1s\u00e1t.<\/p>\n<p>P\u00e9ld\u00e1ul felhaszn\u00e1lhatjuk a nodeshift modult az alkalmaz\u00e1sunk telep\u00edt\u00e9s\u00e9re:<\/p>\n<pre><code class=\"plaintext\">$ npx nodeshift --deploy.env NPM_RUN=\"yarn start\" --dockerImage=nodeshift\/ubi8-s2i-web-app\n<\/code><\/pre>\n<p>\n<i>Megjegyz\u00e9s: a fenti p\u00e9lda r\u00f6vid\u00edtett form\u00e1ban van, hogy bemutassa az \u00e1ltal\u00e1nos \u00f6tletet.<\/i><\/p>\n<p>Itt hozz\u00e1adtuk a telep\u00edt\u00e9s\u00fcnkh\u00f6z az NPM_RUN k\u00f6rnyezeti v\u00e1ltoz\u00f3t, amely azt mondja a v\u00e9grehajt\u00e1si l\u00e9p\u00e9snek, hogy futtassa a yarn start parancsot, amely elind\u00edtja a React fejleszt\u0151i szervert az OpenShift pod-on bel\u00fcl.<\/p>\n<p>Ha megn\u00e9zz\u00fck a fut\u00f3 pod napl\u00f3j\u00e1t, k\u00f6r\u00fclbel\u00fcl a k\u00f6vetkez\u0151k\u00e9ppen fog kin\u00e9zni:<\/p>\n<p><img decoding=\"async\" alt=\"Modern applications on OpenShift, part 3: OpenShift as a development environment and OpenShift Pipelines\" src=\"\/wp-content\/uploads\/2020\/08\/5b090223e08e32a3356608881068ce1a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Term\u00e9szetesen ez mind semmit sem jelent, am\u00edg nem tudjuk szinkroniz\u00e1lni a helyi k\u00f3dot a t\u00e1voli szerveren, amelyet szint\u00e9n v\u00e1ltoz\u00e1sok szerint kell ellen\u0151rizni.<\/p>\n<h4>A t\u00e1voli \u00e9s helyi k\u00f3d szinkroniz\u00e1l\u00e1sa<\/h4>\n<p>\nSzerencs\u00e9re a nodeshift k\u00f6nnyen seg\u00edt a szinkroniz\u00e1l\u00e1sban, a v\u00e1ltoz\u00e1sok nyomon k\u00f6vet\u00e9s\u00e9re pedig haszn\u00e1lhatjuk a watch parancsot.<\/p>\n<p>Teh\u00e1t miut\u00e1n v\u00e9grehajtottuk a parancsot a fejleszt\u0151i szerver telep\u00edt\u00e9s\u00e9re az alkalmaz\u00e1sunkhoz, nyugodtan haszn\u00e1lhatjuk a k\u00f6vetkez\u0151 parancsot:<\/p>\n<pre><code class=\"plaintext\">$ npx nodeshift watch\n<\/code><\/pre>\n<p>\nEnnek eredm\u00e9nyek\u00e9nt csatlakozunk a kor\u00e1bban l\u00e9trehozott fut\u00f3 podhoz, aktiv\u00e1lva a helyi f\u00e1jljaink szinkroniz\u00e1l\u00e1s\u00e1t a t\u00e1voli klaszterrel, a helyi rendszer\u00fcnk f\u00e1jljait pedig a v\u00e1ltoz\u00e1sokra fogj\u00e1k figyelni.<\/p>\n<p>Ez\u00e9rt ha most friss\u00edtj\u00fck a src\/App.js f\u00e1jlt, a rendszer reag\u00e1l a v\u00e1ltoz\u00e1sokra, \u00e1tviszi azokat a t\u00e1voli klaszterre \u00e9s elind\u00edtja a fejleszt\u0151i szervert, amely ezut\u00e1n friss\u00edti az alkalmaz\u00e1sunkat a b\u00f6ng\u00e9sz\u0151ben.<\/p>\n<p>A teljess\u00e9g kedv\u00e9\u00e9rt mutassuk meg, hogyan n\u00e9znek ki ezek a parancsok teljes eg\u00e9sz\u00e9ben:<\/p>\n<pre><code class=\"plaintext\">$ 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\n\n$ npx nodeshift watch --strictSSL=false\n<\/code><\/pre>\n<p>\nA watch parancs egy absztrakci\u00f3 az oc rsync parancs felett, r\u00e9szletesebben arr\u00f3l, hogyan m\u0171k\u00f6dik, lehet ut\u00e1naolvasni. <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.okd.io\/latest\/dev_guide\/copy_files_to_container.html\">itt<\/a><\/noindex>.<\/p>\n<p>Ez egy p\u00e9lda volt a React-ra, de pontosan ugyanazt a m\u00f3dszert m\u00e1s keretrendszerekkel is lehet haszn\u00e1lni, csak a megfelel\u0151 m\u00f3don kell megadni az NPM_RUN k\u00f6rnyezeti v\u00e1ltoz\u00f3t.<br \/>\n\u2003<\/p>\n<h3>OpenShift Pipelines<\/h3>\n<p><img decoding=\"async\" alt=\"Modern applications on OpenShift, part 3: OpenShift as a development environment and OpenShift Pipelines\" src=\"\/wp-content\/uploads\/2020\/08\/33b932d3591b22dd00d82509b352d489.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>K\u00e9s\u0151bb a OpenShift Pipelines nev\u0171 eszk\u00f6zr\u0151l fogunk besz\u00e9lni, \u00e9s arr\u00f3l, hogyan haszn\u00e1lhat\u00f3 alternat\u00edvak\u00e9nt a l\u00e1ncolt build-ekhez.<\/p>\n<h4>Mi az OpenShift Pipelines<\/h4>\n<p>\nAz OpenShift Pipelines egy felh\u0151-centrikus CI\/CD rendszer, amely a folyamatos integr\u00e1ci\u00f3 \u00e9s kisz\u00e1ll\u00edt\u00e1s megszervez\u00e9s\u00e9re szolg\u00e1l, \u00e9s a Tekton haszn\u00e1lat\u00e1ra \u00e9p\u00fcl. A Tekton egy rugalmas, Kubernetes-alap\u00fa, ny\u00edlt forr\u00e1sk\u00f3d\u00fa CI\/CD keretrendszer, amely lehet\u0151v\u00e9 teszi a k\u00fcl\u00f6nb\u00f6z\u0151 platformokon (Kubernetes, serverless, virtu\u00e1lis g\u00e9pek stb.) t\u00f6rt\u00e9n\u0151 telep\u00edt\u00e9s automatiz\u00e1l\u00e1s\u00e1t a h\u00e1tt\u00e9rszint absztrah\u00e1l\u00e1s\u00e1val.<\/p>\n<p>E cikk meg\u00e9rt\u00e9s\u00e9hez bizonyos ismeretek sz\u00fcks\u00e9gesek a Pipelines-r\u00f3l, ez\u00e9rt javasoljuk, hogy el\u0151sz\u00f6r ismerkedjen meg a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openshift\/pipelines-tutorial\">hivatalos \u00fatmutat\u00f3val<\/a><\/noindex>.<\/p>\n<h4>A fejleszt\u00e9si k\u00f6rnyezet be\u00e1ll\u00edt\u00e1sa<\/h4>\n<p>\nA cikk p\u00e9ld\u00e1inak kipr\u00f3b\u00e1l\u00e1s\u00e1hoz el\u0151sz\u00f6r is k\u00e9sz\u00edtse el\u0151 a fejleszt\u00e9si k\u00f6rnyezetet:<\/p>\n<ol>\n<li>Telep\u00edtse \u00e9s konfigur\u00e1lja az OpenShift 4 klasztert. P\u00e9ld\u00e1inkhoz a CodeReady Containers (CRD) ker\u00fcl felhaszn\u00e1l\u00e1sra, amelynek telep\u00edt\u00e9si utas\u00edt\u00e1sait itt tal\u00e1lja: <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.redhat.com\/openshift\/install\/crc\/installer-provisioned\">itt<\/a><\/noindex>.<\/li>\n<li>Miut\u00e1n a klaszter k\u00e9szen \u00e1ll, telep\u00edtenie kell a Pipeline Operator-t. Ne agg\u00f3djon, ez k\u00f6nny\u0171, a telep\u00edt\u00e9si utas\u00edt\u00e1sok <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openshift\/pipelines-tutorial\/blob\/master\/install-operator.md\">itt<\/a><\/noindex>.<\/li>\n<li>Let\u00f6lt\u00e9s <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tektoncd\/cli#installing-tkn\">Tekton CLI<\/a><\/noindex> (tkn) <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tektoncd\/cli#installing-tkn\">itt<\/a><\/noindex>.<\/li>\n<li>Futtassa a create-react-app parancssori eszk\u00f6zt, hogy l\u00e9trehozzon egy alkalmaz\u00e1st, amelyet k\u00e9s\u0151bb telep\u00edt\u00fcnk (ez egy egyszer\u0171 alkalmaz\u00e1s) <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nodeshift-starters\/react-pipeline-example\">React<\/a><\/noindex>).<\/li>\n<li>(Opcion\u00e1lis) Kl\u00f3nozza a t\u00e1rol\u00f3t, hogy helyben futtathassa az alkalmaz\u00e1s p\u00e9ld\u00e1j\u00e1t az npm install parancs haszn\u00e1lat\u00e1val, majd az npm start-tal.<\/li>\n<\/ol>\n<p>\nAz alkalmaz\u00e1s t\u00e1rol\u00f3j\u00e1ban lesz egy k8s mappa is, amely a Kubernetes\/OpenShift YAML f\u00e1jlokat tartalmazza, amelyeket az alkalmaz\u00e1s telep\u00edt\u00e9s\u00e9re haszn\u00e1lunk. Itt lesznek Tasks, ClusterTasks, Resources \u00e9s Pipelines, amelyeket a k\u00f6vetkez\u0151 l\u00e9p\u00e9sekben hozunk l\u00e9tre. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nodeshift\/webapp-pipeline-tutorial\">t\u00e1rhelyen<\/a><\/noindex>.<\/p>\n<h4>Kezdj\u00fck<\/h4>\n<p>\nEl\u0151sz\u00f6r is l\u00e9tre kell hoznunk egy \u00faj projektet az OpenShift klaszterben. Ezt a projektet webapp-pipeline-nak nevezz\u00fck, \u00e9s a k\u00f6vetkez\u0151 parancsot haszn\u00e1ljuk:<\/p>\n<pre><code class=\"plaintext\">$ oc new-project webapp-pipeline\n<\/code><\/pre>\n<p>\nEzt k\u00f6vet\u0151en a projekt neve meg fog jelenni a k\u00f3dban, teh\u00e1t ha m\u00e1s n\u00e9ven szeretn\u00e9 elnevezni, ne felejtse el ennek megfelel\u0151en m\u00f3dos\u00edtani a p\u00e9ld\u00e1k k\u00f3dj\u00e1t. Ett\u0151l a pontt\u00f3l kezdve nem fentr\u0151l lefel\u00e9, hanem lentr\u0151l felfel\u00e9 haladunk: el\u0151sz\u00f6r l\u00e9trehozzuk a konvektor alkot\u00f3elemeit, \u00e9s csak ezut\u00e1n mag\u00e1t a konvektort.<\/p>\n<p>Teh\u00e1t, el\u0151sz\u00f6r is...<\/p>\n<h4>Feladatok Tasks<\/h4>\n<p>\nK\u00e9sz\u00edt\u00fcnk egy p\u00e1r feladatot (tasks), amelyek seg\u00edtenek az alkalmaz\u00e1sunk \u00fctemez\u00e9s\u00e9ben a pipeline keretein bel\u00fcl. Az els\u0151 feladat \u2013 apply_manifests_task \u2013 felel\u0151s a YAML f\u00e1jlok Kubernetes-er\u0151forr\u00e1sok (service, deployment \u00e9s route) alkalmaz\u00e1s\u00e1\u00e9rt, amelyek az alkalmaz\u00e1sunk k8s mapp\u00e1j\u00e1ban tal\u00e1lhat\u00f3k. A m\u00e1sodik feladat \u2013 update_deployment_task \u2013 a m\u00e1r telep\u00edtett k\u00e9pek friss\u00edt\u00e9s\u00e9\u00e9rt felel\u0151s azzal, amelyet a pipeline-unk k\u00e9sz\u00edt.<\/p>\n<p>Ne agg\u00f3dj, ha eddig nem teljesen vil\u00e1gos. Val\u00f3j\u00e1ban ezek a feladatok \u2013 valami hasonl\u00f3an, mint a seg\u00e9deszk\u00f6z\u00f6k \u2013, \u00e9s r\u00e9szletesebben is \u00e1tbesz\u00e9lj\u00fck \u0151ket egy kicsit k\u00e9s\u0151bb. Most csak hozzuk l\u00e9tre \u0151ket:<\/p>\n<pre><code class=\"plaintext\">$ oc create -f https:\/\/raw.githubusercontent.com\/nodeshift\/webapp-pipeline-tutorial\/master\/tasks\/update_deployment_task.yaml\n$ oc create -f https:\/\/raw.githubusercontent.com\/nodeshift\/webapp-pipeline-tutorial\/master\/tasks\/apply_manifests_task.yaml\n<\/code><\/pre>\n<p>\nEzut\u00e1n a tkn CLI parancs seg\u00edts\u00e9g\u00e9vel ellen\u0151rizz\u00fck, hogy a feladatok l\u00e9trej\u00f6ttek:<\/p>\n<pre><code class=\"plaintext\">$ tkn task ls\n\nNAME                AGE\napply-manifests     1 minute ago\nupdate-deployment   1 minute ago\n<\/code><\/pre>\n<p>\n<i>Megjegyz\u00e9s: ezek a feladatok a jelenlegi projekted lok\u00e1lis feladatai.<\/i><\/p>\n<h4>Cluster tasks<\/h4>\n<p>\nA cluster tasks l\u00e9nyeg\u00e9ben ugyanaz, mint a sima feladatok. Teh\u00e1t ez egy \u00fajra felhaszn\u00e1lhat\u00f3 l\u00e9p\u00e9sek gy\u0171jtem\u00e9nye, amelyeket valamilyen m\u00f3don kombin\u00e1lnak, amikor egy adott feladatot futtatnak. Az elt\u00e9r\u00e9s abban rejlik, hogy a cluster task b\u00e1rhol el\u00e9rhet\u0151 a klaszter keretein bel\u00fcl. A klaszter feladatok list\u00e1j\u00e1nak megtekint\u00e9s\u00e9hez, amelyeket automatikusan l\u00e9trehoznak a Pipeline Operator hozz\u00e1ad\u00e1sakor, ism\u00e9t a tkn CLI parancsot haszn\u00e1ljuk:<\/p>\n<pre><code class=\"plaintext\">$ tkn clustertask ls\n\nNAME                       AGE\nbuildah                    1 day ago\nbuildah-v0-10-0            1 day ago\njib-maven                  1 day ago\nkn                         1 day ago\nmaven                      1 day ago\nopenshift-client           1 day ago\nopenshift-client-v0-10-0   1 day ago\ns2i                        1 day ago\ns2i-go                     1 day ago\ns2i-go-v0-10-0             1 day ago\ns2i-java-11                1 day ago\ns2i-java-11-v0-10-0        1 day ago\ns2i-java-8                 1 day ago\ns2i-java-8-v0-10-0         1 day ago\ns2i-nodejs                 1 day ago\ns2i-nodejs-v0-10-0         1 day ago\ns2i-perl                   1 day ago\ns2i-perl-v0-10-0           1 day ago\ns2i-php                    1 day ago\ns2i-php-v0-10-0            1 day ago\ns2i-python-3               1 day ago\ns2i-python-3-v0-10-0       1 day ago\ns2i-ruby                   1 day ago\ns2i-ruby-v0-10-0           1 day ago\ns2i-v0-10-0                1 day ago\n<\/code><\/pre>\n<p>\nMost l\u00e9trehozunk k\u00e9t klaszterfeladatot. Az els\u0151 S2I k\u00e9pet fog gener\u00e1lni \u00e9s elk\u00fcldi azt az OpenShift bels\u0151 regisztr\u00e1tor\u00e1ba; a m\u00e1sodik a NGINX alap\u00fa k\u00e9p\u00fcnket fogja \u00e9p\u00edteni, az \u00e1ltalunk m\u00e1r \u00f6sszeszerelt alkalmaz\u00e1s tartalm\u00e1t haszn\u00e1lva.<\/p>\n<h4>K\u00e9p l\u00e9trehoz\u00e1sa \u00e9s elk\u00fcld\u00e9se<\/h4>\n<p>\nAz els\u0151 feladat l\u00e9trehoz\u00e1sakor megism\u00e9telj\u00fck, amit m\u00e1r a kapcsolt build-ekr\u0151l sz\u00f3l\u00f3 el\u0151z\u0151 cikkben csin\u00e1ltunk. Eml\u00e9keztessem, hogy az S2I (ubi8-s2i-web-app) k\u00e9pet haszn\u00e1ltuk az alkalmaz\u00e1sunk \u201e\u00f6ssze\u00e1ll\u00edt\u00e1s\u00e1ra\u201d, aminek eredm\u00e9nyek\u00e9nt egy k\u00e9p keletkezett, amely a ny\u00edlt OpenShift registry-ben t\u00e1rol\u00f3dott. Most ezt az S2I-webalkalmaz\u00e1s k\u00e9pet haszn\u00e1ljuk, hogy DockerFile-t k\u00e9sz\u00edts\u00fcnk az alkalmaz\u00e1sunkhoz, majd a Buildah-t fogjuk haszn\u00e1lni a t\u00e9nyleges build lebonyol\u00edt\u00e1s\u00e1hoz \u00e9s a kapott k\u00e9p felt\u00f6lt\u00e9s\u00e9hez az OpenShift bels\u0151 registry-j\u00e9be, mivel ez az, amit az OpenShift tesz, amikor a NodeShift seg\u00edts\u00e9g\u00e9vel telep\u00edti az alkalmaz\u00e1sokat.<\/p>\n<p>Megk\u00e9rdezi, honnan tudtuk mindezt? Az <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openshift\/pipelines-catalog\/blob\/master\/s2i-nodejs\/s2i-nodejs-task.yaml\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 official Node.js<\/a><\/noindex>, egyszer\u0171en \u00e1tm\u00e1soltuk \u00e9s nek\u00fcnk megfelel\u0151en \u00e1t\u00edrtuk.<\/p>\n<p>Teh\u00e1t most l\u00e9trehozzuk az s2i-web-app klaszterfeladatot:<\/p>\n<pre><code class=\"plaintext\">$ oc create -f https:\/\/raw.githubusercontent.com\/nodeshift\/webapp-pipeline-tutorial\/master\/clustertasks\/s2i-web-app-task.yaml\n<\/code><\/pre>\n<p>\nNem fogjuk r\u00e9szletesen elemezni, csak a OUTPUT_DIR param\u00e9terre fogunk f\u00f3kusz\u00e1lni:<\/p>\n<pre><code class=\"plaintext\">params:\n      - name: OUTPUT_DIR\n        description: A build kimeneti k\u00f6nyvt\u00e1r\u00e1nak helye\n        default: build\n<\/code><\/pre>\n<p>\nAlap\u00e9rtelmez\u00e9s szerint ez a param\u00e9ter a build \u00e9rt\u00e9k\u00e9t takarja, ahov\u00e1 a React a \u00f6ssze\u00e1ll\u00edtott tartalmat elhelyezi. M\u00e1s keretrendszerekben m\u00e1s \u00fatvonalakat haszn\u00e1lnak, p\u00e9ld\u00e1ul az Ember eset\u00e9n ez a dist. Az els\u0151 klaszterfeladatunk kimenete egy k\u00e9pet fog tartalmazni, amely mag\u00e1ban foglalja a l\u00e9trehozott HTML, JavaScript \u00e9s CSS f\u00e1jlokat.<\/p>\n<h4>K\u00e9peket \u00e1ll\u00edtunk \u00f6ssze NGINX alapjaira<\/h4>\n<p>\nA m\u00e1sodik klaszterfeladatunknak NGINX alap\u00fa k\u00e9pet kell l\u00e9trehoznia, az \u00e1ltalunk m\u00e1r l\u00e9trehozott alkalmaz\u00e1s tartalm\u00e1t felhaszn\u00e1lva. Val\u00f3j\u00e1ban ez a r\u00e9sze az el\u0151z\u0151 szakasznak, ahol a kapcsolt build-eket vizsg\u00e1ltuk.<\/p>\n<p>Ehhez \u2013 ahogyan az el\u0151bb is tett\u00fck \u2013 l\u00e9trehozunk egy webapp-build-runtime klaszterfeladatot:<\/p>\n<pre><code class=\"plaintext\">$ oc create -f https:\/\/raw.githubusercontent.com\/nodeshift\/webapp-pipeline-tutorial\/master\/clustertasks\/webapp-build-runtime-task.yaml\n<\/code><\/pre>\n<p>\nHa megn\u00e9zi a klaszterfeladatok k\u00f3dj\u00e1t, l\u00e1thatja, hogy ott nincs konkretiz\u00e1lva a Git t\u00e1rol\u00f3, amellyel dolgozunk, vagy a k\u00e9pek nevei, amelyeket l\u00e9trehozunk. Csak azt adjuk meg, hogy pontosan mit adunk \u00e1t a Git-nek, vagy egy k\u00e9pet, ahov\u00e1 ki kell adni a v\u00e9gs\u0151 k\u00e9pet. Ez\u00e9rt ezeket a klaszterfeladatokat m\u00e1s alkalmaz\u00e1sokkal is \u00fajra felhaszn\u00e1lhatjuk.<\/p>\n<p>\u00c9s itt eleg\u00e1nsan \u00e1tvezet\u00fcnk a k\u00f6vetkez\u0151 pontra\u2026<\/p>\n<h4>Forr\u00e1sok<\/h4>\n<p>\nTeh\u00e1t, mivel, ahogy m\u00e1r eml\u00edtett\u00fck, a klaszteres feladatoknak a lehet\u0151 leg\u00e1ltal\u00e1nosabbnak kell lenni\u00fck, l\u00e9tre kell hoznunk azokat az er\u0151forr\u00e1sokat, amelyeket bemenetk\u00e9nt (Git-t\u00e1rhely) \u00e9s kimenetk\u00e9nt (v\u00e9gs\u0151 k\u00e9pek) haszn\u00e1lunk. Az els\u0151 er\u0151forr\u00e1s, amire sz\u00fcks\u00e9g\u00fcnk van \u2013 ez a Git, ahol az alkalmaz\u00e1sunk tal\u00e1lhat\u00f3, valami ilyesmi:<\/p>\n<pre><code class=\"plaintext\"># This resource is the location of the git repo with the web application source\napiVersion: tekton.dev\/v1alpha1\nkind: PipelineResource\nmetadata:\n  name: web-application-repo\nspec:\n  type: git\n  params:\n    - name: url\n      value: https:\/\/github.com\/nodeshift-starters\/react-pipeline-example\n    - name: revision\n      value: master\n<\/code><\/pre>\n<p>\nItt a PipelineResource t\u00edpusa git. A params szekci\u00f3ban tal\u00e1lhat\u00f3 url kulcs megadja a konkr\u00e9t t\u00e1rol\u00f3t, \u00e9s be\u00e1ll\u00edtja a master \u00e1gat (ez opcion\u00e1lis, de a teljess\u00e9g kedv\u00e9\u00e9rt megadjuk).<\/p>\n<p>Most l\u00e9tre kell hoznunk egy er\u0151forr\u00e1st a k\u00e9p sz\u00e1m\u00e1ra, ahov\u00e1 a s2i-web-app feladat eredm\u00e9nyei ker\u00fclnek, ez \u00edgy m\u0171k\u00f6dik:<\/p>\n<pre><code class=\"plaintext\"># This resource is the result of running &quot;npm run build&quot;,  the resulting built files will be located in \/opt\/app-root\/output\napiVersion: tekton.dev\/v1alpha1\nkind: PipelineResource\nmetadata:\n  name: built-web-application-image\nspec:\n  type: image\n  params:\n    - name: url\n      value: image-registry.openshift-image-registry.svc:5000\/webapp-pipeline\/built-web-application:latest\n<\/code><\/pre>\n<p>\nItt a PipelineResource t\u00edpusa image, \u00e9s a url param\u00e9ter \u00e9rt\u00e9ke az OpenShift Image Registry bels\u0151 hely\u00e9re mutat, konkr\u00e9tan arra, amely a webapp-pipeline n\u00e9vt\u00e9rben tal\u00e1lhat\u00f3. Ne felejtsd el megv\u00e1ltoztatni ezt a param\u00e9tert, ha m\u00e1s n\u00e9vteret haszn\u00e1lsz.<\/p>\n<p>\u00c9s v\u00e9g\u00fcl, az utols\u00f3 er\u0151forr\u00e1s, amire sz\u00fcks\u00e9g\u00fcnk lesz, szint\u00e9n image t\u00edp\u00fas\u00fa lesz, \u00e9s ez a v\u00e9gs\u0151 NGINX k\u00e9p, amely k\u00e9s\u0151bb a telep\u00edt\u00e9s sor\u00e1n lesz haszn\u00e1lva:<\/p>\n<pre><code class=\"plaintext\"># This resource is the image that will be just the static html, css, js files being run with nginx\napiVersion: tekton.dev\/v1alpha1\nkind: PipelineResource\nmetadata:\n  name: runtime-web-application-image\nspec:\n  type: image\n  params:\n    - name: url\n      value: image-registry.openshift-image-registry.svc:5000\/webapp-pipeline\/runtime-web-application:latest\n<\/code><\/pre>\n<p>\nIsm\u00e9t figyelj\u00fcnk arra, hogy ez az er\u0151forr\u00e1s a k\u00e9pet az OpenShift bels\u0151 nyilv\u00e1ntart\u00e1s\u00e1ba menti a webapp-pipeline n\u00e9vt\u00e9rben.<\/p>\n<p>Ahhoz, hogy az \u00f6sszes ilyen er\u0151forr\u00e1st egyszerre l\u00e9trehozzuk, haszn\u00e1ljuk a create parancsot:<\/p>\n<pre><code class=\"plaintext\">$ oc create -f https:\/\/raw.githubusercontent.com\/nodeshift\/webapp-pipeline-tutorial\/master\/resources\/resource.yaml\n<\/code><\/pre>\n<p>\nAz er\u0151forr\u00e1sok l\u00e9trej\u00f6tt\u00e9nek ellen\u0151rz\u00e9s\u00e9hez haszn\u00e1lhatjuk a k\u00f6vetkez\u0151t:<\/p>\n<pre><code class=\"plaintext\">$ tkn resource ls\n<\/code><\/pre>\n<p><\/p>\n<h4>Pipeline<\/h4>\n<p>\nMost, hogy megvannak a sz\u00fcks\u00e9ges \u00f6sszetev\u0151k, \u00f6sszerakjuk a pipelinet, l\u00e9trehozva azt a k\u00f6vetkez\u0151 paranccsal:<\/p>\n<pre><code class=\"plaintext\">$ oc create -f https:\/\/raw.githubusercontent.com\/nodeshift\/webapp-pipeline-tutorial\/master\/pipelines\/build-and-deploy-react.yaml\n<\/code><\/pre>\n<p>\nDe miel\u0151tt futtatn\u00e1nk ezt a parancsot, n\u00e9zz\u00fck meg ezeket az \u00f6sszetev\u0151ket. Az els\u0151 \u2013 ez a n\u00e9v:<\/p>\n<pre><code class=\"plaintext\">apiVersion: tekton.dev\/v1alpha1\nkind: Pipeline\nmetadata:\n  name: build-and-deploy-react\n<\/code><\/pre>\n<p>\nEzut\u00e1n a spec szekci\u00f3ban l\u00e1tjuk az el\u0151z\u0151leg l\u00e9trehozott er\u0151forr\u00e1sok meghat\u00e1roz\u00e1s\u00e1t:<\/p>\n<pre><code class=\"plaintext\">spec:\n  resources:\n    - name: web-application-repo\n      type: git\n    - name: built-web-application-image\n      type: image\n    - name: runtime-web-application-image\n      type: image\n<\/code><\/pre>\n<p>\nEzut\u00e1n l\u00e9trehozzuk azokat a feladatokat, amelyeket a pipelinnak el kell v\u00e9geznie. El\u0151sz\u00f6r is, v\u00e9gre kell hajtania a m\u00e1r l\u00e9trehozott s2i-web-app feladatot:<\/p>\n<pre><code class=\"plaintext\">tasks:\n    - name: build-web-application\n      taskRef:\n        name: s2i-web-app\n        kind: ClusterTask\n<\/code><\/pre>\n<p>\nEz a feladat az bemeneti (gir-er\u0151forr\u00e1s) \u00e9s kimeneti (built-web-application-image er\u0151forr\u00e1s) param\u00e9tereket veszi \u00e1t. Szint\u00e9n \u00e1tadunk neki egy speci\u00e1lis param\u00e9tert, hogy ne ellen\u0151rizze a TLS-t, mivel \u00f6nal\u00e1\u00edrt tan\u00fas\u00edtv\u00e1nyokat haszn\u00e1lunk:<\/p>\n<pre><code class=\"plaintext\">resources:\n        inputs:\n          - name: source\n            resource: web-application-repo\n        outputs:\n          - name: image\n            resource: built-web-application-image\n      params:\n        - name: TLSVERIFY\n          value: \"false\"\n<\/code><\/pre>\n<p>\nA k\u00f6vetkez\u0151 feladat szinte ugyanaz, csak itt a m\u00e1r l\u00e9trehozott webapp-build-runtime klaszter feladatot h\u00edvjuk meg:<\/p>\n<pre><code class=\"plaintext\">n\u00e9v: build-runtime-image\n    feladatRef:\n      n\u00e9v: webapp-build-runtime\n      t\u00edpus: ClusterTask\n<\/code><\/pre>\n<p>\nAhogy az el\u0151z\u0151 feladatn\u00e1l, itt is \u00e1tadjuk az er\u0151forr\u00e1st, de most a built-web-application-image-t (el\u0151z\u0151 feladatunk kimenete). \u00c9s mint kimenet, ism\u00e9t egy k\u00e9pet adunk meg. Mivel ennek a feladatnak a kor\u00e1bbi ut\u00e1n kell v\u00e9grehajt\u00f3dnia, hozz\u00e1adjuk a runAfter mez\u0151t:<\/p>\n<pre><code class=\"plaintext\">resources:\n        inputs:\n          - name: image\n            resource: built-web-application-image\n        outputs:\n          - name: image\n            resource: runtime-web-application-image\n        params:\n        - name: TLSVERIFY\n          value: \"false\"\n      runAfter:\n        - build-web-application\n<\/code><\/pre>\n<p>\nA k\u00f6vetkez\u0151 k\u00e9t feladat a szerviz, az \u00fatvonal \u00e9s a telep\u00edt\u00e9s YAML f\u00e1jljainak alkalmaz\u00e1s\u00e1\u00e9rt felel, amelyek a webalkalmaz\u00e1sunk k8s mapp\u00e1j\u00e1ban tal\u00e1lhat\u00f3k, valamint azok friss\u00edt\u00e9s\u00e9\u00e9rt \u00faj k\u00e9pek l\u00e9trehoz\u00e1sakor. E k\u00e9t klaszter feladatot m\u00e1r a cikk elej\u00e9n meghat\u00e1roztuk.<\/p>\n<h4>A cs\u0151vezet\u00e9k ind\u00edt\u00e1sa<\/h4>\n<p>\nTeh\u00e1t, az \u00f6sszes r\u00e9sz\u00fcnk elk\u00e9sz\u00fclt, \u00e9s a k\u00f6vetkez\u0151 parancssal ind\u00edtjuk el:<\/p>\n<pre><code class=\"plaintext\">$ tkn pipeline start build-and-deploy-react\n<\/code><\/pre>\n<p>\nEbben a f\u00e1zisban a parancssort interakt\u00edv m\u00f3dban haszn\u00e1ljuk, \u00e9s v\u00e1laszolnunk kell minden k\u00e9rd\u00e9sre a megfelel\u0151 er\u0151forr\u00e1s kiv\u00e1laszt\u00e1s\u00e1val: a git er\u0151forr\u00e1shoz a web-application-repo-t v\u00e1lasztjuk, majd az els\u0151 k\u00e9p er\u0151forr\u00e1s\u00e1hoz \u2013 built-web-application-image, v\u00e9g\u00fcl a m\u00e1sodik k\u00e9p er\u0151forr\u00e1s\u00e1hoz \u2013 runtime-web-application-image:<\/p>\n<pre><code class=\"plaintext\">? Choose the git resource to use for web-application-repo: web-application-repo (https:\/\/github.com\/nodeshift-starters\/react-pipeline-example)\n? 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-\napplication:latest)\n? 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\ne-web-application:latest)\nPipelinerun started: build-and-deploy-react-run-4xwsr\n<\/code><\/pre>\n<p>\nMost ellen\u0151rizz\u00fck a cs\u0151vezet\u00e9k \u00e1llapot\u00e1t a k\u00f6vetkez\u0151 paranccsal:<\/p>\n<pre><code class=\"plaintext\">$ tkn pipeline logs -f\n<\/code><\/pre>\n<p>\nMiut\u00e1n a cs\u0151vezet\u00e9k elindult \u00e9s az alkalmaz\u00e1s telep\u00edtve lett, k\u00e9rdezz\u00fck le a publik\u00e1lt \u00fatvonalat a k\u00f6vetkez\u0151 paranccsal:<\/p>\n<pre><code class=\"plaintext\">$ oc get route react-pipeline-example --template='http:\/\/{{.spec.host}}'\n<\/code><\/pre>\n<p>\nA jobb vizu\u00e1lis \u00e9lm\u00e9ny \u00e9rdek\u00e9ben megtekinthetj\u00fck cs\u0151vezet\u00e9k\u00fcnket a webes konzol Developer m\u00f3dj\u00e1ban a szakaszban <b>Pipelines<\/b>, ahogy az a 1. \u00e1br\u00e1n l\u00e1that\u00f3.<\/p>\n<p><img decoding=\"async\" alt=\"Modern applications on OpenShift, part 3: OpenShift as a development environment and OpenShift Pipelines\" src=\"\/wp-content\/uploads\/2020\/08\/ede9b076414e389c2cd212adeda08956.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>1. \u00e1bra. Futtat\u00f3 cs\u0151vezet\u00e9kek \u00e1ttekint\u00e9se.<\/i><\/p>\n<p>A fut\u00f3 cs\u0151vezet\u00e9k r\u00e1kattint\u00e1sa tov\u00e1bbi inform\u00e1ci\u00f3kat jelen\u00edt meg, ahogy az a 2. \u00e1br\u00e1n l\u00e1that\u00f3.<\/p>\n<p><img decoding=\"async\" alt=\"Modern applications on OpenShift, part 3: OpenShift as a development environment and OpenShift Pipelines\" src=\"\/wp-content\/uploads\/2020\/08\/64581b1f6d8ff91aedd963019ef29be5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>2. \u00e1bra. A cs\u0151vezet\u00e9kr\u0151l tov\u00e1bbi inform\u00e1ci\u00f3k.<\/i><\/p>\n<p>A tov\u00e1bbi inform\u00e1ci\u00f3k ut\u00e1n megtekinthetj\u00fck a fut\u00f3 alkalmaz\u00e1sokat a k\u00f6vetkez\u0151 n\u00e9zetben: <b>Topology<\/b>, ahogy az a 3. \u00e1br\u00e1n l\u00e1that\u00f3.<\/p>\n<p><img decoding=\"async\" alt=\"Modern applications on OpenShift, part 3: OpenShift as a development environment and OpenShift Pipelines\" src=\"\/wp-content\/uploads\/2020\/08\/d23f723e14514ff60ecfddd8eb9bf752.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>3. \u00e1bra. Futtat\u00f3 pod.<\/i><\/p>\n<p>A jobb fels\u0151 sarokban l\u00e9v\u0151 k\u00f6rre kattintva megnyithatjuk az alkalmaz\u00e1sunkat, ahogy az a 4. \u00e1br\u00e1n l\u00e1that\u00f3.<\/p>\n<p><img decoding=\"async\" alt=\"Modern applications on OpenShift, part 3: OpenShift as a development environment and OpenShift Pipelines\" src=\"\/wp-content\/uploads\/2020\/08\/aa8e09d9fd9f33d5faffc7f661d84ca4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>4. \u00e1bra. Futtat\u00f3 React alkalmaz\u00e1s.<\/i><\/p>\n<h3>Z\u00e1r\u00e1s<\/h3>\n<p>\n\u00cdgy bemutattuk, hogyan ind\u00edthatunk el egy fejleszt\u0151i szervert az OpenShift-en az alkalmaz\u00e1sunkhoz, \u00e9s szinkroniz\u00e1lhatjuk a helyi f\u00e1jlrendszer\u00fcnkkel. Ezen k\u00edv\u00fcl megn\u00e9zt\u00fck, hogyan lehet szimul\u00e1lni egy chained-build sablont az OpenShift Pipelines seg\u00edts\u00e9g\u00e9vel. A cikkben tal\u00e1lhat\u00f3 p\u00e9ldak\u00f3dok el\u00e9rhet\u0151k <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nodeshift\/webapp-pipeline-tutorial\">itt<\/a><\/noindex>.<\/p>\n<h3>Tov\u00e1bbi forr\u00e1sok (EN)<\/h3>\n<p><\/p>\n<ul>\n<li>Ingyenes elektronikus k\u00f6nyv <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/books\/deploying-openshift\/\">\"Fejleszt\u00e9s az OpenShift-en: \u00datmutat\u00f3 a t\u00fcrelmetleneknek\"<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2018\/06\/11\/container-native-nodejs-istio-rhoar\/\">Kont\u00e9ner orient\u00e1lt Node.js alkalmaz\u00e1sok l\u00e9trehoz\u00e1sa a Red Hat OpenShift Application Runtimes \u00e9s Istio seg\u00edts\u00e9g\u00e9vel<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2018\/05\/15\/debug-your-node-js-application-on-openshift-with-chrome-devtools\/\">Node.js alkalmaz\u00e1sok hibakeres\u00e9se OpenShift-en a Chrome DevTools seg\u00edts\u00e9g\u00e9vel<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2018\/04\/16\/zero-express-openshift-3-commands\/\">H\u00e1rom parancs az Express gyors elsaj\u00e1t\u00edt\u00e1s\u00e1hoz OpenShift-en<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2018\/03\/12\/rhoar-nodejs-annoucement\/\">A Node.js nyilv\u00e1nos verzi\u00f3j\u00e1nak bejelent\u00e9se a Red Hat OpenShift Application Runtimes keret\u00e9ben<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2018\/12\/21\/monitoring-node-js-applications-on-openshift-with-prometheus\/\">Node.js alkalmaz\u00e1sok monitoroz\u00e1sa OpenShift-en a Prometheus seg\u00edts\u00e9g\u00e9vel<\/a><\/noindex><\/li>\n<li>Tov\u00e1bbi cikkek itt <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">OpenShift \u00e9s Kubernetes<\/a><\/noindex> a Red Hat weboldal\u00e1n<\/li>\n<\/ul>\n<h3>K\u00f6zelg\u0151 webin\u00e1riumok bejelent\u00e9sei<\/h3>\n<p>\nP\u00e9nteki webin\u00e1riumsorozatot ind\u00edtunk a Red Hat OpenShift Container Platform \u00e9s Kubernetes nat\u00edv haszn\u00e1lati \u00e9lm\u00e9ny\u00e9r\u0151l:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/events.redhat.com\/profile\/form\/index.cfm?PKformID=0x232599abcd&amp;sc_cid=7013a000002gwqQAAQ\"><b>Augusztus 28-\u00e1n, webin\u00e1rium a \"Kezel\u0151\": Kezel\u0151k az OpenShift-en \u00e9s Kubernetes-en<\/b><\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/events.redhat.com\/profile\/form\/index.cfm?PKformID=0x232694abcd&amp;sc_cid=7013a000002gwrdAAA\"><b>Szeptember 11-\u00e9n, DeploymentConfig vs Deployment - OpenShift-specifikus var\u00e1zslatok az alkalmaz\u00e1sok \u00e9p\u00edt\u00e9s\u00e9re \u00e9s telep\u00edt\u00e9s\u00e9re<\/b><\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/events.redhat.com\/profile\/form\/index.cfm?PKformID=0x232789abcd&amp;sc_cid=7013a000002gws7AAA\"><b>Szeptember 25-\u00e9n, Red Hat OpenShift \u00e9s Machine API<\/b><\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/events.redhat.com\/profile\/form\/index.cfm?PKformID=0x232884abcd&amp;sc_cid=7013a000002gwsqAAA\"><b>Okt\u00f3ber 9-\u00e9n, Hogyan kezelj\u00fck a hirtelen terhel\u00e9sn\u00f6veked\u00e9st<\/b><\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/events.redhat.com\/profile\/form\/index.cfm?PKformID=0x232979abcd&amp;sc_cid=7013a000002gwumAAA\"><b>Okt\u00f3ber 23-\u00e1n, Be\u00e9p\u00edtett Jenkins, Pipeline-builds, Tekton a Red Hat OpenShift Container Platform-ban<\/b><\/a><\/noindex><\/li>\n<\/ul>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/515988\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442 \u0432\u0441\u0435\u043c \u0432 \u044d\u0442\u043e\u043c \u0431\u043b\u043e\u0433\u0435! \u0421 \u0432\u0430\u043c\u0438 \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u043e\u0441\u0442 \u0438\u0437 \u0441\u0435\u0440\u0438\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u043a\u0430\u043a \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Red Hat OpenShift. \u0412 \u0434\u0432\u0443\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0445 \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b\u0438, \u043a\u0430\u043a \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0448\u0430\u0433\u043e\u0432 \u0438 \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 S2I \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c HTTP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, NGINX \u0441 \u043f\u043e\u043c\u043e\u0449\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0431\u043e\u0440\u043e\u043a chained [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":92049,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-92048","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442 \u0432\u0441\u0435\u043c \u0432 \u044d\u0442\u043e\u043c \u0431\u043b\u043e\u0433\u0435!\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/sovremennye-prilozheniya-na-openshift-chast-3-openshift-kak-sreda-razrabotki-i-konvejery-openshift-pipelines\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 OpenShift, \u0447\u0430\u0441\u0442\u044c 3: OpenShift \u043a\u0430\u043a \u0441\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044b OpenShift Pipelines | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442 \u0432\u0441\u0435\u043c \u0432 \u044d\u0442\u043e\u043c \u0431\u043b\u043e\u0433\u0435!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/sovremennye-prilozheniya-na-openshift-chast-3-openshift-kak-sreda-razrabotki-i-konvejery-openshift-pipelines\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-22T05:42:57+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-22T05:42:57+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Modern alkalmaz\u00e1sok az OpenShift-en, 3. r\u00e9sz: OpenShift mint fejleszt\u0151i k\u00f6rnyezet \u00e9s OpenShift Pipelines | ProHoster","description":"\u00dcdv\u00f6zlet mindenkinek a blogban!","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/sovremennye-prilozheniya-na-openshift-chast-3-openshift-kak-sreda-razrabotki-i-konvejery-openshift-pipelines","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 OpenShift, \u0447\u0430\u0441\u0442\u044c 3: OpenShift \u043a\u0430\u043a \u0441\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044b OpenShift Pipelines | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442 \u0432\u0441\u0435\u043c \u0432 \u044d\u0442\u043e\u043c \u0431\u043b\u043e\u0433\u0435!","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/sovremennye-prilozheniya-na-openshift-chast-3-openshift-kak-sreda-razrabotki-i-konvejery-openshift-pipelines","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-22T05:42:57+00:00","article:modified_time":"2020-08-22T05:42:57+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"92048","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:16:43","updated":"2022-10-02 02:53:55","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/92048","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=92048"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/92048\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/92049"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=92048"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=92048"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=92048"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}