ProHoster > Blog > Administrasi > Aplikasi modéren dina OpenShift, bagian 3: OpenShift salaku lingkungan pamekaran sareng OpenShift Pipelines
Aplikasi modéren dina OpenShift, bagian 3: OpenShift salaku lingkungan pamekaran sareng OpenShift Pipelines
Halo sadayana dina blog ieu! Ieu mangrupikeun tulisan katilu dina séri anu kami nunjukkeun kumaha nyebarkeun aplikasi wéb modern dina Red Hat OpenShift.
Dina dua tulisan sateuacana, kami nunjukkeun kumaha cara nyebarkeun aplikasi wéb modéren dina sababaraha léngkah sareng kumaha cara ngagunakeun gambar S2I énggal sareng gambar pangladén HTTP anu luar-nu-rak, sapertos NGINX, nganggo gedong ranté pikeun ngatur panyebaran produksi. .
Dinten ieu kami bakal nunjukkeun kumaha ngajalankeun server pangembangan pikeun aplikasi anjeun dina platform OpenShift sareng nyingkronkeunana sareng sistem file lokal, sareng ogé ngobrol ngeunaan naon OpenShift Pipelines sareng kumaha aranjeunna tiasa dianggo salaku alternatif pikeun majelis anu aya hubunganana.
OpenShift salaku lingkungan pangwangunan
Alur kerja pangwangunan
Sakumaha geus disebutkeun dina pos munggaran, prosés ngembangkeun has pikeun aplikasi wéb modern ngan saukur sababaraha jenis "server ngembangkeun" nu ngalacak parobahan file lokal. Nalika aranjeunna kajantenan, ngawangun aplikasi dipicu teras diropéa kana browser.
Dina kalolobaan kerangka modéren, sapertos "server pamekaran" diwangun kana alat garis paréntah anu saluyu.
Contona lokal
Mimiti, hayu urang tingali kumaha ieu jalan nalika ngajalankeun aplikasi sacara lokal. Hayu urang nyandak aplikasi salaku conto mere tanggapan ti artikel saméméhna, sanajan konsep workflow ampir sarua lumaku dina sakabéh frameworks modern lianna.
Janten, pikeun ngamimitian "server dev" dina conto React kami, kami bakal ngalebetkeun paréntah di handap ieu:
$ npm run start
Teras dina jandela terminal urang bakal ningali sapertos kieu:
Sareng aplikasi kami bakal dibuka dina browser standar:
Ayeuna, upami urang ngadamel parobihan kana file, aplikasina kedah ngapdet dina browser.
OKÉ, sadayana jelas sareng pamekaran dina modeu lokal, tapi kumaha carana ngahontal anu sami dina OpenShift?
Pangwangunan server on OpenShift
Lamun inget, di pos saméméhna, Urang nempo fase ngajalankeun disebut gambar S2I sarta nempo yén sacara standar, modul ngawula tanggung jawab ngalayanan aplikasi wéb urang.
Sanajan kitu, lamun nyandak katingal ngadeukeutan ngajalankeun skrip ti conto éta, ngandung $ NPM_RUN variabel lingkungan, nu ngidinan Anjeun pikeun ngaéksekusi paréntah Anjeun.
Salaku conto, urang tiasa nganggo modul nodeshift pikeun nyebarkeun aplikasi urang:
Catetan: Conto di luhur disingget pikeun ngagambarkeun ide umum.
Di dieu kami geus ditambahkeun variabel lingkungan NPM_RUN kana deployment kami, nu ngabejaan runtime ngajalankeun paréntah benang ngamimitian, nu dimimitian server ngembangkeun React di jero pod OpenShift kami.
Upami anjeun ningali log tina pod jalan, éta bakal katingali sapertos kieu:
Tangtosna, sadayana ieu bakal aya nanaon dugi ka urang tiasa nyinkronkeun kode lokal sareng kode, anu ogé diawaskeun pikeun parobihan, tapi hirup dina server jauh.
Nyingkronkeun kode jauh sareng lokal
Untungna, nodeshift bisa kalayan gampang mantuan sinkronisasi, tur anjeun tiasa nganggo paréntah nonton pikeun lagu parobahan.
Janten saatos urang ngajalankeun paréntah pikeun nyebarkeun server pangembangan pikeun aplikasi urang, urang tiasa aman nganggo paréntah di handap ieu:
$ npx nodeshift watch
Hasilna, sambungan bakal dilakukeun kana pod jalan nu urang dijieun saeutik saméméhna, sinkronisasi file lokal urang jeung klaster jauh bakal diaktipkeun, sarta file dina sistem lokal urang bakal mimiti diawaskeun pikeun parobahan.
Ku alatan éta, lamun urang ayeuna ngamutahirkeun file src/App.js, sistem bakal meta kana parobahan ieu, nyalin kana klaster jauh tur mimitian server ngembangkeun, nu lajeng bakal ngamutahirkeun aplikasi urang dina browser nu.
Pikeun ngalengkepan gambar, hayu urang nunjukkeun kumaha sadayana paréntah ieu:
Paréntah jam tangan mangrupikeun abstraksi dina luhureun paréntah oc rsync, anjeun tiasa langkung jéntré ngeunaan cara gawéna di dieu.
Ieu mangrupikeun conto pikeun React, tapi metodeu anu sami tiasa dianggo sareng kerangka anu sanés, ngan setel variabel lingkungan NPM_RUN upami diperyogikeun.
Openhift Pipelines
Salajengna urang bakal ngobrol ngeunaan alat sapertos OpenShift Pipelines sareng kumaha éta tiasa dianggo salaku alternatif pikeun ngawangun ranté.
Naon ari OpenShift Pipelines
OpenShift Pipelines mangrupikeun integrasi kontinyu sareng sistem pangiriman CI / CD asli awan anu dirancang pikeun ngatur pipa nganggo Tekton. Tekton mangrupakeun open-source Kubernetes-pribumi CI / kerangka CD fléksibel nu ngidinan Anjeun pikeun ngajadikeun otomatis deployment dina sagala rupa platform (Kubernetes, serverless, mesin virtual, jsb) ku abstracting tina lapisan dasar.
Ngartos artikel ieu peryogi sababaraha pangaweruh ngeunaan Pipelines, janten kami nyarankeun pisan yén anjeun maca heula buku ajar resmi.
Nyetél lingkungan gawé anjeun
Pikeun maenkeun conto-conto dina tulisan ieu, anjeun mimiti kedah nyiapkeun lingkungan kerja anjeun:
Pasang sareng konpigurasikeun klaster OpenShift 4. Conto kami nganggo CodeReady Containers (CRD) pikeun ieu, petunjuk instalasi anu tiasa dipendakan di dieu.
Saatos kluster parantos siap, anjeun kedah pasang Operator Pipa di dinya. Ulah sieun, éta gampang, parentah instalasi di dieu.
Jalankeun alat garis paréntah create-react-app pikeun nyiptakeun aplikasi anu anjeun teras-terasan bakal disebarkeun (ieu mangrupikeun aplikasi saderhana. mere tanggapan).
(Opsional) Kloning gudang pikeun ngajalankeun aplikasi sampel sacara lokal sareng install npm teras ngamimitian npm.
Repository aplikasi ogé bakal gaduh folder k8s, anu ngandung Kubernetes / OpenShift YAMLs anu dianggo pikeun nyebarkeun aplikasi. Bakal aya Tugas, ClusterTasks, Sumberdaya sareng Pipelines anu bakal kami ciptakeun dina ieu repositories.
Hayu urang ngamimitian
Léngkah munggaran pikeun conto urang nyaéta nyiptakeun proyék énggal dina klaster OpenShift. Hayu urang nyauran proyék ieu webapp-pipeline sareng jieun ku paréntah di handap ieu:
$ oc new-project webapp-pipeline
Ngaran proyék ieu bakal muncul dina kode engké on, jadi lamun mutuskeun pikeun ngaranan eta hal sejenna, ulah poho pikeun ngédit conto kode sasuai. Mimitian ti titik ieu, urang moal balik luhur-handap, tapi handap-up: nyaeta, urang mimiti nyieun sakabéh komponén conveyor, sarta ngan lajeng conveyor sorangan.
Ku kituna, mimiti sagala ...
tugas
Hayu urang ngadamel sababaraha tugas, anu teras bakal ngabantosan nyebarkeun aplikasi dina pipa kami. Tugas kahiji - apply_manifests_task - tanggung jawab pikeun nerapkeun YAML sumberdaya Kubernetes (jasa, deployment jeung rute) nu lokasina di folder k8s tina aplikasi urang. Tugas kadua - update_deployment_task - tanggung jawab pikeun ngamutahirkeun hiji gambar geus deployed kana hiji dijieun ku pipa kami.
Tong hariwang lamun can écés pisan. Kanyataanna, tugas ieu téh kawas Utiliti, sarta kami bakal kasampak di aranjeunna dina leuwih jéntré saeutik engké. Pikeun ayeuna, hayu urang nyiptakeunana:
Teras, nganggo paréntah tkn CLI, kami bakal pariksa yén tugas-tugas parantos didamel:
$ tkn task ls
NAME AGE
apply-manifests 1 minute ago
update-deployment 1 minute ago
Catetan: Ieu mangrupikeun tugas lokal pikeun proyék anjeun ayeuna.
tugas kluster
Tugas klaster dasarna sami sareng tugas saderhana. Nyaéta, éta mangrupikeun kumpulan léngkah anu tiasa dianggo deui anu digabungkeun dina hiji cara atanapi anu sanés nalika ngajalankeun tugas khusus. Bédana nyaéta tugas kluster sayogi dimana-mana dina kluster. Pikeun ningali daptar tugas klaster anu otomatis didamel nalika nambihan Pipeline Operator, urang bakal nganggo deui paréntah 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
Ayeuna hayu urang nyieun dua tugas klaster. Anu kahiji bakal ngahasilkeun gambar S2I sareng ngirimkeunana ka pendaptaran OpenShift internal; kadua nyaéta pikeun ngawangun gambar urang dumasar kana NGINX, ngagunakeun aplikasi kami geus diwangun salaku eusi.
Jieun jeung ngirim gambar
Nalika nyiptakeun tugas anu munggaran, urang bakal ngulang naon anu parantos dilakukeun dina tulisan sateuacana ngeunaan majelis anu aya hubunganana. Émut yén kami nganggo gambar S2I (ubi8-s2i-web-app) pikeun "ngawangun" aplikasi kami, sareng ditungtungan ku gambar anu disimpen dina pendaptaran internal OpenShift. Ayeuna kami bakal nganggo gambar aplikasi wéb S2I ieu pikeun nyiptakeun DockerFile pikeun aplikasi kami teras nganggo Buildah pikeun ngalakukeun ngawangun saleresna sareng nyorong gambar anu hasilna kana pendaptaran internal OpenShift, sabab éta persis anu dilakukeun ku OpenShift nalika anjeun nyebarkeun aplikasi anjeun nganggo NodeShift. .
Kumaha urang terang sadayana ieu, anjeun naros? Ti Vérsi resmi Node.js resmi, urang ngan nyalin eta jeung dirobah pikeun diri urang sorangan.
Janten, ayeuna hayu urang ngadamel tugas klaster s2i-web-app:
Kami moal nganalisis ieu sacara rinci, tapi ngan ukur fokus kana parameter OUTPUT_DIR:
params:
- name: OUTPUT_DIR
description: The location of the build output directory
default: build
Sacara standar, parameter ieu sami sareng ngawangun, dimana React nempatkeun eusi anu dirakit. kerangka séjén ngagunakeun jalur béda, contona, dina Ember éta dist. Kaluaran tugas kluster munggaran urang bakal janten gambar anu ngandung HTML, JavaScript, sareng CSS anu kami kumpulkeun.
Ngawangun gambar dumasar kana NGINX
Sedengkeun pikeun tugas klaster kadua urang, sakuduna ngawangun hiji gambar basis NGINX pikeun urang, ngagunakeun eusi aplikasi kami geus diwangun. Intina, ieu mangrupikeun bagian tina bagian sateuacana dimana urang ningal ngawangun ranté.
Jang ngalampahkeun ieu, urang - persis sarua di luhur - bakal nyieun tugas cluster webapp-build-runtime:
Upami anjeun ningali kodeu tugas klaster ieu, anjeun tiasa ningali yén éta henteu netepkeun gudang Git anu kami damel atanapi nami gambar anu kami ciptakeun. Urang ngan tangtukeun naon kahayang urang mindahkeun ka Git, atawa gambar tangtu dimana gambar final kudu kaluaran. Éta sababna tugas kluster ieu tiasa dianggo deui nalika damel sareng aplikasi anu sanés.
Sareng di dieu urang anggun ngaléngkah ka titik salajengna ...
Sumberdaya
Janten, sabab, sakumaha anu urang nyarioskeun, tugas kluster kedah umum sabisa, urang kedah nyiptakeun sumber daya anu bakal dianggo salaku input (Repository Git) sareng salaku kaluaran (gambar ahir). Sumberdaya munggaran anu urang butuhkeun nyaéta Git, dimana aplikasi urang cicing, sapertos kieu:
# 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
Di dieu PipelineResource tina tipe git. Konci url dina bagian params nunjuk ka gudang husus sarta nangtukeun cabang master (ieu pilihan, tapi urang nulis eta pikeun completeness).
Ayeuna urang kedah nyiptakeun sumber pikeun gambar dimana hasil tugas s2i-web-app bakal disimpen, ieu dilakukeun sapertos kieu:
# 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
Di dieu PipelineResource mangrupa tipe gambar, sarta nilai parameter url nunjuk ka internal OpenShift Image Registry, husus nu lokasina di webapp-pipeline namespace. Tong hilap ngarobih setélan ieu upami anjeun nganggo rohangan ngaran anu béda.
Sareng tungtungna, sumber daya anu terakhir anu urang peryogikeun ogé bakal tina jinis gambar sareng ieu bakal janten gambar NGINX ahir anu teras dianggo nalika panyebaran:
# 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
Deui, perhatikeun yén sumberdaya ieu nyimpen gambar dina pendaptaran OpenShift internal dina webapp-pipeline namespace.
Pikeun nyiptakeun sadaya sumber ieu sakaligus, kami nganggo paréntah nyiptakeun:
tugas ieu nyokot input (sumber daya gir) jeung kaluaran (diwangun-web-aplikasi-gambar sumberdaya) parameter. Kami ogé masihan éta parameter khusus supados henteu pariksa TLS sabab kami nganggo sertipikat anu ditandatanganan sorangan:
Salaku kalawan tugas saméméhna, urang lulus dina sumberdaya, tapi ayeuna éta diwangun-web-aplikasi-gambar (kaluaran tugas urang saméméhna). Jeung salaku kaluaran urang deui diatur gambar. Kusabab tugas ieu kudu dieksekusi sanggeus hiji saméméhna, urang tambahkeun widang runAfter:
Dua tugas salajengna tanggung jawab pikeun ngagunakeun jasa, rute sareng panyebaran file YAML anu cicing dina diréktori k8s tina aplikasi wéb kami, sareng ogé pikeun ngamutahirkeun penyebaran ieu nalika nyiptakeun gambar anyar. Kami netepkeun dua tugas klaster ieu dina awal tulisan.
Ngamimitian conveyor nu
Janten, sadaya bagian tina pipa kami didamel, sareng kami bakal ngajalankeunana ku paréntah di handap ieu:
$ tkn pipeline start build-and-deploy-react
Dina tahap ieu, garis paréntah dianggo sacara interaktif sareng anjeun kedah milih sumber daya anu cocog pikeun ngaréspon unggal pamundutna: pikeun sumber daya git, pilih web-application-repo, teras pikeun sumber gambar anu munggaran, diwangun-web-aplikasi. -image, sareng tungtungna, pikeun sumber gambar kadua -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
Ayeuna hayu urang pariksa status pipa nganggo paréntah di handap ieu:
$ tkn pipeline logs -f
Sakali jalur pipa parantos ngamimitian sareng aplikasi parantos dipasang, urang tiasa nyuhunkeun rute anu diterbitkeun ku paréntah di handap ieu:
$ oc get route react-pipeline-example --template='http://{{.spec.host}}'
Pikeun visualisasi anu langkung ageung, anjeun tiasa ningali pipa kami dina mode pamekar konsol wéb dina bagian éta Pipelines, sakumaha ditémbongkeun dina Gbr. 1.
Gbr.1. Tinjauan tina ngajalankeun pipelines.
Ngaklik dina pipa jalan mintonkeun rinci tambahan, ditémbongkeun saperti dina Gambar 2.
Sangu. 2. Émbaran tambahan ngeunaan pipa.
Saatos inpormasi lengkep, anjeun tiasa ningali aplikasi anu ngajalankeun dina tampilan Topology, sakumaha ditémbongkeun dina Gbr.3.
Gbr 3. Dibuka pod.
Ngaklik dina bunderan di pojok katuhu luhur ikon muka aplikasi urang, ditémbongkeun saperti dina Gbr. 4.
Sangu. 4. Ngajalankeun aplikasi React.
kacindekan
Janten, kami nunjukkeun kumaha ngajalankeun server pangembangan pikeun aplikasi anjeun dina OpenShift sareng nyingkronkeunana sareng sistem file lokal. Urang ogé nempo kumaha carana simulate template ranté-ngawangun maké OpenShift Pipelines. Sadaya kode conto tina artikel ieu tiasa dipendakan di dieu.