{"id":90874,"date":"2020-08-07T01:42:20","date_gmt":"2020-08-06T23:42:20","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/sovremennye-prilozheniya-na-openshift-chast-2-svyazannye-sborki-chained-builds"},"modified":"2020-08-07T01:42:20","modified_gmt":"2020-08-06T23:42:20","slug":"sovremennye-prilozheniya-na-openshift-chast-2-svyazannye-sborki-chained-builds","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/sovremennye-prilozheniya-na-openshift-chast-2-svyazannye-sborki-chained-builds","title":{"rendered":"Kaasaegsed rakendused OpenShiftis, 2. osa: seotud kogumid chained builds","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere k\u00f5igile! See on meie teise postituse seeria, kus n\u00e4itame, kuidas juurutada kaasaegseid veebirakendusi Red Hat OpenShiftis. <\/p>\n<p><img decoding=\"async\" alt=\"Kaasaegsed rakendused OpenShiftis, 2. osa: seotud kogumid chained builds\" src=\"\/wp-content\/uploads\/2020\/08\/b1f6ae855a69597c6e86c5198e4a628c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEelmisel postitusel puudutasime veidi uue S2I (source-to-image) builder-ima v\u00f5imalusi, mis on m\u00f5eldud kaasaegsete veebirakenduste kogumiseks ja juurutamiseks OpenShift platvormil. Sel korral keskendume kiire juurutamise teemale, kuid t\u00e4na vaatame, kuidas kasutada S2I-ima \u201apuhta\u2018 builder-ima ja \u00fchendada seda seotud OpenShifti kogumitega.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Puhas builder-ima<\/h3>\n<p>\nKuidas mainisime esimeses osas, on enamikul kaasaegsetest veebirakendustest nn kogumisetapp, kus tavaliselt viiakse l\u00e4bi sellised toimingud nagu koodi transpileerimine, mitme faili \u00fchendamine ja minifikatsioon. Neid toiminguid tulemusena saadud failid \u2013 need on staatiline HTML, JavaScript ja CSS \u2013 paigutatakse v\u00e4ljundkausta. Selle kausta asukoht s\u00f5ltub tavaliselt kasutatavatest kogumist\u00f6\u00f6riistadest ja Reacti puhul on see kaust .\/build (t\u00e4iendame seda teemat allpool).<\/p>\n<h4>Source-to-Image (S2I)<\/h4>\n<p>\nSelles postituses me ei k\u00e4sitle teemat \u201emis on S2I ja kuidas seda kasutada\u201c (selle kohta saab rohkem lugeda <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.okd.io\/latest\/architecture\/core_concepts\/builds_and_image_streams.html#source-build\">siin<\/a><\/noindex>), kuid on oluline selgelt m\u00f5ista selle protsessi kahte etappi, et m\u00f5ista, mida teeb Web App Builder'i ima.<\/p>\n<h4>Kogumise etapp (assemble phase)<\/h4>\n<p>\nKogumise etapp on oma olemuselt v\u00e4ga sarnane sellele, mis juhtub, kui k\u00e4ivitate docker build'i ja saate tulemuseks uue Docker-i ima. Seet\u00f5ttu toimub see etapp OpenShift platvormil kogumise k\u00e4ivitamisel.<\/p>\n<p>Web App Builder'i ima puhul vastutab teie rakenduse s\u00f5ltuvuste installimise ja kogumise k\u00e4ivitamise eest <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bucharest-gold\/centos7-s2i-web-app\/blob\/master\/s2i\/assemble#L47\">assemble script<\/a><\/noindex>. Vaikimisi kasutab builder-ima konstruktsiooni npm run build, kuid seda saab \u00fcletada keskkonnamuutujaga NPM_BUILD.<\/p>\n<p>Nagu varem mainitud, s\u00f5ltub valminud, juba kokku pandud rakenduse asukoht kasutatavadest t\u00f6\u00f6riistadest. N\u00e4iteks Reacti puhul on see kaust .\/build, Angulari rakenduste puhul aga kaust project_name\/dist. Ja nagu eelmises postituses n\u00e4idatud, saab v\u00e4ljundikausta asukohta, mis on vaikimisi m\u00e4\u00e4ratud kui build, \u00fcle kirjutada keskkonnamuutuja OUTPUT_DIR kaudu. Kuna v\u00e4ljundikausta asukoht erineb raamistikust raamistikku, kopeerite lihtsalt genereeritud v\u00e4ljundi standardkausta kujunduses, nimelt \/opt\/apt-root\/output. See on oluline edasise osa m\u00f5istmiseks, aga vahepeal vaatame kiirelt j\u00e4rgmist etappi \u2013 k\u00e4ivitamine (run phase).<\/p>\n<h4>K\u00e4ivitamise etapp (run phase)<\/h4>\n<p>\nSee etapp tekib, kui uue kujundi, mis on loodud assambleerimise etapis, kutsutakse v\u00e4lja docker run. See toimub ka avamisel OpenShift platvormil. Vaikimisi <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bucharest-gold\/centos7-s2i-web-app\/blob\/master\/s2i\/run\">k\u00e4ivitusskripti<\/a><\/noindex> kasutab <noindex><a rel=\"nofollow\" href=\"https:\/\/www.npmjs.com\/package\/serve\">serve moodul<\/a><\/noindex> staatilise sisu teenindamiseks, mis asub \u00fclaltoodud standardse v\u00e4ljundikausta.<\/p>\n<p>See meetod on hea rakenduste kiireks juurutamiseks, kuid tegelikult ei ole soovitatav staatilist sisu sellisel moel teenindada. Kuna me teenindame ainult staatilist sisu, ei ole meie kujunduses sisalduv Node.js vajalik \u2013 piisab veebiserverist.<\/p>\n<p>Teisis\u00f5nu, kogumisel on meil \u00fcks, k\u00e4ivitamisel aga teine. Sellises olukorras tulevad kasuks seotud kogumid (chained builds).<\/p>\n<h3>Seotud kogumid (chained builds)<\/h3>\n<p>\nSiin on, mida \u00f6eldakse <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.okd.io\/latest\/dev_guide\/builds\/advanced_build_operations.html#dev-guide-chaining-builds\">seotud kogumite (chained builds)<\/a><\/noindex> OpenShift dokumentatsioonis:<\/p>\n<blockquote><p>\u201eKaks kogumit saab omavahel siduda, kusjuures \u00fcks neist genereerib kompileeritud \u00fcksuse ja teine paigutab selle \u00fcksuse eraldi kujundusse, mida kasutatakse selle \u00fcksuse k\u00e4itamiseks.\u201c\n<\/p><\/blockquote>\n<p>\nTeisis\u00f5nu, me v\u00f5ime kasutada Web App Builder'i kujundit, et k\u00e4ivitada meie kogumine, ja seej\u00e4rel kasutada veebiserveri kujundit, n\u00e4iteks NGINX-i, et teenindada meie sisu.<\/p>\n<p>Seega saame kasutada Web App Builder'i kujundit kui \u201epuhast\u201c builder'it ja samal ajal omada v\u00e4ikese suurusega runtime kujundit.<\/p>\n<p>N\u00fc\u00fcd k\u00e4sitleme seda konkreetses n\u00e4ites.<\/p>\n<p>Treeninguks kasutame <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lholmquist\/react-web-app\">lihtsat React rakendust<\/a><\/noindex>, mis on loodud k\u00e4sureat\u00f6\u00f6riista create-react-app abil.<\/p>\n<p>Koguda k\u00f5ik kokku aitab meil <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lholmquist\/react-web-app\/blob\/master\/.openshiftio\/application.yaml\">OpenShift'i mallifail<\/a><\/noindex>.<\/p>\n<p>Vaatame seda faili l\u00e4hemalt ja alustame parameetrite jaotusest.<\/p>\n<pre><code class=\"plaintext\">parameetrid:\n  - nimi: SOURCE_REPOSITORY_URL\n    kirjeldus: Rakenduse allika URL\n    kuvamisnimi: Allika URL\n    n\u00f5utav: t\u00f5ene\n  - nimi: SOURCE_REPOSITORY_REF\n    kirjeldus: Rakenduse haru nimi\n    kuvamisnimi: Allika haru\n    v\u00e4\u00e4rtus: master\n    n\u00f5utav: t\u00f5ene\n  - nimi: SOURCE_REPOSITORY_DIR\n    kirjeldus: Rakenduse asukoht allika repositooriumis\n    kuvamisnimi: Allika kaust\n    v\u00e4\u00e4rtus: .\n    n\u00f5utav: t\u00f5ene\n  - nimi: OUTPUT_DIR\n    kirjeldus: Koht kompileeritud staatiliste failide jaoks teie veebirakenduse koosturi seest\n    kuvamisnimi: V\u00e4ljundi kaust\n    v\u00e4\u00e4rtus: build\n    n\u00f5utav: vale\n<\/code><\/pre>\n<p>\nSiin on k\u00f5ik \u00fcsna arusaadav, kuid v\u00e4\u00e4rtus OUTPUT_DIR parameetrit tuleks t\u00e4helepanelikult vaadata. Meie n\u00e4ites React-rakenduse puhul ei pea me muretsema, kuna React kasutab v\u00e4ljundikaustana vaikimisi v\u00e4\u00e4rtust, kuid Angulari v\u00f5i muu puhul tuleb see parameeter vastavalt muuta.<\/p>\n<p>N\u00fc\u00fcd vaatame ImageStream-ide jaotust.<\/p>\n<pre><code class=\"plaintext\">- apiVersioon: v1\n  liik: ImageStream\n  metadata:\n    nimi: react-web-app-builder  \/\/ 1 \n  spec: {}\n- apiVersioon: v1\n  liik: ImageStream\n  metadata:\n    nimi: react-web-app-runtime  \/\/ 2 \n  spec: {}\n- apiVersioon: v1\n  liik: ImageStream\n  metadata:\n    nimi: web-app-builder-runtime \/\/ 3\n  spec:\n    sildid:\n    - nimi: latest\n      from:\n        liik: DockerImage\n        nimi: nodeshift\/ubi8-s2i-web-app:10.x\n- apiVersioon: v1\n  liik: ImageStream\n  metadata:\n    nimi: nginx-image-runtime \/\/ 4\n  spec:\n    sildid:\n    - nimi: latest\n      from:\n        liik: DockerImage\n        nimi: 'centos\/nginx-112-centos7:latest'\n<\/code><\/pre>\n<p>\nVaadake kolmandat ja neljandat pilti. Need on m\u00f5lemad m\u00e4\u00e4ratletud kui Docker-pildid ja on selgelt n\u00e4ha, kust nad p\u00e4rinevad.<\/p>\n<p>Kolmas pilt on web-app-builder ja see p\u00e4rineb nodeshift\/ubi8-s2i-web-app koos sildiga 10.x <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/nodeshift\/ubi8-s2i-web-app\/\">Docker hub<\/a><\/noindex>.<\/p>\n<p>Neljandaks on NGINX (versioon 1.12) pilt koos sildiga latest <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/centos\/nginx-112-centos7\/\">Docker hub<\/a><\/noindex>.<\/p>\n<p>N\u00fc\u00fcd vaatame kahte esimest pilti. Need on m\u00f5lemad alguses t\u00fchjad ja luuakse ainult koostamisetapis (build phase). Esimene pilt \u2013 react-web-app-builder \u2013 saab olema koosseisu tulemuseks, mis \u00fchendab web-app-builder-runtime pildi ja meie l\u00e4htekoodi. Seet\u00f5ttu lisasime sellele pildile nime l\u00f5ppu \u201e-builder\u201d.<\/p>\n<p>Teine pilt \u2013 react-web-app-runtime \u2013 saab olema nginx-image-runtime ja m\u00f5ne faili \u00fchendamise tulemus react-web-app-builder pildist. See pilt kasutatakse samuti juurutamisel ja sisaldab ainult veebiserverit ning meie rakenduse staatilist HTML-i, JavaScripti ja CSS-i.<\/p>\n<p>J\u00e4rsk? Vaatame n\u00fc\u00fcd koostamiskonfiguratsioone ja see muutub veidi selgemaks.<\/p>\n<p>Meie mallel on kaks koostamiskonfiguratsiooni. Siin on neist esimene ja see on \u00fcsna tavaline:<\/p>\n<pre><code class=\"plaintext\">  apiVersion: v1\n  kind: BuildConfig\n  metadata:\n    name: react-web-app-builder\n  spec:\n    output:\n      to:\n        kind: ImageStreamTag\n        name: react-web-app-builder:latest \\\/\\\/ 1\n    source:   \\\/\\\/ 2 \n      git:\n        uri: ${SOURCE_REPOSITORY_URL}\n        ref: ${SOURCE_REPOSITORY_REF}\n      contextDir: ${SOURCE_REPOSITORY_DIR}\n      type: Git\n    strategy:\n      sourceStrategy:\n        env:\n          - name: OUTPUT_DIR \\\/\\\/ 3 \n            value: ${OUTPUT_DIR}\n        from:\n          kind: ImageStreamTag\n          name: web-app-builder-runtime:latest \\\/\\\/ 4\n        incremental: true \\\/\\\/ 5\n      type: Source\n    triggers: \\\/\\\/ 6\n    - github:\n        secret: ${GITHUB_WEBHOOK_SECRET}\n      type: GitHub\n    - type: ConfigChange\n    - imageChange: {}\n      type: ImageChange\n<\/code><\/pre>\n<p>\nKuidas n\u00e4eme, et 1. m\u00e4rgiga rida \u00fctleb, et selle kompileerimise tulemus paigutatakse just sellesse pildi react-web-app-builder, mida me varem n\u00e4gime ImageStreamide jagu.<\/p>\n<p>2. m\u00e4rgiga rida \u00fctleb, kust koodi v\u00f5tta. Meie puhul on see git-repositoorium ning asukoht, ref ja kontekstikaust on m\u00e4\u00e4ratletud parameetritega, mida oleme juba varem n\u00e4inud.<\/p>\n<p>3. m\u00e4rgiga rida \u2013 see on see, mida me oleme juba n\u00e4inud parameetrite sektsioonis. See lisab keskkonnamuutuja OUTPUT_DIR, mis meie n\u00e4ites on v\u00f5rdundus build.<br \/>\n4. m\u00e4rgiga rida \u00fctleb kasutada pilti web-app-builder-runtime, mida me oleme juba n\u00e4inud ImageStreamide sektsioonis.<\/p>\n<p>5. m\u00e4rgiga rida \u00fctleb, et me tahame kasutada inkrementaalset kompileerimist, kui S2I-pilt seda toetab, ja Web App Builder toetab. Esimese k\u00e4ivitamise ajal, p\u00e4rast kokkupanekufaasi l\u00f5petamist, salvestab pilt node_modules kausta arhivifaili. Seej\u00e4rel j\u00e4rgmisel k\u00e4ivitamisel dekompresseerib pilt lihtsalt selle kausta, et l\u00fchendada ehituskestvust.<\/p>\n<p>Ja l\u00f5puks, 6. m\u00e4rgiga rida \u2013 see on lihtsalt m\u00f5ned triggarid, et kompileerimist saaks automaatselt alustada, ilma k\u00e4sitsi sekkumiseta, kui midagi muutub.<\/p>\n<p>\u00dches\u00f5naga, see on \u00fcsna tavaline kompileerimise konfiguratsioon.<\/p>\n<p>N\u00fc\u00fcd vaatame teist kompileerimiskonfiguratsiooni. See on v\u00e4ga sarnane esimesele, kuid on \u00fcks oluline erinevus.<\/p>\n<pre><code class=\"plaintext\">apiVersion: v1\n  kind: BuildConfig\n  metadata:\n    name: react-web-app-runtime\n  spec:\n    output:\n      to:\n        kind: ImageStreamTag\n        name: react-web-app-runtime:latest \\\/\\\/ 1\n    source: \\\/\\\/ 2\n      type: Image\n      images:                              \n        - from:\n            kind: ImageStreamTag\n            name: react-web-app-builder:latest \\\/\\\/ 3\n          paths:\n            - sourcePath: \\\/opt\\\/app-root\\\/output\\\/.\n              destinationDir: . \\\/\\\/ 5\n             \n    strategy: \\\/\\\/ 6\n      sourceStrategy:\n        from:\n          kind: ImageStreamTag\n          name: nginx-image-runtime:latest\n        incremental: true\n      type: Source\n    triggers:\n    - github:\n        secret: ${GITHUB_WEBHOOK_SECRET}\n      type: GitHub\n    - type: ConfigChange\n    - type: ImageChange\n      imageChange: {}\n    - type: ImageChange\n      imageChange:\n        from:\n          kind: ImageStreamTag\n          name: react-web-app-builder:latest \\\/\\\/ 7\n<\/code><\/pre>\n<p>\nNii et, teine konfiguratsioon on react-web-app-runtime ja see algab \u00fcsna tavap\u00e4raselt.<\/p>\n<p>M\u00e4rgi 1 real pole midagi uut \u2013 see \u00fctleb lihtsalt, et koostamise tulemus pannakse react-web-app-runtime pildile.<\/p>\n<p>M\u00e4rgi 2 real, nagu ka eelnevas konfiguratsioonis, n\u00e4idatakse, kust l\u00e4htekood v\u00f5tta. Kuid p\u00f6\u00f6rake t\u00e4helepanu, et siin \u00f6eldakse, et see v\u00f5etakse pildist. Ja see pilt, millest me just r\u00e4\u00e4kisime, on react-web-app-builder (mille oleme n\u00e4idanud m\u00e4rgi 3 real). Failid, mida soovime kasutada, asuvad pildi sees ja nende asukoht seal m\u00e4\u00e4ratakse m\u00e4rgi 4 real, meie puhul on see \\\/opt\\\/app-root\\\/output\\\/. Kui m\u00e4letate, just sinna pannakse failid, mis genereeritakse meie rakenduse koostamisprotsessi tulemusena.<\/p>\n<p>M\u00e4rgi 5 real m\u00e4\u00e4ratud sihtkaust on lihtsalt praegune kataloog (k\u00f5ik see, meenutame, t\u00f6\u00f6tab mingisugustes maagilistes asjades nimega OpenShift, mitte teie kohalikel arvutitel).<\/p>\n<p>Jaotises strategy \u2013 m\u00e4rgi 6 real \u2013 on samuti sarnane esimesele koostamise konfiguratsioonile. Ainult seekord kavatseme kasutada nginx-image-runtime'i, mida oleme juba n\u00e4inud ImageStreami jaotises.<\/p>\n<p>L\u00f5puks, m\u00e4rgi 7 real on see triggereid sektsioon, mis aktiveerib selle koostamise iga kord, kui react-web-app-builder pilt muutub.<\/p>\n<p>Muus osas sisaldab see mall \u00fcsna tavap\u00e4rast juurutamise konfiguratsiooni ning ka asju, mis puudutavad teenuseid ja marsruute, kuid me ei s\u00fcvene sellesse. Pange t\u00e4hele, et juurutatav pilt on react-web-app-runtime.<\/p>\n<h3>Rakenduse juurutamine<\/h3>\n<p>\nNii et vaatame mallile peale, kuidas seda rakenduse juurutamiseks kasutada.<\/p>\n<p>Saame kasutada OpenShifti kliendit\u00f6\u00f6riista nimega oc, et juurutada meie malli:<\/p>\n<pre><code class=\"plaintext\">$ find . | grep openshiftio | grep application | xargs -n 1 oc apply -f\n\n$ oc new-app --template react-web-app -p SOURCE_REPOSITORY_URL=https:\\\/\\\/github.com\\\/lholmquist\\\/react-web-app\n<\/code><\/pre>\n<p>\nEespool oleval ekraanipildil on esimene k\u00e4sk tahtlikult inseneritehniline viis mallide leidmiseks.\\\/openshiftio\\\/application.yaml.<\/p>\n<p>Teine k\u00e4sk loob lihtsalt uue rakenduse selle malli alusel.<\/p>\n<p>P\u00e4rast nende k\u00e4skude t\u00f6\u00f6tlemist n\u00e4eme, et meil on kaks koostamist:<\/p>\n<p><img decoding=\"async\" alt=\"Kaasaegsed rakendused OpenShiftis, 2. osa: seotud kogumid chained builds\" src=\"\/wp-content\/uploads\/2020\/08\/c6b2b2fcadfcd3e5a8a2adb4eff69bf2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ja tagasi \u00fclevaate ekraanile n\u00e4eme, et pod on k\u00e4ivitatud:<\/p>\n<p><img decoding=\"async\" alt=\"Kaasaegsed rakendused OpenShiftis, 2. osa: seotud kogumid chained builds\" src=\"\/wp-content\/uploads\/2020\/08\/983fab3029d222555dc13790d4a3e70f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Klikkige lingil ja j\u00f5uame meie rakendusse, mis on vaikimisi React Appi leht:<\/p>\n<p><img decoding=\"async\" alt=\"Kaasaegsed rakendused OpenShiftis, 2. osa: seotud kogumid chained builds\" src=\"\/wp-content\/uploads\/2020\/08\/d5b658875e0e865bf456955aaac15464.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Lisa 1<\/h3>\n<p>\nAngulari armastajatele on meil samuti <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lholmquist\/angular-web-app\">rakenduse n\u00e4idis<\/a><\/noindex>.<\/p>\n<p>Mall siin on sama, v\u00e4lja arvatud muutuja OUTPUT_DIR.<\/p>\n<h3>Lisaosa 2<\/h3>\n<p>\nSelles artiklis kasutasime veebiserverina NGINX-i, kuid selle saab \u00fcsna lihtsalt asendada Apache'iga, kui lihtsalt muudate mallifailis. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lholmquist\/react-web-app\/blob\/master\/.openshiftio\/application.yaml#L66\">NGINX-i pilt<\/a><\/noindex> . Tundub, et <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/centos\/httpd-24-centos7\/\">Apache'i pilt<\/a><\/noindex>.<\/p>\n<h3>Kokkuv\u00f5te<\/h3>\n<p>\nSelle seeria esimeses osas n\u00e4itasime, kuidas kiiresti k\u00e4ivitada kaasaegseid veebirakendusi OpenShift'i platvormil. T\u00e4na vaatleme, mis teeb Web App'i pildi ja kuidas seda saab kombineerida puhta veebiserveri, n\u00e4iteks NGINX-iga, kasutades seotud kogumisi (chained build), et korraldada tootmisoludele sobilikumat rakenduste kogumist. Seeria j\u00e4rgmises ja viimases artiklis n\u00e4itame, kuidas k\u00e4ivitada OpenShift'is arendusserver oma rakendusele ja tagada lokaalsete ja kaugfailide s\u00fcnkroniseerimine.<\/p>\n<h3>Selle seeria artiklite sisu<\/h3>\n<p><\/p>\n<ul>\n<li>Osa 1: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/511954\/\">kuidas k\u00e4itada kaasaegseid veebirakendusi vaid m\u00f5ne sammuga<\/a><\/noindex>;<\/li>\n<li>Osa 2: kuidas kasutada uut S2I pilti koos olemasoleva HTTP-serveri pildiga, n\u00e4iteks NGINX-iga, kasutades OpenShift'i seotud kogumisi, et korraldada tootmispaigaldust;<\/li>\n<li>Osa 3: kuidas k\u00e4ivitada OpenShift'i platvormil arendusserver oma rakendusele ja s\u00fcnkroniseerida see kohaliku failis\u00fcsteemiga.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Lisainfo<\/h3>\n<p><\/p>\n<ul>\n<li>Tasuta e-raamat <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/books\/deploying-openshift\">OpenShift'i paigaldamine<\/a><\/noindex>.<\/li>\n<li>Teave <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">OpenShift ja Kubernetes<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/513948\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421 \u0432\u0430\u043c\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0441\u0442 \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \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 \u043d\u0430 Red Hat OpenShift \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0441\u043b\u0435\u0433\u043a\u0430 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u043e\u0432\u043e\u0433\u043e builder-\u043e\u0431\u0440\u0430\u0437\u0430 S2I (source-to-image), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 OpenShift. \u0422\u043e\u0433\u0434\u0430 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0430 \u0442\u0435\u043c\u0430 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":90875,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-90874","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.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421 \u0432\u0430\u043c\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0441\u0442 \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \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 \u043d\u0430 Red Hat OpenShift \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.\" \/>\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-2-svyazannye-sborki-chained-builds\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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 2: \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 chained builds | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421 \u0432\u0430\u043c\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0441\u0442 \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \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 \u043d\u0430 Red Hat OpenShift \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/sovremennye-prilozheniya-na-openshift-chast-2-svyazannye-sborki-chained-builds\" \/>\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-06T23:42:20+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-06T23:42:20+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\udd47Kaasaegsed rakendused OpenShift'il, osa 2: seotud kogumid chained builds | ProHoster","description":"Tere k\u00f5igile! See on meie teise postituse seeria, kus n\u00e4itame, kuidas juurutada kaasaegseid veebirakendusi Red Hat OpenShiftis.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/sovremennye-prilozheniya-na-openshift-chast-2-svyazannye-sborki-chained-builds","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 2: \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 chained builds | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421 \u0432\u0430\u043c\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0441\u0442 \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \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 \u043d\u0430 Red Hat OpenShift \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/sovremennye-prilozheniya-na-openshift-chast-2-svyazannye-sborki-chained-builds","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-06T23:42:20+00:00","article:modified_time":"2020-08-06T23:42:20+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"90874","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:40:03","updated":"2022-10-04 00:42:31","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/90874","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=90874"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/90874\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/90875"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=90874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=90874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=90874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}