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.

Aplikasi modéren dina OpenShift, bagian 3: OpenShift salaku lingkungan pamekaran sareng OpenShift Pipelines

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:

Aplikasi modéren dina OpenShift, bagian 3: OpenShift salaku lingkungan pamekaran sareng OpenShift Pipelines

Sareng aplikasi kami bakal dibuka dina browser standar:

Aplikasi modéren dina OpenShift, bagian 3: OpenShift salaku lingkungan pamekaran sareng OpenShift Pipelines

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:

$ npx nodeshift --deploy.env NPM_RUN="yarn start" --dockerImage=nodeshift/ubi8-s2i-web-app

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:

Aplikasi modéren dina OpenShift, bagian 3: OpenShift salaku lingkungan pamekaran sareng OpenShift Pipelines

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:

$ 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

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

Aplikasi modéren dina OpenShift, bagian 3: OpenShift salaku lingkungan pamekaran sareng OpenShift 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:

  1. Pasang sareng konpigurasikeun klaster OpenShift 4. Conto kami nganggo CodeReady Containers (CRD) pikeun ieu, petunjuk instalasi anu tiasa dipendakan di dieu.
  2. Saatos kluster parantos siap, anjeun kedah pasang Operator Pipa di dinya. Ulah sieun, éta gampang, parentah instalasi di dieu.
  3. Unduh Tekton CLI (tkn) di dieu.
  4. Jalankeun alat garis paréntah create-react-app pikeun nyiptakeun aplikasi anu anjeun teras-terasan bakal disebarkeun (ieu mangrupikeun aplikasi saderhana. mere tanggapan).
  5. (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:

$ 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

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:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/s2i-web-app-task.yaml

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:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/webapp-build-runtime-task.yaml

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:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/resources/resource.yaml

Anjeun tiasa mastikeun yén sumber daya parantos diciptakeun sapertos kieu:

$ tkn resource ls

Pipa conveyor

Ayeuna urang gaduh sadaya komponén anu diperyogikeun, hayu urang ngumpul pipa ti aranjeunna ku nyiptakeunana nganggo paréntah di handap ieu:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/pipelines/build-and-deploy-react.yaml

Tapi sateuacan urang ngajalankeun paréntah ieu, hayu urang tingali komponén ieu. Anu kahiji nyaéta ngaran:

apiVersion: tekton.dev/v1alpha1
kind: Pipeline
metadata:
  name: build-and-deploy-react

Teras dina bagian spésifikasi urang ningali indikasi sumber daya anu urang jieun saméméhna:

spec:
  resources:
    - name: web-application-repo
      type: git
    - name: built-web-application-image
      type: image
    - name: runtime-web-application-image
      type: image

Urang lajeng nyieun tugas nu pipa urang kudu ngalengkepan. Anu mimiti, éta kedah ngaéksekusi tugas s2i-web-app anu kami parantos nyiptakeun:

tasks:
    - name: build-web-application
      taskRef:
        name: s2i-web-app
        kind: ClusterTask

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:

resources:
        inputs:
          - name: source
            resource: web-application-repo
        outputs:
          - name: image
            resource: built-web-application-image
      params:
        - name: TLSVERIFY
          value: "false"

Tugas salajengna ampir sami, ngan di dieu tugas kluster webapp-build-runtime anu parantos kami jieun disebut:

name: build-runtime-image
    taskRef:
      name: webapp-build-runtime
      kind: ClusterTask

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:

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

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.

Aplikasi modéren dina OpenShift, bagian 3: OpenShift salaku lingkungan pamekaran sareng OpenShift Pipelines

Gbr.1. Tinjauan tina ngajalankeun pipelines.

Ngaklik dina pipa jalan mintonkeun rinci tambahan, ditémbongkeun saperti dina Gambar 2.

Aplikasi modéren dina OpenShift, bagian 3: OpenShift salaku lingkungan pamekaran sareng OpenShift Pipelines

Sangu. 2. Émbaran tambahan ngeunaan pipa.

Saatos inpormasi lengkep, anjeun tiasa ningali aplikasi anu ngajalankeun dina tampilan Topology, sakumaha ditémbongkeun dina Gbr.3.

Aplikasi modéren dina OpenShift, bagian 3: OpenShift salaku lingkungan pamekaran sareng OpenShift Pipelines

Gbr 3. Dibuka pod.

Ngaklik dina bunderan di pojok katuhu luhur ikon muka aplikasi urang, ditémbongkeun saperti dina Gbr. 4.

Aplikasi modéren dina OpenShift, bagian 3: OpenShift salaku lingkungan pamekaran sareng OpenShift Pipelines

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.

Sumberdaya tambahan (EN)

Announcements ngeunaan webinars upcoming

Kami ngamimitian séri wéb Jumaah ngeunaan pangalaman asli nganggo Red Hat OpenShift Container Platform sareng Kubernetes:

sumber: www.habr.com

Tambahkeun komentar