Molweni nonke kule bhlog! Esi sisithuba sesithathu kuthotho apho sibonisa indlela yokufaka usetyenziso lwewebhu lwangoku kwi-Red Hat OpenShift.
Kwizithuba ezimbini ezidlulileyo, sibonise indlela yokuhambisa izicelo zewebhu zanamhlanje kumanyathelo ambalwa kunye nendlela yokusebenzisa umfanekiso omtsha we-S2I kunye nomfanekiso weseva ye-HTTP engaphandle kwe-shelf, efana ne-NGINX, usebenzisa i-chain builds ukuze uququzelele ukuthunyelwa kwemveliso. .
Namhlanje siza kubonisa indlela yokuqhuba iseva yophuhliso lwesicelo sakho kwiqonga le-OpenShift kwaye lingqamanise kunye nenkqubo yefayile yendawo, kwaye sithethe malunga nokuba zeziphi iiPipelines ze-OpenShift kunye nendlela enokusetyenziswa ngayo njengenye indlela kwiindibano ezidityanisiweyo.
I-OpenShift njengendawo yophuhliso
Ukuqhutywa komsebenzi wophuhliso
Njengoko sele kukhankanyiwe kwi
Kwiinkqubo ezininzi zanamhlanje, "umncedisi wophuhliso" onjalo wakhiwe kwizixhobo zomgca womyalelo ohambelanayo.
Umzekelo wasekuhlaleni
Okokuqala, makhe sibone ukuba oku kusebenza njani xa usebenzisa izicelo ekuhlaleni. Masithathe isicelo njengomzekelo
Ke, ukuqala "umncedisi we-dev" kumzekelo wethu we-React, siya kufaka lo myalelo ulandelayo:
$ npm run start
Emva koko kwi-terminal window siza kubona into enje:
Kwaye isicelo sethu siya kuvula kwisikhangeli esingagqibekanga:
Ngoku, ukuba senza utshintsho kwifayile, isicelo kufuneka sihlaziye kwisikhangeli.
Kulungile, yonke into icacile ngophuhliso kwimowudi yendawo, kodwa ungafezekisa njani okufanayo kwi-OpenShift?
Iseva yophuhliso kwi-OpenShift
Ukuba uyakhumbula, kwi
Nangona kunjalo, ukuba ujonga ngakumbi
Umzekelo, sinokusebenzisa imodyuli ye-nodeshift ukubeka isicelo sethu:
$ npx nodeshift --deploy.env NPM_RUN="yarn start" --dockerImage=nodeshift/ubi8-s2i-web-app
Qaphela: Lo mzekelo ungasentla ufinyeziwe ukuze ubonise ingcamango jikelele.
Apha songeze i-NPM_RUN eguquguqukayo yemo engqongileyo ekuhanjisweni kwethu, exelela ixesha lokubaleka ukuqhuba umyalelo wokuqalisa umsonto, oqala iReact server yophuhliso ngaphakathi kwe-OpenShift pod yethu.
Ukuba ujonga ilog yepod ebalekayo, iya kujongeka ngolu hlobo:
Ngokuqinisekileyo, konke oku akuyi kuba nto de sikwazi ukuvumelanisa ikhowudi yendawo kunye nekhowudi, ekwabekwe esweni utshintsho, kodwa ihlala kwiseva ekude.
Ingqamanisa ikhowudi ekude neyendawo
Ngethamsanqa, i-nodeshift inokunceda ngokulula ngongqamaniso, kwaye ungasebenzisa umyalelo wokubukela ukulandelela utshintsho.
Ke emva kokuba siqhube umyalelo wokuhambisa iseva yophuhliso kwisicelo sethu, sinokusebenzisa ngokukhuselekileyo lo myalelo ulandelayo:
$ npx nodeshift watch
Ngenxa yoko, uxhulumaniso luya kwenziwa kwi-pod eqhubayo esiyidale ngaphambili, ulungelelwaniso lweefayile zethu zendawo kunye neqela elikude liya kuqaliswa, kwaye iifayile kwinkqubo yethu yendawo ziya kuqalisa ukubeka esweni utshintsho.
Ngoko ke, ukuba ngoku sihlaziya ifayile ye-src/App.js, inkqubo iya kusabela kolu tshintsho, ikopishe kwiqela elikude kwaye iqalise iseva yophuhliso, eya kuthi emva koko ihlaziye isicelo sethu kwisiphequluli.
Ukugqibezela umfanekiso, masibonise ukuba ijongeka njani yonke le miyalelo:
$ npx nodeshift --strictSSL=false --dockerImage=nodeshift/ubi8-s2i-web-app --build.env YARN_ENABLED=true --expose --deploy.env NPM_RUN="yarn start" --deploy.port 3000
$ npx nodeshift watch --strictSSL=false
Umyalelo wokubukela sisithintelo phezulu komyalelo we-oc rsync, unokufunda ngakumbi malunga nendlela osebenza ngayo
Lo ibingumzekelo we-React, kodwa eyona ndlela inye inokusetyenziswa nezinye izakhelo, misela nje i-NPM_RUN eguquguqukayo yemo engqongileyo njengoko kuyimfuneko.
β
Imibhobho ye-Openshift
Okulandelayo siza kuthetha ngesixhobo esinje ngeMibhobho ye-OpenShift kunye nendlela enokusetyenziswa ngayo njengenye indlela yokwakhiwa ngamatyathanga.
Yintoni imibhobho ye-OpenShift
I-OpenShift Pipelines yi-CI/CD ye-cloud-native indibaniselwano eqhubekayo kunye nenkqubo yokuhambisa eyenzelwe ukulungelelanisa imibhobho usebenzisa iTekton. I-Tekton yi-flexible open source Kubernetes-native CI/CD framework evumela ukuba uzenzele ukuthunyelwa kwiiplatifti ezahlukeneyo (Kubernetes, serverless, machine virtual, etc.) ngokukhupha kumaleko angaphantsi.
Ukuqonda eli nqaku kufuna ulwazi oluthile lweMibhobho, ngoko sincoma ngamandla ukuba uqale ufunde
Ukumisela indawo yakho yokusebenza
Ukudlala ngemizekelo kweli nqaku, kufuneka uqale ulungiselele indawo osebenza kuyo:
- Faka kwaye ulungise iqela le-OpenShift 4. Imizekelo yethu isebenzisa i-CodeReady Containers (CRD) kule nto, imiyalelo yokufakela enokufumaneka.
apha . - Emva kokuba iqela lilungile, kufuneka ufake i-Pipeline Operator kuyo. Musa ukoyika, kulula, imiyalelo yokufaka
apha . - Khuphela
Tekton CLI (tkn)apha . - Qhuba isixhobo somyalelo wokwenza-react-app ukwenza isicelo onokuthi usibeke (esi sisicelo esilula
usabela ). - (Ngokuzikhethela) Colanisa indawo yokugcina ukuze usebenzise umzekelo wesicelo ngokufakwa kwe-npm kwaye emva koko u-npm uqale.
Indawo yokugcina yesicelo iya kuba nefolda ye-k8s, eya kuqulatha i-Kubernetes/OpenShift YAMLs ezisetyenziselwa ukusasaza isicelo. Kuya kubakho iMisebenzi, i-ClusterTasks, izibonelelo kunye neMibhobho esiza kuyidala kule nto
Masiqalise
Inyathelo lokuqala lomzekelo wethu kukudala iprojekthi entsha kwiqela le-OpenShift. Masibize le projekthi umbhobho wewebhu kwaye uyidale ngalo myalelo ulandelayo:
$ oc new-project webapp-pipeline
Eli gama leprojekthi liya kuvela kwikhowudi kamva, ngoko ke ukuba uthatha isigqibo sokuyibiza enye into, ungalibali ukuhlela ikhowudi yomzekelo ngokufanelekileyo. Ukuqala ukusuka kweli nqaku, asiyi kuhamba phezulu-phantsi, kodwa ezantsi-phezulu: oko kukuthi, siya kuqala ukudala zonke iinqununu zomthumeli, kwaye kuphela emva koko umqhubi ngokwakhe.
Ngoko, okokuqala ...
Imisebenzi
Masenze imisebenzi embalwa, eya kuthi ke incede ukusasaza usetyenziso ngaphakathi kombhobho wethu. Umsebenzi wokuqala - apply_manifests_task - unoxanduva lokusebenzisa i-YAML yezo zixhobo ze-Kubernetes (inkonzo, ukusasazwa kunye nendlela) ezibekwe kwifolda ye-k8s yesicelo sethu. Umsebenzi wesibini - update_deployment_task - unoxanduva lokuhlaziya umfanekiso osele ubekiwe kulowo owenziwe ngumbhobho wethu.
Ungakhathazeki ukuba ayikacaci kakuhle okwangoku. Enyanisweni, le misebenzi ifana nezinto eziluncedo, kwaye siza kuzijonga ngakumbi kamva kancinane. Okwangoku, masizenze nje:
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/tasks/update_deployment_task.yaml
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/tasks/apply_manifests_task.yaml
Emva koko, sisebenzisa umyalelo we-tkn CLI, siya kujonga ukuba imisebenzi yenziwe:
$ tkn task ls
NAME AGE
apply-manifests 1 minute ago
update-deployment 1 minute ago
Qaphela: Le yimisebenzi yasekuhlaleni yeprojekthi yakho yangoku.
Imisebenzi yeqela
Imisebenzi yeqela ngokusisiseko iyafana nemisebenzi elula. Oko kukuthi, yingqokelela yamanyathelo anokuphinda asetyenziswe adityaniswe ngendlela enye okanye enye xa kuqhutywa umsebenzi othile. Umahluko kukuba umsebenzi weqela ufumaneka kuyo yonke indawo ngaphakathi kweqela. Ukubona uluhlu lwemisebenzi yeqela elenziwe ngokuzenzekelayo xa isongeza i-Pipeline Operator, siya kuphinda sisebenzise umyalelo we-tkn CLI:
$ tkn clustertask ls
NAME AGE
buildah 1 day ago
buildah-v0-10-0 1 day ago
jib-maven 1 day ago
kn 1 day ago
maven 1 day ago
openshift-client 1 day ago
openshift-client-v0-10-0 1 day ago
s2i 1 day ago
s2i-go 1 day ago
s2i-go-v0-10-0 1 day ago
s2i-java-11 1 day ago
s2i-java-11-v0-10-0 1 day ago
s2i-java-8 1 day ago
s2i-java-8-v0-10-0 1 day ago
s2i-nodejs 1 day ago
s2i-nodejs-v0-10-0 1 day ago
s2i-perl 1 day ago
s2i-perl-v0-10-0 1 day ago
s2i-php 1 day ago
s2i-php-v0-10-0 1 day ago
s2i-python-3 1 day ago
s2i-python-3-v0-10-0 1 day ago
s2i-ruby 1 day ago
s2i-ruby-v0-10-0 1 day ago
s2i-v0-10-0 1 day ago
Ngoku makhe senze imisebenzi emibini yeqela. Eyokuqala iyakuvelisa umfanekiso we-S2I kwaye uyithumele kwirejista yangaphakathi ye-OpenShift; okwesibini kukwakha umfanekiso wethu ngokusekelwe kwi-NGINX, usebenzisa isicelo esele sakhiwe njengomxholo.
Yenza kwaye uthumele umfanekiso
Xa udala umsebenzi wokuqala, siya kuphinda oko sele sikwenzile kwinqaku elidlulileyo malunga neendibano ezidibeneyo. Khumbula ukuba sisebenzise umfanekiso we-S2I (ubi8-s2i-web-app) "ukwakha" isicelo sethu, kwaye sagqiba ngomfanekiso ogcinwe kwi-OpenShift yobhaliso lwangaphakathi. Ngoku siza kusebenzisa lo mfanekiso wewebhu ye-S2I ukwenza i-DockerFile kwi-app yethu kwaye emva koko sisebenzise i-Buildah ukwenza olona lwakhiwo kwaye lutyhale umfanekiso osisiphumo kwirejista yangaphakathi ye-OpenShift, kuba yiloo nto kanye eyenziwa yi-OpenShift xa ufaka izicelo zakho usebenzisa i-NodeShift. .
Siyazi njani yonke le nto, uyabuza? Ukusuka
Ke, ngoku masenze umsebenzi weqela le-s2i-web-app:
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/s2i-web-app-task.yaml
Asizukuyihlalutya le nto ngokweenkcukacha, kodwa siza kugxila kuphela kwi-OUTPUT_DIR iparamitha:
params:
- name: OUTPUT_DIR
description: The location of the build output directory
default: build
Ngokungagqibekanga, le parameter ilingana nokwakha, kulapho iReact ibeka khona umxholo odibeneyo. Ezinye izikhokelo zisebenzisa iindlela ezahlukeneyo, umzekelo, kwi-Ember yi-dist. Imveliso yomsebenzi wethu wokuqala weqela iya kuba ngumfanekiso oqulethe i-HTML, iJavaScript, kunye neCSS esiyiqokelele.
Yakha umfanekiso osekelwe kwi-NGINX
Ngokubhekiselele kumsebenzi wethu weqela lesibini, kufuneka sakhe umfanekiso osekelwe kwi-NGINX kuthi, usebenzisa umxholo wesicelo esele sakhiwe. Ngokusisiseko, le yinxalenye yecandelo langaphambili apho sijonge ukwakhiwa kwamatyathanga.
Ukwenza oku, thina-kanye ngokufana nalapha ngasentla-siyakudala umsebenzi weqela lewebhu-ukwakha-ixesha lokusebenza:
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/webapp-build-runtime-task.yaml
Ukuba ujonga ikhowudi yale misebenzi yeqela, unokubona ukuba ayichazi indawo yokugcina iGit esisebenza nayo okanye amagama emifanekiso esiyenzayo. Sicacisa kuphela ukuba yintoni kanye kanye esiyithumela kwi-Git, okanye umfanekiso othile apho umfanekiso wokugqibela kufuneka uphume khona. Yiyo loo nto le misebenzi yeqela ingaphinda isetyenziswe xa kusetyenzwa nezinye iinkqubo.
Kwaye apha siqhubela phambili ngobubele kwinqaku elilandelayo ...
Izibonelelo
Ke, njengoko, njengoko besitshilo, imisebenzi yeqela kufuneka ibe ngokubanzi kangangoko, kufuneka senze izixhobo eziza kusetyenziswa njengegalelo (indawo yokugcina iGit) kunye nemveliso (imifanekiso yokugqibela). Isixhobo sokuqala esisidingayo yiGit, apho isicelo sethu sihlala khona, into efana nale:
# This resource is the location of the git repo with the web application source
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
name: web-application-repo
spec:
type: git
params:
- name: url
value: https://github.com/nodeshift-starters/react-pipeline-example
- name: revision
value: master
Apha iPipelineResource luhlobo lwe git. Isitshixo se-url kwicandelo le-params sikhomba kwindawo ethile yokugcina kwaye ichaze i-master branch (oku kuyakhethwa, kodwa sibhala ukuphelela).
Ngoku kufuneka senze isibonelelo somfanekiso apho iziphumo ze-s2i-web-app umsebenzi ziya kugcinwa, oku kwenziwa ngolu hlobo:
# This resource is the result of running "npm run build", the resulting built files will be located in /opt/app-root/output
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
name: built-web-application-image
spec:
type: image
params:
- name: url
value: image-registry.openshift-image-registry.svc:5000/webapp-pipeline/built-web-application:latest
Apha iPipelineResource iluhlobo lomfanekiso, kwaye ixabiso leparameter yeurl likhomba kwiOpenShift Image Registry yangaphakathi, ngokukodwa leyo ibekwe kwi-webapp-pipeline namespace. Ungalibali ukutshintsha olu seto ukuba usebenzisa isithuba samagama esahlukileyo.
Kwaye ekugqibeleni, isibonelelo sokugqibela esisidingayo siya kuba sohlobo lomfanekiso kwaye lo iya kuba ngumfanekiso wokugqibela we-NGINX oya kuthi usetyenziswe ngexesha lokuthunyelwa:
# This resource is the image that will be just the static html, css, js files being run with nginx
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
name: runtime-web-application-image
spec:
type: image
params:
- name: url
value: image-registry.openshift-image-registry.svc:5000/webapp-pipeline/runtime-web-application:latest
Kwakhona, qaphela ukuba esi sixhobo sigcina umfanekiso kwirejista ye-OpenShift yangaphakathi kwi-webapp-pipeline namespace.
Ukwenza zonke ezi zixhobo ngaxeshanye, sisebenzisa lo myalelo wokudala:
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/resources/resource.yaml
Unokuqinisekisa ukuba izixhobo zenziwe ngolu hlobo:
$ tkn resource ls
Umbhobho wokuhambisa
Ngoku ekubeni sinawo onke amacandelo ayimfuneko, makhe sihlanganise umbhobho kuwo ngokuwudala ngalo myalelo ulandelayo:
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/pipelines/build-and-deploy-react.yaml
Kodwa ngaphambi kokuba siqhube lo myalelo, makhe sijonge la macandelo. Eyokuqala ligama:
apiVersion: tekton.dev/v1alpha1
kind: Pipeline
metadata:
name: build-and-deploy-react
Ke kwicandelo elithile sibona isalathiso sezixhobo esizenzileyo ngaphambili:
spec:
resources:
- name: web-application-repo
type: git
- name: built-web-application-image
type: image
- name: runtime-web-application-image
type: image
Emva koko sidala imisebenzi ekufuneka umbhobho wethu uyigqibe. Okokuqala, kufuneka iphumeze umsebenzi we-s2i-web-app esele siyile:
tasks:
- name: build-web-application
taskRef:
name: s2i-web-app
kind: ClusterTask
Lo msebenzi uthatha igalelo (gir resource) kunye nemveliso (i-built-web-application-image resource) parameters. Sikwayidlulisa ipharamitha ekhethekileyo ukuze ingayingqini i-TLS kuba sisebenzisa izatifikethi ezizisayinileyo:
resources:
inputs:
- name: source
resource: web-application-repo
outputs:
- name: image
resource: built-web-application-image
params:
- name: TLSVERIFY
value: "false"
Umsebenzi olandelayo uphantse ufane, kuphela apha i-webapp-build-runtime cluster umsebenzi esele siwuyile ubizwa ngokuba:
name: build-runtime-image
taskRef:
name: webapp-build-runtime
kind: ClusterTask
Njengomsebenzi wangaphambili, sidlula kwisixhobo, kodwa ngoku i-built-web-application-image (imveliso yomsebenzi wethu wangaphambili). Kwaye njengemveliso siphinda sibeke umfanekiso. Ekubeni lo msebenzi kufuneka wenziwe emva kwalowo udlulileyo, songeza i-runAfter field:
resources:
inputs:
- name: image
resource: built-web-application-image
outputs:
- name: image
resource: runtime-web-application-image
params:
- name: TLSVERIFY
value: "false"
runAfter:
- build-web-application
Imisebenzi emibini elandelayo inoxanduva lokusebenzisa inkonzo, indlela kunye nokusasazwa kweefayile ze-YAML ezihlala kuluhlu lwe-k8s lwesicelo sethu sewebhu, kunye nokuhlaziya oku kuthunyelwa xa kuyilwa imifanekiso emitsha. Sichaze le misebenzi mibini yeqela ekuqaleni kwenqaku.
Ukuqalisa umhambisi
Ke, zonke iinxalenye zombhobho wethu zidaliwe, kwaye siya kuqhuba ngalo myalelo ulandelayo:
$ tkn pipeline start build-and-deploy-react
Kweli nqanaba, umgca womyalelo usetyenziswa ngokubambisana kwaye kufuneka ukhethe izixhobo ezifanelekileyo kwimpendulo kwisicelo ngasinye: kwisixhobo se-git, khetha i-web-application-repo, emva koko kwisixhobo somfanekiso wokuqala, i-web-application eyakhelweyo. -umfanekiso, kwaye ekugqibeleni, kwisixhobo somfanekiso wesibini -ixesha lokusebenza-web-application-image:
? Choose the git resource to use for web-application-repo: web-application-repo (https://github.com/nodeshift-starters/react-pipeline-example)
? Choose the image resource to use for built-web-application-image: built-web-application-image (image-registry.openshift-image-registry.svc:5000/webapp-pipeline/built-web-
application:latest)
? Choose the image resource to use for runtime-web-application-image: runtime-web-application-image (image-registry.openshift-image-registry.svc:5000/webapp-pipeline/runtim
e-web-application:latest)
Pipelinerun started: build-and-deploy-react-run-4xwsr
Ngoku makhe sijonge ubume bombhobho sisebenzisa lo myalelo ulandelayo:
$ tkn pipeline logs -f
Nje ukuba umbhobho uqalisile kwaye isicelo sisetyenzisiwe, sinokucela indlela epapashiweyo ngalo myalelo ulandelayo:
$ oc get route react-pipeline-example --template='http://{{.spec.host}}'
Ukujonga ngakumbi, unokujonga umbhobho wethu kwindlela yoPhuhlisi yekhonsoli yewebhu kwicandelo Imibhobho, njengoko kubonisiwe kwiFig. 1.
Isazobe.1. Uphononongo lwemibhobho ebalekayo.
Ukucofa kumbhobho osebenzayo ubonisa iinkcukacha ezongezelelweyo, njengoko kubonisiwe kuMfanekiso 2.
Irayisi. 2. Ulwazi olongezelelweyo malunga nombhobho.
Emva kolwazi oluninzi, ungabona usetyenziso olusebenzayo kwimboniselo Topology, njengoko kubonisiwe kwi-Fig.3.
Umzobo 3. Ipod yaziswa.
Ukucofa isangqa kwikona ephezulu ngasekunene yophawu kuvulwa inkqubo yethu, njengoko kubonisiwe kumfanekiso wesi-4.
Irayisi. 4. Ukuqhuba iReact application.
isiphelo
Ke, sibonise indlela yokuqhuba iseva yophuhliso yesicelo sakho kwi-OpenShift kwaye uyingqamanise nenkqubo yefayile yendawo. Siphinde sajonga indlela yokulinganisa itemplate yokwakhiwa ngamatyathanga usebenzisa i-OpenShift Pipelines. Yonke imizekelo yeekhowudi kweli nqaku inokufumaneka
Izibonelelo ezongezelelweyo (EN)
- I-e-ncwadi yasimahla
"Uphuhliso kwi-OpenShift: isikhokelo sabangenamonde" Ukwakha ikhonteyina ephakathi kwezicelo zeNode.js usebenzisa i-Red Hat OpenShift Application Runtimes kunye ne-Istio Ukulungisa ii-Node.js izicelo kwi-OpenShift usebenzisa iChrome DevTools Imiyalelo emithathu yokulawula i-Express kwi-OpenShift ukusuka ekuqaleni Isibhengezo soguqulelo olukhoyo jikelele lweNode.js njengenxalenye yeRed Hat OpenShift Application Runtimes Ukubek'esweni ii-Node.js zosetyenziso kwi-OpenShift nge-Prometheus - Amanye amanqaku kwi
OpenShift kunye neKubernetes kwiwebhusayithi ye-Red Hat
Izaziso zeewebinars ezizayo
Siqala uthotho lweewebinars zangoLwesihlanu malunga namava emveli sisebenzisa iRed Hat OpenShift Container Platform kunye neKubernetes:
Nge-28 ka-Agasti, i-webinar Emperor "Operator": AbaSebenzi kwi-OpenShift kunye ne-Kubernetes Ngomhla we-11 kuSeptemba, i-DeploymentConfig vs Deployment-I-OpenShift-umlingo othe ngqo wokwakha kunye nokuthumela izicelo NgoSeptemba 25, i-Red Hat OpenShift kunye ne-Machine API Oktobha 9, Indlela yokuhlangabezana nokunyuka ngokukhawuleza komsebenzi Ngomhla wama-23 ku-Okthobha, iJenkins Embekelweyo, iPipeline-builds, iTekton kwi-Red Hat OpenShift Container Platform
umthombo: www.habr.com