ProHoster > blog > Utawala > Programu za kisasa kwenye OpenShift, sehemu ya 2: minyororo hujenga
Programu za kisasa kwenye OpenShift, sehemu ya 2: minyororo hujenga
Salaam wote! Hili ni chapisho la pili katika mfululizo wetu ambalo tunaonyesha jinsi ya kupeleka programu za kisasa za wavuti kwenye Red Hat OpenShift.
Katika chapisho lililopita, tuligusia kidogo uwezo wa picha mpya ya kijenzi ya S2I (chanzo-kwa-picha), ambayo imeundwa kwa ajili ya kujenga na kupeleka programu za kisasa za wavuti kwenye jukwaa la OpenShift. Kisha tulivutiwa na mada ya kupeleka programu haraka, na leo tutaangalia jinsi ya kutumia picha ya S2I kama picha ya wajenzi "safi" na kuichanganya na makusanyiko yanayohusiana ya OpenShift.
Safi picha ya wajenzi
Kama tulivyotaja katika Sehemu ya XNUMX, programu nyingi za kisasa za wavuti zina kinachojulikana kama hatua ya uundaji, ambayo kwa kawaida hufanya shughuli kama vile utafsiri wa msimbo, uunganishaji wa faili nyingi na upunguzaji. Faili zilizopatikana kutokana na shughuli hizi - na hii ni HTML tuli, JavaScript na CSS - zimehifadhiwa kwenye folda ya pato. Mahali pa folda hii kwa kawaida hutegemea zana za ujenzi zinazotumika, na kwa React hii itakuwa ./build folda (tutarejea kwa hili kwa undani zaidi hapa chini).
Chanzo-kwa-Picha (S2I)
Katika chapisho hili hatugusi mada "S2I ni nini na jinsi ya kuitumia" (unaweza kusoma zaidi juu ya hii. hapa), lakini ni muhimu kuwa wazi kuhusu hatua mbili katika mchakato huu ili kuelewa kile ambacho picha ya Kijenzi cha Programu ya Wavuti hufanya.
Awamu ya Bunge
Awamu ya kusanyiko ni sawa kwa asili na kile kinachotokea unapoendesha ujenzi wa kizimbani na kuishia na picha mpya ya Docker. Ipasavyo, hatua hii hufanyika wakati wa kuanza ujenzi kwenye jukwaa la OpenShift.
Kwa upande wa picha ya Kijenzi cha Programu ya Wavuti, ina jukumu la kusakinisha vitegemezi vya programu yako na kuendesha muundo. kukusanya hati. Kwa chaguo-msingi, picha ya mjenzi hutumia npm run build construct, lakini hii inaweza kubatilishwa kupitia utofauti wa mazingira wa NPM_BUILD.
Kama tulivyosema hapo awali, eneo la programu iliyokamilishwa, iliyojengwa tayari inategemea ni zana gani unayotumia. Kwa mfano, katika kesi ya React hii itakuwa ./build folda, na kwa programu za Angular itakuwa project_name/dist folda. Na, kama ilivyoonyeshwa tayari katika chapisho lililopita, eneo la saraka ya pato, ambayo imewekwa kwa msingi, inaweza kubatilishwa kupitia utofauti wa mazingira wa OUTPUT_DIR. Kweli, kwa kuwa eneo la folda ya pato hutofautiana kutoka kwa mfumo hadi mfumo, unakili tu matokeo yaliyotolewa kwenye folda ya kawaida kwenye picha, ambayo ni /opt/apt-root/output. Hii ni muhimu kwa kuelewa wengine wa makala hii, lakini kwa sasa hebu tuangalie haraka hatua inayofuata - awamu ya kukimbia.
awamu ya kukimbia
Hatua hii hutokea wakati simu ya docker inafanywa kwenye picha mpya iliyoundwa wakati wa hatua ya kusanyiko. Vile vile hufanyika wakati wa kupeleka kwenye jukwaa la OpenShift. Chaguomsingi endesha hati hutumia kutumikia moduli kutumikia maudhui tuli yaliyo katika saraka ya pato ya hapo juu.
Njia hii ni nzuri kwa kupeleka programu haraka, lakini kwa ujumla haipendekezi kutumikia yaliyomo tuli kwa njia hii. Naam, kwa kuwa kwa kweli tunatoa maudhui tuli pekee, hatuhitaji Node.js kusakinishwa ndani ya picha yetu - seva ya wavuti itatosha.
Kwa maneno mengine, wakati wa kukusanyika tunahitaji kitu kimoja, wakati wa kutekeleza tunahitaji kingine. Katika hali hii, ujenzi wa minyororo huja kwa manufaa.
Minyororo hujenga
Hiki ndicho wanachoandika minyororo hujenga katika hati za OpenShift:
"Makusanyiko mawili yanaweza kuunganishwa pamoja, huku moja ikitengeneza huluki iliyokusanywa na nyingine ikiandaa huluki hiyo katika picha tofauti inayotumika kuendesha huluki hiyo."
Kwa maneno mengine, tunaweza kutumia picha ya Kijenzi cha Programu ya Wavuti kuendesha muundo wetu, na kisha kutumia picha ya seva ya wavuti, NGINX sawa, kutumikia maudhui yetu.
Kwa hivyo, tunaweza kutumia picha ya Kijenzi cha Programu ya Wavuti kama kijenzi "safi" na wakati huo huo kuwa na picha ndogo ya wakati wa utekelezaji.
Sasa hebu tuangalie hili kwa mfano maalum.
Kwa mafunzo tutatumia programu rahisi ya React, iliyoundwa kwa kutumia zana ya amri ya kuunda-react-app.
Hebu tuangalie faili hii kwa undani zaidi, na tuanze na sehemu ya vigezo.
parameters:
- name: SOURCE_REPOSITORY_URL
description: The source URL for the application
displayName: Source URL
required: true
- name: SOURCE_REPOSITORY_REF
description: The branch name for the application
displayName: Source Branch
value: master
required: true
- name: SOURCE_REPOSITORY_DIR
description: The location within the source repo of the application
displayName: Source Directory
value: .
required: true
- name: OUTPUT_DIR
description: The location of the compiled static files from your web apps builder
displayName: Output Directory
value: build
required: false
Kila kitu hapa ni wazi, lakini inafaa kulipa kipaumbele kwa parameter ya OUTPUT_DIR. Kwa programu ya React katika mfano wetu, hakuna kitu cha kuwa na wasiwasi juu, kwani React hutumia dhamana ya chaguo-msingi kama folda ya pato, lakini kwa upande wa Angular au kitu kingine, parameta hii itahitaji kubadilishwa inapohitajika.
Tazama picha ya tatu na ya nne. Zote zinafafanuliwa kama picha za Docker, na unaweza kuona wazi zinatoka wapi.
Picha ya tatu ni kijenzi-programu-ya tovuti na inatoka kwa nodeshift/ubi8-s2i-web-app iliyotambulishwa 10.x kwenye Kitovu cha Docker.
Ya nne ni picha ya NGINX (toleo la 1.12) ikiwa na lebo ya hivi punde zaidi Kitovu cha Docker.
Sasa hebu tuangalie picha mbili za kwanza. Wote ni tupu mwanzoni na huundwa tu wakati wa awamu ya ujenzi. Picha ya kwanza, react-web-app-builder, itakuwa tokeo la hatua ya mkusanyiko ambayo itachanganya taswira ya wakati wa utekelezaji ya programu-tumizi na msimbo wetu wa chanzo. Ndiyo sababu tuliongeza "-mjenzi" kwa jina la picha hii.
Picha ya pili - react-web-app-runtime - itakuwa matokeo ya kuchanganya nginx-image-runtime na faili zingine kutoka kwa picha ya react-web-app-builder. Picha hii pia itatumika wakati wa kutumwa na itakuwa na seva ya wavuti tu na HTML tuli, JavaScript, CSS ya programu yetu.
Changanyikiwa? Sasa hebu tuangalie usanidi wa kujenga na itakuwa wazi kidogo.
Kiolezo chetu kina usanidi wa muundo mbili. Hii ndio ya kwanza, na ni kiwango kizuri:
Kama unavyoona, mstari ulio na lebo ya 1 unasema kwamba matokeo ya muundo huu yatawekwa katika picha ile ile ya react-web-programu-builder ambayo tuliona mapema kidogo katika sehemu ya ImageStreams.
Mstari ulioandikwa 2 unakuambia wapi pa kupata msimbo. Kwa upande wetu, hii ni hazina ya git, na eneo, ref na folda ya muktadha imedhamiriwa na vigezo ambavyo tayari tumeona hapo juu.
Mstari ulioandikwa 3 ndio ambao tayari tumeona katika sehemu ya vigezo. Inaongeza utofauti wa mazingira wa OUTPUT_DIR, ambao kwa mfano wetu ni kujenga.
Mstari ulioandikwa 4 unasema kutumia picha ya wakati wa utekelezaji ya programu-tumizi ya mjenzi, ambayo tayari tumeiona kwenye sehemu ya ImageStream.
Mstari ulio na lebo ya 5 unasema kwamba tunataka kutumia muundo wa nyongeza ikiwa picha ya S2I itaiunga mkono, na picha ya Web App Builder inafanya hivyo. Katika uzinduzi wa kwanza, baada ya hatua ya kusanyiko kukamilika, picha itahifadhi folda ya node_modules kwenye faili ya kumbukumbu. Kisha, kwa uendeshaji unaofuata, picha itafungua tu folda hii ili kupunguza muda wa kujenga.
Na hatimaye, mstari unaoitwa 6 ni vichochezi vichache tu vya kufanya ujenzi uendeshe kiotomatiki, bila uingiliaji wa mwongozo, wakati kitu kinabadilika.
Kwa ujumla huu ni usanidi mzuri wa kawaida wa kujenga.
Sasa hebu tuangalie usanidi wa pili wa kujenga. Inafanana sana na ile ya kwanza, lakini kuna tofauti moja muhimu.
Kwa hivyo usanidi wa pili wa ujenzi ni react-web-app-runtime, na huanza kwa kiwango kizuri.
Laini iliyoandikwa 1 sio mpya - inasema tu kwamba matokeo ya ujenzi yamewekwa kwenye picha ya react-web-app-runtime.
Mstari ulioandikwa 2, kama ilivyo katika usanidi uliopita, unaonyesha mahali pa kupata msimbo wa chanzo. Lakini ona kwamba hapa tunasema kwamba imechukuliwa kutoka kwenye picha. Zaidi ya hayo, kutoka kwa picha ambayo tumeunda hivi punde - kutoka kwa react-web-app-builder (iliyoonyeshwa kwenye mstari ulioandikwa 3). Faili tunazotaka kutumia ziko ndani ya picha na eneo lao hapo limewekwa kwenye mstari ulioandikwa 4, kwa upande wetu ni /opt/app-root/output/. Ikiwa unakumbuka, hapa ndipo faili zinazozalishwa kulingana na matokeo ya kuunda programu yetu huhifadhiwa.
Folda ya mwishilio iliyoainishwa katika neno na lebo ya 5 ni saraka ya sasa (hii ndiyo yote, kumbuka, inaendesha ndani ya kitu cha kichawi kinachoitwa OpenShift, na sio kwenye kompyuta yako ya karibu).
Sehemu ya mkakati - mstari unaoitwa 6 - pia ni sawa na usanidi wa kwanza wa kujenga. Wakati huu tu tutatumia nginx-image-runtime, ambayo tayari tumeona katika sehemu ya ImageStream.
Hatimaye, mstari ulioandikwa 7 ni sehemu ya vichochezi ambavyo vitawezesha muundo huu kila wakati picha ya react-web-app-builder inabadilika.
Vinginevyo, kiolezo hiki kina usanidi wa kawaida wa utumiaji, pamoja na vitu vinavyohusiana na huduma na njia, lakini hatutaelezea kwa undani zaidi. Tafadhali kumbuka kuwa picha ambayo itatumwa ni picha ya react-web-app-runtime.
Usambazaji wa Maombi
Kwa hivyo sasa kwa kuwa tumeangalia kiolezo, hebu tuone jinsi ya kuitumia kupeleka programu.
Tunaweza kutumia zana ya mteja ya OpenShift inayoitwa oc kupeleka kiolezo chetu:
Mchoro hapa ni sawa, isipokuwa kwa tofauti ya OUTPUT_DIR.
Nyongeza 2
Katika nakala hii tulitumia NGINX kama seva ya wavuti, lakini ni rahisi sana kuibadilisha na Apache, badilisha tu templeti kwenye faili. Picha ya NGINX juu ya Picha ya Apache.
Hitimisho
Katika sehemu ya kwanza ya mfululizo huu, tulionyesha jinsi ya kupeleka kwa haraka programu za kisasa za wavuti kwenye jukwaa la OpenShift. Leo tuliangalia picha ya Programu ya Wavuti hufanya nini na jinsi inavyoweza kuunganishwa na seva safi ya wavuti kama NGINX kwa kutumia miundo iliyofungwa ili kuunda muundo wa programu tayari kwa uzalishaji. Katika makala inayofuata na ya mwisho katika mfululizo huu, tutaonyesha jinsi ya kuendesha seva ya ukuzaji ya programu yako kwenye OpenShift na kuhakikisha usawazishaji wa faili za ndani na za mbali.
Sehemu ya 2: Jinsi ya kutumia picha mpya ya S2I iliyo na picha iliyopo ya seva ya HTTP, kama vile NGINX, kwa kutumia mikusanyiko inayohusishwa ya OpenShift kwa usambazaji wa uzalishaji;
Sehemu ya 3: jinsi ya kuendesha seva ya ukuzaji ya programu yako kwenye jukwaa la OpenShift na kuisawazisha na mfumo wa faili wa ndani.