ProHoster > Blog > Administratioun > Modern Uwendungen op OpenShift, Deel 3: OpenShift als Entwécklungsëmfeld an OpenShift Pipelines
Modern Uwendungen op OpenShift, Deel 3: OpenShift als Entwécklungsëmfeld an OpenShift Pipelines
Hallo jiddereen op dësem Blog! Dëst ass den drëtte Post an enger Serie an där mir weisen wéi modern Webapplikatiounen op Red Hat OpenShift ofgebaut ginn.
An de fréieren zwee Posts hu mir gewisen wéi modern Webapplikatiounen a just e puer Schrëtt z'installéieren a wéi een en neit S2I Bild benotzt zesumme mat engem off-the-shelf HTTP Server Image, wéi NGINX, mat gekettende Builds fir Produktiounsdeployementer ze orchestréieren .
Haut wäerte mir weisen wéi Dir en Entwécklungsserver fir Är Applikatioun op der OpenShift Plattform leeft an et mat dem lokalen Dateiesystem synchroniséiert, an och iwwer wat OpenShift Pipelines sinn a wéi se als Alternativ zu verlinkte Versammlungen benotzt kënne ginn.
OpenShift als Entwécklungsëmfeld
Entwécklung Workflow
Wéi schonn uginn an éischte Post, den typeschen Entwécklungsprozess fir modern Webapplikatiounen ass einfach eng Zort "Entwécklungsserver", deen Ännerungen op lokalen Dateien verfolgt. Wann se optrieden, gëtt d'Applikatioun Build ausgeléist an da gëtt se an de Browser aktualiséiert.
An de meeschte modernen Kaderen ass sou en "Entwécklungsserver" an déi entspriechend Kommandozeil-Tools gebaut.
Lokal Beispill
Als éischt, loosst eis kucken wéi dëst funktionnéiert wann Dir Uwendungen lokal leeft. Loosst eis d'Applikatioun als Beispill huelen reagéieren vu fréieren Artikelen, obwuel bal déiselwecht Workflowkonzepter an all anere modernen Kaderen gëllen.
Also, fir den "Dev Server" an eisem React Beispill ze starten, gi mir de folgende Kommando aginn:
$ npm run start
Dann an der Terminalfenster gesi mir eppes wéi dat:
An eis Applikatioun wäert am Standardbrowser opmaachen:
Elo, wa mir Ännerungen un der Datei maachen, soll d'Applikatioun am Browser aktualiséieren.
OK, alles ass kloer mat der Entwécklung am lokalen Modus, awer wéi kënnt Dir datselwecht op OpenShift erreechen?
Entwécklung Server op OpenShift
Wann Dir Iech erënnert, an virdrun Post, mir hunn d'sougenannte Runphase vum S2I-Bild gekuckt a gesinn datt de Servemodul par défaut verantwortlech ass fir eis Webapplikatioun ze servéieren.
Wéi och ëmmer, wann Dir méi no kuckt lafen Skript aus deem Beispill enthält et d'$NPM_RUN Ëmfeld Variabel, déi Iech erlaabt Äre Kommando auszeféieren.
Zum Beispill kënne mir den Nodeshift Modul benotzen fir eis Applikatioun z'installéieren:
Notiz: Dat Beispill hei uewen ass verkierzt fir déi allgemeng Iddi ze illustréieren.
Hei hu mir d'NPM_RUN Ëmfeld Variabel fir eis Deployment bäigefüügt, déi d'Runtime seet fir de Garnstart Kommando auszeféieren, wat de React Entwécklungsserver an eisem OpenShift Pod ufänkt.
Wann Dir de Logbuch vun engem lafende Pod kuckt, gesäit et esou aus:
Natierlech wäert dat alles näischt sinn, bis mir de lokalen Code mam Code synchroniséiere kënnen, deen och fir Ännerungen iwwerwaacht gëtt, awer op engem Fernserver lieft.
Synchroniséiert Fern- a Lokalcode
Glécklecherweis kann Nodeshift einfach mat Synchroniséierung hëllefen, an Dir kënnt d'Auerbefehl benotze fir Ännerungen ze verfolgen.
Also nodeems mir de Kommando ausgefouert hunn fir den Entwécklungsserver fir eis Applikatioun z'installéieren, kënne mir sécher de folgende Kommando benotzen:
$ npx nodeshift watch
Als Resultat gëtt eng Verbindung mam Lafen Pod gemaach, dee mir e bësse méi fréi erstallt hunn, d'Synchroniséierung vun eise lokalen Dateien mam Remote Cluster gëtt aktivéiert, an d'Dateien op eisem lokalen System fänken un fir Ännerungen ze iwwerwaachen.
Dofir, wa mir elo d'src/App.js Datei aktualiséieren, reagéiert de System op dës Ännerungen, kopéiert se op de Remote Cluster an start den Entwécklungsserver, deen dann eis Applikatioun am Browser aktualiséieren.
Fir d'Bild komplett ze maachen, loosst eis weisen wéi dës ganz Kommandoen ausgesinn:
De Watch Kommando ass eng Abstraktioun uewen um oc rsync Kommando, Dir kënnt méi léieren wéi et funktionnéiert hei.
Dëst war e Beispill fir React, awer déi exakt selwecht Method kann mat anere Kaderen benotzt ginn, just d'NPM_RUN Ëmfeldvariabel setzen wéi néideg.
Openshift Pipelines
Als nächst wäerte mir iwwer e Tool wéi OpenShift Pipelines schwätzen a wéi et als Alternativ zu chained Builds benotzt ka ginn.
Wat ass OpenShift Pipelines
OpenShift Pipelines ass e Cloud-native CI / CD kontinuéierlech Integratioun a Liwwersystem entwéckelt fir Pipelines mat Tekton z'organiséieren. Tekton ass e flexibelen Open-Source Kubernetes-native CI / CD Kader deen Iech erlaabt d'Deployment op verschiddene Plattformen (Kubernetes, Serverlos, virtuelle Maschinnen, etc.) ze automatiséieren andeems Dir vun der Basisschicht abstrakéiert.
Dësen Artikel ze verstoen erfuerdert e puer Wëssen iwwer Pipelines, also empfeelen mir Iech fir d'éischt ze liesen offiziell Léierbuch.
Ariichten vun Ärem Aarbechtsëmfeld
Fir mat de Beispiller an dësem Artikel ze spillen, musst Dir als éischt Äert Aarbechtsëmfeld virbereeden:
Installéieren a konfiguréieren en OpenShift 4 Cluster. Eis Beispiller benotzen CodeReady Containers (CRD) fir dëst, Installatiounsinstruktiounen fir déi kënne fonnt ginn hei.
Nodeems de Cluster fäerdeg ass, musst Dir Pipeline Operator op et installéieren. Keng Angscht, et ass einfach, Installatiounsinstruktiounen hei.
Run de Create-react-App Kommandozeil Tool fir eng Applikatioun ze kreéieren déi Dir dann ofsetzt (dëst ass eng einfach Applikatioun reagéieren).
(Optional) Klon de Repository fir d'Beispillapplikatioun lokal mat npm installéieren ze lafen an dann npm Start.
D'Applikatiounsrepository wäert och e k8s-Ordner hunn, deen d'Kubernetes / OpenShift YAMLs enthält, déi benotzt gi fir d'Applikatioun z'installéieren. Et ginn Aufgaben, ClusterTasks, Ressourcen a Pipelines déi mir an dësem erstellen Repositories.
Géi erof
Den éischte Schrëtt fir eist Beispill ass en neie Projet am OpenShift Cluster ze kreéieren. Loosst eis dëse Projet Webapp-Pipeline nennen an et mat dem folgenden Kommando erstellen:
$ oc new-project webapp-pipeline
Dëse Projet Numm wäert spéider am Code erschéngen, also wann Dir décidéiert et eppes anescht ze nennen, vergiesst net de Beispillcode deementspriechend z'änneren. Vun dësem Punkt un wäerte mir net vun uewen erof goen, mee ënnen no uewen: dat ass, mir wäerte fir d'éischt all d'Komponente vum Fërderband erstellen, an nëmmen dann de Fërderband selwer.
Also, éischtens ...
Aufgaben
Loosst eis e puer Aufgaben erstellen, déi dann hëllefen d'Applikatioun an eiser Pipeline z'installéieren. Déi éischt Aufgab - application_manifests_task - ass verantwortlech fir de YAML vun deene Kubernetes Ressourcen (Service, Deployment a Route) z'applizéieren, déi am k8s Dossier vun eiser Applikatioun sinn. Déi zweet Aufgab - update_deployment_task - ass verantwortlech fir d'Aktualiséierung vun engem scho ofgebauten Bild op deen vun eiser Pipeline erstallt gouf.
Maacht Iech keng Suergen, wann et nach net ganz kloer ass. Tatsächlech sinn dës Aufgaben eppes wéi Utilities, a mir wäerte se e bësse méi spéit méi detailléiert kucken. Fir elo, loosst eis se just erstellen:
Dann, mat dem tkn CLI Kommando, wäerte mir kucken ob d'Aufgaben erstallt goufen:
$ tkn task ls
NAME AGE
apply-manifests 1 minute ago
update-deployment 1 minute ago
Notiz: Dëst sinn lokal Aufgaben fir Ären aktuelle Projet.
Cluster Aufgaben
Cluster Aufgaben sinn am Fong d'selwecht wéi einfach Aufgaben. Dat ass, et ass eng weiderverwendbar Sammlung vu Schrëtt, déi op eng oder aner Manéier kombinéiert ginn wann Dir eng spezifesch Aufgab leeft. Den Ënnerscheed ass datt eng Cluster Aufgab iwwerall am Cluster verfügbar ass. Fir d'Lëscht vun de Cluster Aufgaben ze gesinn, déi automatesch erstallt ginn wann Dir Pipeline Operator bäidréit, benotze mir erëm den tkn CLI Kommando:
$ 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
Loosst eis elo zwee Cluster Aufgaben erstellen. Déi éischt wäert d'S2I Bild generéieren an et an d'intern OpenShift Registry schécken; déi zweet ass eist Bild op NGINX ze bauen, mat der Applikatioun déi mir scho als Inhalt gebaut hunn.
Erstellt a schéckt d'Bild
Wann Dir déi éischt Aufgab erstellt, widderhuelen mir dat wat mir schonn am virege Artikel iwwer verlinkte Versammlungen gemaach hunn. Denkt drun datt mir d'S2I Bild (ubi8-s2i-web-App) benotzt hunn fir eis Applikatioun ze "bauen", an op en Enn mat engem Bild gespäichert am OpenShift internen Registry. Elo benotze mir dëst S2I Web App Bild fir en DockerFile fir eis App ze kreéieren an dann Buildah ze benotzen fir déi aktuell Build ze maachen an dat resultéierend Bild an d'OpenShift intern Registry ze drécken, well dat ass genau dat wat OpenShift mécht wann Dir Är Uwendungen mat NodeShift benotzt .
Mir wäerten dëst net am Detail analyséieren, awer nëmmen op den OUTPUT_DIR Parameter konzentréieren:
params:
- name: OUTPUT_DIR
description: The location of the build output directory
default: build
Par défaut ass dëse Parameter gläich mam Bau, dat ass wou React de versammelten Inhalt setzt. Aner Kaderen benotzen verschidde Weeër, zum Beispill, am Ember ass et dist. D'Output vun eiser éischter Cluster Aufgab ass e Bild mat HTML, JavaScript an CSS déi mir gesammelt hunn.
Baut e Bild baséiert op NGINX
Wat eis zweet Cluster Aufgab ugeet, sollt et en NGINX-baséiert Bild fir eis bauen, mam Inhalt vun der Applikatioun déi mir scho gebaut hunn. Weesentlechen ass dëst den Deel vun der viregter Sektioun wou mir op chained Builds gekuckt hunn.
Fir dëst ze maachen, wäerte mir - genee d'selwecht wéi just uewen - eng Clustertask erstellen webapp-build-runtime:
Wann Dir de Code fir dës Cluster Aufgaben kuckt, kënnt Dir gesinn datt et net de Git Repository spezifizéiert mat deem mir schaffen oder d'Nimm vun de Biller déi mir kreéieren. Mir spezifizéieren nëmmen wat genau mir op Git transferéieren, oder e bestëmmt Bild wou d'Finale Bild soll erausginn. Dofir kënnen dës Cluster Aufgaben erëmbenotzt ginn wann Dir mat aneren Uwendungen schafft.
An hei gi mer graziéis op den nächste Punkt...
Ressourcen
Also, well, wéi mir just gesot hunn, Cluster Aufgaben sou allgemeng wéi méiglech solle sinn, musse mir Ressourcen kreéieren déi als Input (de Git Repository) an als Output (déi endgülteg Biller) benotzt ginn. Déi éischt Ressource déi mir brauchen ass Git, wou eis Applikatioun wunnt, sou eppes:
# 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
Hei ass PipelineResource vum Typ git. Den URL-Schlëssel an der Params Sektioun weist op e spezifesche Repository a spezifizéiert d'Meeschterzweig (dëst ass fakultativ, awer mir schreiwen et fir Vollständegkeet).
Elo musse mir eng Ressource fir d'Bild erstellen wou d'Resultater vun der s2i-Web-App Aufgab gespäichert ginn, dëst gëtt esou gemaach:
# 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
Hei ass d'PipelineResource vum Typ Bild, an de Wäert vum URL Parameter weist op d'intern OpenShift Image Registry, speziell deen am Webapp-Pipeline Nummraum. Vergiesst net dës Astellung z'änneren wann Dir en anere Nummraum benotzt.
A schliisslech wäert déi lescht Ressource déi mir brauchen och vum Typ Bild sinn an dëst wäert dat lescht NGINX Bild sinn dat dann wärend der Deployment benotzt gëtt:
# 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
Nach eng Kéier, bemierkt datt dës Ressource d'Bild am internen OpenShift Registry am Webapp-Pipeline Nummraum späichert.
Fir all dës Ressourcen gläichzäiteg ze kreéieren, benotze mir de Kommando erstellen:
Dës Aufgab hëlt Input (gir Ressource) an Ausgang (gebaut-Web-Applikatioun-Bild Ressource) Parameteren. Mir ginn et och e spezielle Parameter sou datt et TLS net verifizéiert well mir selbst ënnerschriwwen Certificaten benotzen:
Wéi mat der viregter Aufgab, passéiere mir eng Ressource, awer elo ass et gebaut-Web-Applikatioun-Bild (den Ausgang vun eiser viregter Aufgab). An als Ausgang setzen mir d'Bild erëm. Well dës Aufgab muss no der viregter ausgefouert ginn, addéiere mir de RunAfter Feld:
Déi nächst zwou Aufgaben si verantwortlech fir de Service, de Wee an d'Deployment YAML Dateien ze benotzen déi am k8s Verzeechnes vun eiser Webapplikatioun liewen, an och fir dës Deployment ze aktualiséieren wann Dir nei Biller erstellt. Mir definéiert dës zwou Cluster Aufgaben am Ufank vum Artikel.
De Fërderband starten
Also, all Deeler vun eiser Pipeline ginn erstallt, a mir lafen et mam folgendem Kommando:
$ tkn pipeline start build-and-deploy-react
Op dëser Etapp gëtt d'Kommandozeil interaktiv benotzt an Dir musst déi entspriechend Ressourcen auswielen an Äntwert op all seng Ufroen: fir d'Git Ressource, wielt Web-Applikatioun-Repo, dann fir déi éischt Bildressource, Built-Web-Applikatioun -image, a schliisslech, fir zweet Bildressource -runtime-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
Loosst eis elo de Status vun der Pipeline iwwerpréiwen mat dem folgenden Kommando:
$ tkn pipeline logs -f
Wann d'Pipeline ugefaang huet an d'Applikatioun ofgebaut gouf, kënne mir de publizéierte Wee mat dem folgenden Kommando ufroen:
$ oc get route react-pipeline-example --template='http://{{.spec.host}}'
Fir méi grouss Visualiséierung, kënnt Dir eis Pipeline am Entwécklermodus vun der Webkonsole an der Sektioun kucken Pipelines, wéi an der Fig. 1.
Fig.1. Iwwerpréiwung vun Lafen Pipelines.
Klickt op eng lafend Pipeline weist zousätzlech Detailer, wéi an der Figur 2.
Reis. 2. Zousätzlech Informatiounen iwwert d'Pipeline.
No méi Informatioun, kënnt Dir Lafen Uwendungen an der Vue gesinn Topologie, wéi an Fig.3 gewisen.
Fig 3. Lancéiert Pod.
Klickt op de Krees an der oberer rechter Ecke vun der Ikon mécht eis Applikatioun op, wéi an der Fig.
Reis. 4. Lafen React Applikatioun.
Konklusioun
Also hu mir gewisen wéi Dir en Entwécklungsserver fir Är Applikatioun op OpenShift ausféiert an et mam lokalen Dateiesystem synchroniséiert. Mir hunn och gekuckt wéi een eng chained-build Schabloun simuléiert mat OpenShift Pipelines. All Beispill Coden aus dësem Artikel kann fonnt ginn hei.