{"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\/et\/blog\/administrirovanie\/sovremennye-prilozheniya-na-openshift-chast-3-openshift-kak-sreda-razrabotki-i-konvejery-openshift-pipelines","title":{"rendered":"Kaasaegsed rakendused OpenShiftis, osa 3: OpenShift arenduskeskkonnana ja OpenShift Pipelines konveierid","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere k\u00f5igile sellel blogis! Olete j\u00f5udnud kolmanda postituseni seerias, kus tutvustame, kuidas k\u00e4ivitada kaasaegseid veebirakendusi Red Hat OpenShiftis.<\/p>\n<p><img decoding=\"async\" alt=\"Kaasaegsed rakendused OpenShiftis, osa 3: OpenShift arenduskeskkonnana ja OpenShift Pipelines konveierid\" src=\"\/wp-content\/uploads\/2020\/08\/9c3337b13a3f045d36343308ce6154cc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKahel eelneval postitusel r\u00e4\u00e4kisime, kuidas k\u00e4ivitada kaasaegseid veebirakendusi vaid m\u00f5ne sammu jooksul ja kuidas kasutada uut S2I pilti koos valmis HTTP-serveri pildiga, n\u00e4iteks NGINX, kasutades seotud ehitusi (chained builds), et korraldada tootmispaigaldust.<\/p>\n<p>T\u00e4na n\u00e4itame, kuidas avada arendusserver oma rakenduse jaoks OpenShift platvormil ja s\u00fcnkroonida see lokaalse failis\u00fcsteemiga, samuti r\u00e4\u00e4gime sellest, mis on OpenShift Pipelines ja kuidas neid saab kasutada alternatiividena seotud ehitustele.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>OpenShift arendus keskkonnana<\/h3>\n<p><\/p>\n<h4>Arendust\u00f6\u00f6voog<\/h4>\n<p>\nKuidas juba mainitud <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/511954\/\">esimese postituse<\/a><\/noindex>, t\u00fc\u00fcpiline protsess kaasaegsete veebirakenduste arendamiseks on lihtsalt mingi \"arendusserver\", mis j\u00e4lgib muutusi lokaalfailides. Kui need esinevad, k\u00e4ivitatakse rakenduse ehitus ja seej\u00e4rel v\u00e4rskendatakse seda brauseris.<\/p>\n<p>Enamik kaasaegsetest raamistikest sisaldab sellist 'arendusserverit' vastavates k\u00e4surea t\u00f6\u00f6riistades.<\/p>\n<h4>Kohalik n\u00e4ide<\/h4>\n<p>\nAlustame vaatamist, kuidas see t\u00f6\u00f6tab kohalike rakenduste k\u00e4ivitamise korral. N\u00e4itena v\u00f5tame rakenduse <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lholmquist\/react-web-app\">React<\/a><\/noindex> eelmistest artiklitest, kuigi praktiliselt samad t\u00f6\u00f6voo kontseptsioonid kehtivad k\u00f5ikide teiste kaasaegsete raamistikute kohta.<br \/>\nNii et, et k\u00e4ivitada 'arendusserver' meie Reacti n\u00e4ites, sisestame j\u00e4rgmise k\u00e4su:<\/p>\n<pre><code class=\"plaintext\">$ npm run start\n<\/code><\/pre>\n<p>\nSiis n\u00e4eme terminaliaknas umbkaudu j\u00e4rgmist:<\/p>\n<p><img decoding=\"async\" alt=\"Kaasaegsed rakendused OpenShiftis, osa 3: OpenShift arenduskeskkonnana ja OpenShift Pipelines konveierid\" src=\"\/wp-content\/uploads\/2020\/08\/06f84ffb4c9a6a5868b8b47b8ad1d9ec.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ja meie rakendus avaneb brauseris vaikimisi:<\/p>\n<p><img decoding=\"async\" alt=\"Kaasaegsed rakendused OpenShiftis, osa 3: OpenShift arenduskeskkonnana ja OpenShift Pipelines konveierid\" src=\"\/wp-content\/uploads\/2020\/08\/72341bb0796352e7343bf31ceb8233cd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>N\u00fc\u00fcd, kui teeme faili muudatusi, peaks rakendus brauseris uuenduma.<\/p>\n<p>OK, kohaliku re\u017eiimi arendamine on selge, aga kuidas saavutada sama OpenShiftis?<\/p>\n<h4>Arendusserver OpenShiftis<\/h4>\n<p>\nKui m\u00e4letate, siis <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/513948\/\">eelnevas postituses<\/a><\/noindex>, k\u00e4sitlesime nii-\u00f6elda k\u00e4ivituse etappi (run phase) S2I pildil ja n\u00e4gime, et meie veebirakendust teenindab vaikimisi moodul serve.<\/p>\n<p>Kuid kui vaadata l\u00e4hemalt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nodeshift\/ubi8-s2i-web-app\/blob\/master\/s2i\/run#L10\">k\u00e4ivitusskript<\/a><\/noindex> selle n\u00e4ite p\u00f5hjal, siis seal on keskkonnamuutuja $NPM_RUN, mis v\u00f5imaldab teil k\u00e4ivitada ka oma k\u00e4su.<\/p>\n<p>N\u00e4iteks saame kasutada nodeshift moodulit, et meie rakendust juurutada:<\/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>M\u00e4rkus: \u00fclaltoodud n\u00e4ide on l\u00fchendatud, et illustreerida \u00fcldist ideed.<\/i><\/p>\n<p>Siia oleme lisanud meie juurutamisse keskkonnamuutuja NPM_RUN, mis annab t\u00e4itmisetapile teada, et see peaks k\u00e4ivitama k\u00e4su yarn start, mis alustab Reacti arendusserverit meie OpenShifti podis.<\/p>\n<p>Kui vaadata t\u00f6\u00f6tava podi logi, siis seal on umbes selline:<\/p>\n<p><img decoding=\"async\" alt=\"Kaasaegsed rakendused OpenShiftis, osa 3: OpenShift arenduskeskkonnana ja OpenShift Pipelines konveierid\" src=\"\/wp-content\/uploads\/2020\/08\/5b090223e08e32a3356608881068ce1a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Muidugi, see k\u00f5ik ei t\u00e4henda midagi, kuni me ei suuda s\u00fcnkroniseerida kohalikku koodi koodiga, mis samuti kontrollib muudatusi, kuid mida hoitakse eemalserveris.<\/p>\n<h4>Kaugekoodi ja kohaliku koodi s\u00fcnkroonimine<\/h4>\n<p>\nKohutavalt, nodeshift aitab s\u00fcnkroniseerimisel kergesti, ja muudatuste j\u00e4lgimiseks saab kasutada k\u00e4sku watch.<\/p>\n<p>Nii et p\u00e4rast seda, kui oleme k\u00e4ivitanud k\u00e4su arendusserveri juurutamiseks meie rakendusele, saame julgelt kasutada sellist k\u00e4sku:<\/p>\n<pre><code class=\"plaintext\">$ npx nodeshift watch\n<\/code><\/pre>\n<p>\nTulemuseks on \u00fchendamine varustatud pod'iga, mille me natuke varem l\u00f5ime, aktiveeritakse meie lokaalsete failide s\u00fcnkroniseerimine eemal oleva klastriga ning meie lokaalses s\u00fcsteemis j\u00e4lgitakse faile muudatuste osas.<\/p>\n<p>Seet\u00f5ttu, kui n\u00fc\u00fcd uuendada faili src\/App.js, reageerib s\u00fcsteem nendele muudatustele, kopeerib need eemal olevasse klastrisse ja k\u00e4ivitab arendusserveri, mis seej\u00e4rel v\u00e4rskendab meie rakendust brauseris.<\/p>\n<p>Kuna teema t\u00e4ielikud k\u00e4sud n\u00e4evad v\u00e4lja sellised:<\/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>\nK\u00e4sk watch on abstraktsioon k\u00e4su oc rsync kohal, rohkem teada selle toimimisest saab <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.okd.io\/latest\/dev_guide\/copy_files_to_container.html\">siit<\/a><\/noindex>.<\/p>\n<p>See oli n\u00e4ide Reacti jaoks, kuid t\u00e4pselt sama meetodit saab kasutada ka teiste raamistikega, lihtsalt m\u00e4\u00e4rake keskkonnamuutuja NPM_RUN \u00f5igesti.<br \/>\n\u2003<\/p>\n<h3>OpenShift Pipelines<\/h3>\n<p><img decoding=\"async\" alt=\"Kaasaegsed rakendused OpenShiftis, osa 3: OpenShift arenduskeskkonnana ja OpenShift Pipelines konveierid\" src=\"\/wp-content\/uploads\/2020\/08\/33b932d3591b22dd00d82509b352d489.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Edasi r\u00e4\u00e4gime sellisest t\u00f6\u00f6riistast nagu OpenShift Pipelines ja kuidas seda saab kasutada alternatiivina seotud ehitustele chained build.<\/p>\n<h4>Mis on OpenShift Pipelines<\/h4>\n<p>\nOpenShift Pipelines \u2013 pilvep\u00f5hine pideva integreerimise ja tarnimise (CI\/CD) s\u00fcsteem, mis on loodud konveierite korraldamiseks Tektoni abil. Tekton on paindlik Kubernetes'i kohalikke CI\/CD raamistik avatud koodiga, mis v\u00f5imaldab automatiseerida rakenduste juurutamist erinevates platvormides (Kubernetes, serverita, virtuaalmasinad jne) alumisele tasemele abstraktsiooni kaudu.<\/p>\n<p>Selle artikli m\u00f5istmiseks on vajalikud teatud teadmised Pipelines'i kohta, seet\u00f5ttu soovitame tungivalt k\u00f5igepealt tutvuda <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openshift\/pipelines-tutorial\">ametliku juhendiga<\/a><\/noindex>.<\/p>\n<h4>T\u00f6\u00f6ruumi seadistamine<\/h4>\n<p>\nK\u00e4esoleva artikli n\u00e4idistega katsetamiseks tuleb esmalt ette valmistada t\u00f6\u00f6ruum:<\/p>\n<ol>\n<li>Paigaldage ja seadistage OpenShift 4 klaster. Meie n\u00e4idetes kasutatakse selleks CodeReady Containers (CRD), mille paigaldusjuhised leiate <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.redhat.com\/openshift\/install\/crc\/installer-provisioned\">siit<\/a><\/noindex>.<\/li>\n<li>P\u00e4rast klastrite valmimist peate installima Pipeline Operatori. \u00c4rge muretsege, see on lihtne, paigaldusjuhised <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openshift\/pipelines-tutorial\/blob\/master\/install-operator.md\">siit<\/a><\/noindex>.<\/li>\n<li>Laadi <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\">siit<\/a><\/noindex>.<\/li>\n<li>K\u00e4itage create-react-app k\u00e4surea t\u00f6\u00f6riista, et luua rakendus, mida seej\u00e4rel juurutatakse (see on lihtne rakendus <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nodeshift-starters\/react-pipeline-example\">React<\/a><\/noindex>).<\/li>\n<li>(Valikuline) Kloonige hoidla, et k\u00e4ivitada rakenduse n\u00e4ide kohalikult k\u00e4suga npm install ja seej\u00e4rel npm start.<\/li>\n<\/ol>\n<p>\nRakenduse hoidlas on ka kaust k8s, kuhu paigutatakse Kubernetes\/OpenShift'i YAML-failid, mida rakenduse juurutamiseks kasutatakse. Seal on Tasks, ClusterTasks, Resources ja Pipelines, mille me selles loome. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nodeshift\/webapp-pipeline-tutorial\">repositoriis<\/a><\/noindex>.<\/p>\n<h4>Alustame<\/h4>\n<p>\nEsimene samm meie n\u00e4ite jaoks on uue projekti loomine OpenShift klastris. Nimetame selle projekti webapp-pipeline ja loome selle j\u00e4rgmise k\u00e4suga:<\/p>\n<pre><code class=\"plaintext\">$ oc new-project webapp-pipeline\n<\/code><\/pre>\n<p>\nEdasi, see projekti nimi ilmub koodis, seega, kui otsustate nimetada selle teistmoodi, \u00e4rge unustage vastavalt kohandada n\u00e4idiskoodi. Alates sellest kohast liikume alt \u00fcles: esmalt loome k\u00f5ik konveieri komponendid ja alles seej\u00e4rel konveieri ennast.<\/p>\n<p>Nii, esimene samm...<\/p>\n<h4>\u00dclesanded Tasks<\/h4>\n<p>\nLoome paar \u00fclesannet (tasks), mis aitavad seej\u00e4rel rakendust meie konveieris (pipeline) laiendada. Esimene \u00fclesanne \u2013 apply_manifests_task \u2013 vastutab YAML-failide rakendamise eest, mis sisaldavad Kubernetes-resursse (service, deployment ja route), mis asuvad meie rakenduse k8s kaustas. Teine \u00fclesanne \u2013 update_deployment_task \u2013 vastutab juba despleeritud pildi uuendamise eest, mis meie konveieris luuakse.<\/p>\n<p>\u00c4rge muretsege, kui see ei ole veel t\u00e4ielikult arusaadav. Tegelikult on need \u00fclesanded midagi nagu utiliidid, ja me k\u00e4sitleme neid p\u00f5hjalikumalt hiljem. Seniks loome lihtsalt need \u00fclesanded:<\/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>\nSeej\u00e4rel kontrollime tkn CLI k\u00e4suga, et \u00fclesanded on loodud:<\/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>M\u00e4rkus: need on kohalike \u00fclesannete \u00fclesanded teie praeguses projektis.<\/i><\/p>\n<h4>Klastrite \u00fclesanded Cluster tasks<\/h4>\n<p>\nKlastrite \u00fclesanded on sisuliselt samad mis lihtsalt \u00fclesanded. See on taaskasutatav sammude kogum, mida kombineeritakse teatud viisil konkreetse \u00fclesande k\u00e4ivitamisel. Erinevus seisneb selles, et klastrite \u00fclesanne on saadaval kogu klastri ulatuses. Klastrite \u00fclesannete loendi n\u00e4gemiseks, mis luuakse automaatselt Pipeline Operatori lisamisel, kasutame uuesti tkn CLI k\u00e4sku:<\/p>\n<pre><code class=\"plaintext\">$ tkn clustertask ls\n\nNAME                       AGE\nbuildah                    1 p\u00e4ev tagasi\nbuildah-v0-10-0            1 p\u00e4ev tagasi\njib-maven                  1 p\u00e4ev tagasi\nkn                         1 p\u00e4ev tagasi\nmaven                      1 p\u00e4ev tagasi\nopenshift-client           1 p\u00e4ev tagasi\nopenshift-client-v0-10-0   1 p\u00e4ev tagasi\ns2i                        1 p\u00e4ev tagasi\ns2i-go                     1 p\u00e4ev tagasi\ns2i-go-v0-10-0             1 p\u00e4ev tagasi\ns2i-java-11                1 p\u00e4ev tagasi\ns2i-java-11-v0-10-0        1 p\u00e4ev tagasi\ns2i-java-8                 1 p\u00e4ev tagasi\ns2i-java-8-v0-10-0         1 p\u00e4ev tagasi\ns2i-nodejs                 1 p\u00e4ev tagasi\ns2i-nodejs-v0-10-0         1 p\u00e4ev tagasi\ns2i-perl                   1 p\u00e4ev tagasi\ns2i-perl-v0-10-0           1 p\u00e4ev tagasi\ns2i-php                    1 p\u00e4ev tagasi\ns2i-php-v0-10-0            1 p\u00e4ev tagasi\ns2i-python-3               1 p\u00e4ev tagasi\ns2i-python-3-v0-10-0       1 p\u00e4ev tagasi\ns2i-ruby                   1 p\u00e4ev tagasi\ns2i-ruby-v0-10-0           1 p\u00e4ev tagasi\ns2i-v0-10-0                1 p\u00e4ev tagasi\n<\/code><\/pre>\n<p>\nN\u00fc\u00fcd loome kaks klastrite \u00fclesannet. Esimene genereerib S2I kujundi ja saadab selle OpenShifti siseregistrisse; teine kogub meie NGINX-i p\u00f5hjal kujundi, kasutades sisuna juba koostatud rakendust.<\/p>\n<h4>Loome ja saadame kujundi<\/h4>\n<p>\nEsimese \u00fclesande loomisel kordame samme, mida tegime eelnevas artiklis seotud kogumiste kohta. Tuletame meelde, et kasutasime S2I kujundit (ubi8-s2i-web-app), et \"koguda\" meie rakendust, ja l\u00f5puks saime kujundi, mis on salvestatud OpenShifti siseregistrisse. N\u00fc\u00fcd kasutame seda S2I veebirakenduse kujundit, et luua meie rakendusele DockerFile, ja seej\u00e4rel kasutame Buildah'is t\u00f5eliseks kogumiseks ja saadame saadud kujundi OpenShifti siseregistrisse, kuna just seda teeb OpenShift, kui kasutate NodeShiftiga oma rakenduste juurutamiseks.<\/p>\n<p>K\u00fcsite, kust me seda k\u00f5ike teame? <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>, me lihtsalt kopeerisime selle ja kohandasime enda jaoks.<\/p>\n<p>Nii, n\u00fc\u00fcd loome klastrite \u00fclesande s2i-web-app:<\/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>\nMe ei k\u00e4sitle seda s\u00fcvitsi, vaid peatume ainult OUTPUT_DIR parameetril:<\/p>\n<pre><code class=\"plaintext\">params:\n      - name: OUTPUT_DIR\n        description: Kogumise v\u00e4ljundikausta asukoht\n        default: build\n<\/code><\/pre>\n<p>\nVaikimisi on see parameeter seatud v\u00e4\u00e4rtusele build, kuhu React paigutab kogutud sisu. Teistes raamistikes on kasutusel erinevad teed, n\u00e4iteks Emberis on see dist. Meie esimese klastri\u00fclesande v\u00e4ljund kujutab endast pilti, mis sisaldab kogutud HTML, JavaScripti ja CSS-i.<\/p>\n<h4>Kogume NGINX-i baasil pilti<\/h4>\n<p>\nMis puudutab meie teist klastri\u00fclesannet, siis see peab koguma meile pilti NGINX-i p\u00f5hjal, kasutades juba kogutud rakenduse sisu. Sisuliselt on see see osa eelmise peat\u00fcki osas, kus k\u00e4sitlesime seotud kogumisi (chained builds).<\/p>\n<p>Selleks loome \u2013 t\u00e4pselt nagu veidi \u00fcle \u2013 klastri\u00fclesande webapp-build-runtime:<\/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>\nKui vaadata nende klaster\u00fclesannete koodi, siis on n\u00e4ha, et seal ei t\u00e4psustata Git'i hoidlat, millega me t\u00f6\u00f6tame, ega ka piltide nimesid, mida me loome. Me m\u00e4\u00e4ratleme vaid, mida me Git'ile edastame, v\u00f5i mingit pilti, kuhu peab tulemuseks saadud pilt viima. Just selle t\u00f5ttu on neid klaster\u00fclesandeid v\u00f5imalik taaskasutada ka teiste rakenduste puhul.<\/p>\n<p>Ja siit liigume elegantselt j\u00e4rgmisele punktile\u2026<\/p>\n<h4>Ressursid<\/h4>\n<p>\nKuna, nagu \u00e4sja \u00fctlesime, peavad klaster\u00fclesanded olema v\u00f5imalikult \u00fcldised, peame looma ressursid, mida kasutatakse sisendina (Git'i hoidla) ja v\u00e4ljundina (l\u00f5plikud pildid). Esimene ressurss, mida me vajame, on Git, kus asub meie rakendus, midagi sellist:<\/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>\nSiin on PipelineResource t\u00fc\u00fcbiks git. Parameetrite sektsiooni url v\u00f5ti osutab konkreetsele hoidla ja m\u00e4\u00e4rab master haru (see on valikuline, kuid kirjutame selle t\u00e4itmiseks).<\/p>\n<p>N\u00fc\u00fcd peame looma ressursi pildi jaoks, kuhu salvestatakse s2i-web-app \u00fclesande t\u00e4itmise tulemused, seda tehakse nii:<\/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>\nSiin on PipelineResource t\u00fc\u00fcp image ja url-i parameeter viitab sisemisele OpenShift Image Registry'le, t\u00e4psemalt sellele, mis asub namespace'is webapp-pipeline. \u00c4ra unusta seda parameetrit muuta, kui kasutad teistsugust namespace'i.<\/p>\n<p>Ja l\u00f5puks, viimane ressurss, mida me vajame, on samuti t\u00fc\u00fcbilt image ja see on l\u00f5plik NGINX pilt, mida kasutatakse hiljem juurutamisel:<\/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>\nJ\u00e4llegi, pane t\u00e4hele, et see ressurss salvestab pildi sisemisse OpenShift registrisse namespace'is webapp-pipeline.<\/p>\n<p>Kogu nende ressursside loomiseks kasutame k\u00e4sku create:<\/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>\nSaame veenduda, et ressursid on loodud j\u00e4rgmiselt:<\/p>\n<pre><code class=\"plaintext\">$ tkn resource ls\n<\/code><\/pre>\n<p><\/p>\n<h4>Pipelini konveier<\/h4>\n<p>\nN\u00fc\u00fcd, kui meil on k\u00f5ik vajalikud osad, koostame neist konveieri, luues selle j\u00e4rgmise k\u00e4suga:<\/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>\nKuid enne selle k\u00e4su k\u00e4ivitamist vaatame neid komponente l\u00e4hemalt. Esimene on nimi:<\/p>\n<pre><code class=\"plaintext\">apiVersion: tekton.dev\/v1alpha1\nkind: Pipeline\nmetadata:\n  name: build-and-deploy-react\n<\/code><\/pre>\n<p>\nSeej\u00e4rel n\u00e4eme spec jaotises viidet ressursidele, mille me eelnevalt l\u00f5ime:<\/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>\nSeej\u00e4rel loome \u00fclesanded, mida meie torujuhe peab t\u00e4itma. Esiteks peab ta t\u00e4itma juba loodud \u00fclesande s2i-web-app:<\/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>\nSee \u00fclesanne v\u00f5tab sisendid (gir-resurss) ja v\u00e4ljundid (resurss built-web-application-image). Samuti edastame sellele spetsiaalse parameetri, et see ei kinnitaks TLS-i, kuna kasutame isesigneeritud sertifikaate:<\/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>\nJ\u00e4rgmine \u00fclesanne on peaaegu sama, kuigi siin kutsutakse juba loodud klastrite \u00fclesannet webapp-build-runtime:<\/p>\n<pre><code class=\"plaintext\">name: build-runtime-image\n    taskRef:\n      name: webapp-build-runtime\n      kind: ClusterTask\n<\/code><\/pre>\n<p>\nNagu eelmise \u00fclesande puhul, edastame ressursi, kuid n\u00fc\u00fcd on see built-web-application-image (meie eelmise \u00fclesande v\u00e4ljund). Ja v\u00e4ljundina m\u00e4\u00e4rame j\u00e4lle pildi. Kuna see \u00fclesanne peaks toimuma p\u00e4rast eelmist, lisame v\u00e4lja runAfter:<\/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>\nJ\u00e4rgmised kaks \u00fclesannet vastutavad teenuse, marsruudi ja juurutamise YAML-failide rakendamise eest, mis asuvad meie veebirakenduse k8s kataloogis, ning ka selle eest, et uuendada seda juurutamist uute piltide loomisel. Need kaks klastrite \u00fclesannet m\u00e4\u00e4rasime juba artikli alguses.<\/p>\n<h4>Konveieri k\u00e4ivitamine<\/h4>\n<p>\nNii et k\u00f5ik meie toru osad on loodud ja k\u00e4ivitame selle j\u00e4rgmise k\u00e4suga:<\/p>\n<pre><code class=\"plaintext\">$ tkn pipeline start build-and-deploy-react\n<\/code><\/pre>\n<p>\nSelles etapis kasutatakse k\u00e4surea interaktiivset re\u017eiimi ja tuleb valida vastavad ressursid iga tema p\u00e4ringu vastusena: git-resursi puhul valime web-application-repo, seej\u00e4rel esimese pildi ressursi jaoks \u2013 built-web-application-image, ja l\u00f5puks teise pildi ressursi jaoks \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>\nN\u00fc\u00fcd kontrollime torujuhtme staatust j\u00e4rgmise k\u00e4suga:<\/p>\n<pre><code class=\"plaintext\">$ tkn pipeline logs -f\n<\/code><\/pre>\n<p>\nP\u00e4rast seda, kui torujuhe on k\u00e4ivitatud ja rakendus on juurutatud, saame avaldatud marsruudi j\u00e4rgmise k\u00e4suga:<\/p>\n<pre><code class=\"plaintext\">$ oc get route react-pipeline-example --template='http:\/\/{{.spec.host}}'\n<\/code><\/pre>\n<p>\nVisuaalsuse parandamiseks saab meie torujuhtme vaadata arendaja re\u017eiimis veebikonsolis jaotises <b>Torud<\/b>, nagu on n\u00e4idatud joonisel 1.<\/p>\n<p><img decoding=\"async\" alt=\"Kaasaegsed rakendused OpenShiftis, osa 3: OpenShift arenduskeskkonnana ja OpenShift Pipelines konveierid\" src=\"\/wp-content\/uploads\/2020\/08\/ede9b076414e389c2cd212adeda08956.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Joonis 1. K\u00e4ivitatud torujuhtmete \u00fclevaade.<\/i><\/p>\n<p>K\u00e4ivitatud torujuhtmele kl\u00f5psamine kuvab t\u00e4iendavat teavet, nagu on n\u00e4idatud joonisel 2.<\/p>\n<p><img decoding=\"async\" alt=\"Kaasaegsed rakendused OpenShiftis, osa 3: OpenShift arenduskeskkonnana ja OpenShift Pipelines konveierid\" src=\"\/wp-content\/uploads\/2020\/08\/64581b1f6d8ff91aedd963019ef29be5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Joonis 2. Torujuhtme t\u00e4iendavad andmed.<\/i><\/p>\n<p>P\u00e4rast t\u00e4iendavate andmete vaatamist saab k\u00e4ivitatud rakendusi vaadata vaates <b>Topoloogia<\/b>, nagu on n\u00e4idatud joonisel 3.<\/p>\n<p><img decoding=\"async\" alt=\"Kaasaegsed rakendused OpenShiftis, osa 3: OpenShift arenduskeskkonnana ja OpenShift Pipelines konveierid\" src=\"\/wp-content\/uploads\/2020\/08\/d23f723e14514ff60ecfddd8eb9bf752.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Joonis 3. K\u00e4ivitatud pod.<\/i><\/p>\n<p>\u00dclemises paremas nurgas asuvale ringikujulisele ikoonile kl\u00f5psamine avab meie rakenduse, nagu on n\u00e4idatud joonisel 4.<\/p>\n<p><img decoding=\"async\" alt=\"Kaasaegsed rakendused OpenShiftis, osa 3: OpenShift arenduskeskkonnana ja OpenShift Pipelines konveierid\" src=\"\/wp-content\/uploads\/2020\/08\/aa8e09d9fd9f33d5faffc7f661d84ca4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Joonis 4. K\u00e4ivitatud React rakendus.<\/i><\/p>\n<h3>Kokkuv\u00f5te<\/h3>\n<p>\nNii n\u00e4itasime, kuidas k\u00e4ivitada avatud rakenduste server OpenShiftis ja s\u00fcnkroniseerida see kohaliku failis\u00fcsteemiga. Samuti vaatasime, kuidas simuleerida chained-build \u0161ablooni OpenShift Pipelines'i abil. K\u00f5ik n\u00e4idiskoodid, mis on selles artiklis, on saadaval <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nodeshift\/webapp-pipeline-tutorial\">siit<\/a><\/noindex>.<\/p>\n<h3>T\u00e4iendavad ressursid (EN)<\/h3>\n<p><\/p>\n<ul>\n<li>Tasuta e-raamat <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/books\/deploying-openshift\/\">\u201eOpenShifti arendamine: juhend kannatamatutele\u201c<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2018\/06\/11\/container-native-nodejs-istio-rhoar\/\">Node.js konteinerikesksete rakenduste koostamine Red Hat OpenShift Application Runtimes ja Istio abil<\/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 rakenduste silumine OpenShiftil Chrome DevTools abil<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2018\/04\/16\/zero-express-openshift-3-commands\/\">Kolm k\u00e4sku, et alates nullist omandada Express OpenShiftil<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2018\/03\/12\/rhoar-nodejs-annoucement\/\">Node.js avaliku versiooni kuulutus Red Hat OpenShift Application Runtimes koosseisus<\/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 rakenduste j\u00e4lgimine OpenShiftil Prometheuse abil<\/a><\/noindex><\/li>\n<li>Teised artiklid <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">OpenShift ja Kubernetes<\/a><\/noindex> Red Hati veebisaidil<\/li>\n<\/ul>\n<h3>Eelseisvate veebinaride kuulutused<\/h3>\n<p>\nAlustame reede veebinaride seeriat, mis keskendub Red Hat OpenShift Container Platform ja Kubernetes'i kohalikele kasutuskogemustele:<\/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>28. august, veebinar \u201eImperator: Ooperatorid\u201c: Ooperatorid OpenShiftil ja Kubernetes'il<\/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>11. september, DeploymentConfig vs Deployment \u2013 OpenShift'ile spetsiifilised maagilised asjad rakenduste koostamiseks ja juurutamiseks<\/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>25. september, Red Hat OpenShift ja 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>9. oktoober, Kuidas taluda \u00e4kilist koormuse kasvu<\/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>23. oktoober, Integreeritud Jenkins, Pipeline-builds, Tekton Red Hat OpenShift Container Platform'is<\/b><\/a><\/noindex><\/li>\n<\/ul>\n<p>Allikas: <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 4.9.10 - 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! \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\" \/>\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\/et\/blog\/administrirovanie\/sovremennye-prilozheniya-na-openshift-chast-3-openshift-kak-sreda-razrabotki-i-konvejery-openshift-pipelines\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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! \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/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\udd47 Kaasaegsed rakendused OpenShiftis, osa 3: OpenShift arenduskeskkonnana ja OpenShift Pipelines torujuhtmed | ProHoster","description":"Tere k\u00f5igile sellel blogil! Meie k\u00e4es on kolmas postitus sarjast, kus n\u00e4itame, kuidas juurutada kaasaegseid veebirakendusi Red Hat OpenShiftis. Kahes varasemas postituses r\u00e4\u00e4kisime, kuidas juurutada kaasaegseid veebirakendusi vaid m\u00f5ne sammuga ja kuidas kasutada uut S2I pilti koos valmis HTTP-serveri pildiga, n\u00e4iteks NGINX, seotud kogude abil.","canonical_url":"https:\/\/prohoster.info\/et\/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":"et_EE","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! \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","og:url":"https:\/\/prohoster.info\/et\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/92048","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=92048"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/92048\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/92049"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=92048"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=92048"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=92048"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}