Aplikasyon modèn sou OpenShift, pati 3: OpenShift kòm yon anviwònman devlopman ak OpenShift Pipelines

Bonjou tout moun sou blog sa a! Sa a se twazyèm pòs nan yon seri kote nou montre kijan pou deplwaye aplikasyon entènèt modèn sou Red Hat OpenShift.

Aplikasyon modèn sou OpenShift, pati 3: OpenShift kòm yon anviwònman devlopman ak OpenShift Pipelines

Nan de pòs anvan yo, nou te montre ki jan yo deplwaye aplikasyon entènèt modèn nan jis kèk etap ak ki jan yo sèvi ak yon nouvo imaj S2I ansanm ak yon imaj sèvè HTTP off-etajè, tankou NGINX, lè l sèvi avèk chèn bati pou òganize deplwaman pwodiksyon. .

Jodi a nou pral montre ki jan yo kouri yon sèvè devlopman pou aplikasyon w lan sou platfòm OpenShift la epi senkronize li ak sistèm dosye lokal la, epi tou pale sou kisa OpenShift Pipelines yo ye ak kijan yo ka itilize kòm yon altènativ a asanble lye yo.

OpenShift kòm yon anviwònman devlopman

Devlopman workflow

Kòm deja endike nan premye pòs, pwosesis devlopman tipik pou aplikasyon entènèt modèn yo se tou senpleman kèk kalite "sèvè devlopman" ki swiv chanjman nan dosye lokal yo. Lè yo rive, bati aplikasyon an deklanche epi li mete ajou nan navigatè a.

Nan pifò kad modèn, tankou yon "sèvè devlopman" bati nan zouti liy lòd ki koresponn yo.

Egzanp lokal

Premyèman, kite a wè ki jan sa a travay lè w ap kouri aplikasyon lokalman. Ann pran aplikasyon an kòm yon egzanp Reyaji soti nan atik anvan yo, byenke prèske menm konsèp workflow aplike nan tout lòt kad modèn.
Se konsa, pou kòmanse "dev sèvè a" nan egzanp React nou an, nou pral antre nan lòd sa a:

$ npm run start

Lè sa a, nan fenèt tèminal la nou pral wè yon bagay tankou sa a:

Aplikasyon modèn sou OpenShift, pati 3: OpenShift kòm yon anviwònman devlopman ak OpenShift Pipelines

Epi aplikasyon nou an ap louvri nan navigatè default la:

Aplikasyon modèn sou OpenShift, pati 3: OpenShift kòm yon anviwònman devlopman ak OpenShift Pipelines

Koulye a, si nou fè chanjman nan dosye a, aplikasyon an ta dwe mete ajou nan navigatè a.

OK, tout bagay klè ak devlopman nan mòd lokal, men ki jan yo reyalize menm bagay la sou OpenShift?

Sèvè devlopman sou OpenShift

Si w sonje, nan pòs anvan, nou te gade sa yo rele faz kouri nan imaj S2I a epi nou te wè ke pa default, modil la sèvi responsab pou sèvis aplikasyon entènèt nou an.

Sepandan, si ou pran yon gade pi pre kouri script apati egzanp sa a, li genyen varyab anviwònman $NPM_RUN, ki pèmèt ou egzekite kòmandman ou a.

Pou egzanp, nou ka itilize modil la nodeshift pou deplwaye aplikasyon nou an:

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

Remak: Egzanp ki anwo a abreje pou ilistre lide jeneral la.

Isit la nou te ajoute varyab anviwònman an NPM_RUN nan deplwaman nou an, ki di ègzekutabl la kouri lòd la kòmanse fil, ki kòmanse sèvè devlopman React andedan gous OpenShift nou an.

Si ou gade nan boutèy la nan yon gous k ap kouri, li pral gade yon bagay tankou sa a:

Aplikasyon modèn sou OpenShift, pati 3: OpenShift kòm yon anviwònman devlopman ak OpenShift Pipelines

Natirèlman, tout bagay sa yo pral pa gen anyen jiskaske nou ka senkronize kòd lokal la ak kòd la, ki se tou kontwole pou chanjman, men ap viv sou yon sèvè aleka.

Senkronize kòd aleka ak lokal

Erezman, nodeshift ka fasilman ede ak senkronizasyon, epi ou ka itilize kòmandman gade nan swiv chanjman yo.

Se konsa, apre nou te kouri lòd la deplwaye sèvè devlopman pou aplikasyon nou an, nou ka san danje sèvi ak lòd sa a:

$ npx nodeshift watch

Kòm yon rezilta, yo pral fè yon koneksyon ak gous la kouri ke nou te kreye yon ti kras pi bonè, senkronizasyon nan dosye lokal nou yo ak gwoup la aleka yo pral aktive, ak dosye yo sou sistèm lokal nou an ap kòmanse kontwole pou chanjman.

Se poutèt sa, si kounye a nou mete ajou dosye a src/App.js, sistèm nan pral reyaji a chanjman sa yo, kopye yo nan gwoup la aleka epi kòmanse sèvè devlopman an, ki pral Lè sa a, mete ajou aplikasyon nou an nan navigatè a.

Pou konplete foto a, ann montre ki jan tout kòmandman sa yo sanble:

$ 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

Kòmandman an gade se yon abstraksyon sou tèt lòd la oc rsync, ou ka aprann plis sou fason li fonksyone. isit la.

Sa a se te yon egzanp pou React, men egzak menm metòd la ka itilize ak lòt kad, jis mete varyab anviwònman NPM_RUN la jan sa nesesè.

Openshift Pipelines

Aplikasyon modèn sou OpenShift, pati 3: OpenShift kòm yon anviwònman devlopman ak OpenShift Pipelines

Apre sa, nou pral pale sou yon zouti tankou OpenShift Pipelines ak kijan li ka itilize kòm yon altènativ a chèn bati.

Ki sa ki OpenShift Pipelines

OpenShift Pipelines se yon sistèm entegrasyon ak livrezon kontinyèl CI/CD ki natif natal ki fèt pou òganize tiyo lè l sèvi avèk Tekton. Tekton se yon fleksib sous louvri Kubernetes-natif fondasyon CI/CD ki pèmèt ou otomatize deplwaman sou plizyè platfòm (Kubernetes, san sèvè, machin vityèl, elatriye) pa abstrè nan kouch ki kache a.

Konprann atik sa a mande kèk konesans nan Pipelines, kidonk nou rekòmande pou w li premye liv ofisyèl.

Mete kanpe anviwònman travay ou

Pou jwe ak egzanp ki nan atik sa a, premye bezwen prepare anviwònman travay ou:

  1. Enstale ak konfigirasyon yon gwoup OpenShift 4. Egzanp nou yo itilize CodeReady Containers (CRD) pou sa, enstriksyon enstalasyon yo ka jwenn. isit la.
  2. Apre gwoup la pare, ou bezwen enstale Pipeline Operator sou li. Ou pa bezwen pè, li fasil, enstriksyon enstalasyon isit la.
  3. Download Tekton CLI (tkn) isit la.
  4. Kouri zouti liy komand create-react-app pou kreye yon aplikasyon ke w pral deplwaye (sa a se yon aplikasyon senp. Reyaji).
  5. (Si ou vle) Klone repozitwa a pou kouri aplikasyon egzanp lan lokalman ak npm enstale ak Lè sa a, npm kòmanse.

Repozitwa aplikasyon an pral gen tou yon katab k8s, ki pral genyen YAML Kubernetes/OpenShift yo itilize pou deplwaye aplikasyon an. Pral gen Tasks, ClusterTasks, Resous ak Pipelines ke nou pral kreye nan sa a. depo.

An n kòmanse

Premye etap la pou egzanp nou an se kreye yon nouvo pwojè nan gwoup la OpenShift. Ann rele pwojè sa a webapp-pipeline epi kreye li ak lòd sa a:

$ oc new-project webapp-pipeline

Non pwojè sa a ap parèt nan kòd la pita, kidonk si ou deside bay non li yon lòt bagay, pa bliye modifye kòd egzanp lan kòmsadwa. Kòmanse nan pwen sa a, nou pa pral ale tèt-desann, men anba-up: se sa ki, nou pral premye kreye tout eleman yo nan CONVEYOR a, epi sèlman Lè sa a, CONVEYOR nan tèt li.

Se konsa, anvan tout bagay...

Travay

Ann kreye yon koup nan travay, ki pral Lè sa a, ede deplwaye aplikasyon an nan tiyo nou an. Premye travay la - apply_manifests_task - responsab pou aplike YAML resous Kubernetes sa yo (sèvis, deplwaman ak wout) ki sitiye nan katab k8s aplikasyon nou an. Dezyèm travay la - update_deployment_task - responsab pou mete ajou yon imaj ki deja deplwaye ak youn ki kreye pa tiyo nou an.

Pa enkyete w si li poko klè. An reyalite, travay sa yo se yon bagay tankou sèvis piblik, epi nou pral gade yo nan plis detay yon ti kras pita. Pou kounye a, ann jis kreye yo:

$ 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

Lè sa a, lè l sèvi avèk lòd tkn CLI a, nou pral tcheke si travay yo te kreye:

$ tkn task ls

NAME                AGE
apply-manifests     1 minute ago
update-deployment   1 minute ago

Remak: Sa yo se travay lokal pou pwojè ou ye kounye a.

Travay gwoup yo

Travay gwoup yo fondamantalman menm jan ak travay ki senp. Sa vle di, li se yon koleksyon etap ki kapab itilize ankò ki konbine nan yon fason oswa yon lòt lè w ap kouri yon travay espesifik. Diferans lan se ke yon travay gwoup disponib toupatou nan gwoup la. Pou wè lis travay gwoup ki kreye otomatikman lè w ajoute Pipeline Operator, nou pral sèvi ak kòmandman tkn CLI ankò:

$ 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

Koulye a, ann kreye de travay gwoup. Premye a pral jenere imaj S2I a epi voye li nan rejis entèn OpenShift la; dezyèm lan se bati imaj nou an ki baze sou NGINX, lè l sèvi avèk aplikasyon an nou te deja bati kòm kontni.

Kreye epi voye imaj la

Lè n ap kreye premye travay la, n ap repete sa nou te deja fè nan atik anvan an konsènan asanble lye yo. Sonje byen, nou te itilize imaj S2I a (ubi8-s2i-web-app) pou "konstwi" aplikasyon nou an, epi nou te fini ak yon imaj ki estoke nan rejis entèn OpenShift la. Koulye a, nou pral sèvi ak imaj aplikasyon entènèt S2I sa a pou kreye yon DockerFile pou aplikasyon nou an epi answit sèvi ak Buildah pou fè konstriksyon aktyèl la epi pouse imaj ki kapab lakòz nan rejis entèn OpenShift la, paske se egzakteman sa OpenShift fè lè ou deplwaye aplikasyon w yo lè l sèvi avèk NodeShift. .

Ki jan nou fè konnen tout bagay sa yo, ou mande? Soti nan vèsyon ofisyèl ofisyèl Node.js, nou jis kopye li epi modifye li pou tèt nou.

Se konsa, kounye a ann kreye travay gwoup s2i-web-app:

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

Nou pa pral analize sa a an detay, men nou pral sèlman konsantre sou paramèt OUTPUT_DIR:

params:
      - name: OUTPUT_DIR
        description: The location of the build output directory
        default: build

Pa default, paramèt sa a egal a bati, ki se kote React mete kontni an reyini. Lòt kad sèvi ak chemen diferan, pou egzanp, nan Ember li se dist. Pwodiksyon premye travay gwoup nou an pral yon imaj ki gen HTML, JavaScript, ak CSS nou kolekte.

Bati yon imaj ki baze sou NGINX

Kòm pou dezyèm travay gwoup nou an, li ta dwe bati yon imaj ki baze sou NGINX pou nou, lè l sèvi avèk kontni an nan aplikasyon an nou te deja bati. Esansyèlman, sa a se pati nan seksyon anvan an kote nou te gade nan chenn bati.

Pou fè sa, nou - egzakteman menm jan ak jis pi wo a - pral kreye yon travay gwoup webapp-build-runtime:

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

Si w gade kòd travay gwoup sa yo, ou ka wè li pa presize depo Git n ap travay ak non imaj n ap kreye yo. Nou sèlman presize ki sa egzakteman nou ap transfere nan Git, oswa yon sèten imaj kote imaj final la ta dwe pwodiksyon. Se poutèt sa travay gwoup sa yo ka reyitilize lè w ap travay ak lòt aplikasyon.

Ak isit la nou grasyeuz ale nan pwochen pwen an ...

Resous

Se konsa, depi, jan nou sot di, travay gwoup yo ta dwe jeneral ke posib, nou bezwen kreye resous ki pral itilize kòm antre (repozitwa Git la) ak kòm pwodiksyon (imaj final yo). Premye resous nou bezwen se Git, kote aplikasyon nou an abite, yon bagay tankou sa a:

# 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

Isit la PipelineResource se kalite git. Kle url la nan seksyon param yo lonje dwèt sou yon depo espesifik epi li presize branch mèt la (sa a se opsyonèl, men nou ekri li pou konplè).

Koulye a, nou bezwen kreye yon resous pou imaj la kote rezilta yo nan travay la s2i-web-app yo pral sove, sa a se fè tankou sa a:

# 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

Isit la PipelineResource a se nan kalite imaj, ak valè a nan paramèt url pwen nan Rejis Imaj OpenShift entèn la, espesyalman youn nan ki sitiye nan webapp-pipeline namespace la. Pa bliye chanje paramèt sa a si w ap itilize yon espas non diferan.

Epi finalman, dènye resous nou bezwen an pral tou nan kalite imaj epi sa a pral imaj NGINX final la ki pral Lè sa a, itilize pandan deplwaman:

# 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

Ankò, sonje ke resous sa a estoke imaj la nan rejis OpenShift entèn la nan espas non webapp-pipeline.

Pou kreye tout resous sa yo nan yon fwa, nou itilize lòd la kreye:

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

Ou ka asire w ke resous yo te kreye tankou sa a:

$ tkn resource ls

Tiyo CONVEYOR

Kounye a ke nou gen tout eleman ki nesesè yo, se pou nou rasanble yon tiyo nan men yo pa kreye li ak lòd sa a:

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

Men, anvan nou kouri lòd sa a, an n gade nan eleman sa yo. Premye a se non an:

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

Lè sa a, nan seksyon an spesifikasyon nou wè yon endikasyon sou resous yo nou te kreye pi bonè:

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

Lè sa a, nou kreye travay yo ke tiyo nou an bezwen ranpli. Premye a tout, li dwe egzekite travay la s2i-web-app nou te deja kreye:

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

Travay sa a pran paramèt opinyon (resous gir) ak pwodiksyon (resous bati-web-aplikasyon-imaj). Nou menm tou nou pase yon paramèt espesyal pou li pa verifye TLS paske nou ap itilize sètifika ki siyen tèt nou:

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

Pwochen travay la se prèske menm bagay la, sèlman isit la travay gwoup webapp-build-runtime nou te deja kreye yo rele:

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

Menm jan ak travay anvan an, nou pase nan yon resous, men kounye a li nan bati-web-aplikasyon-imaj (pwodiksyon an nan travay anvan nou an). Epi kòm yon pwodiksyon nou ankò mete imaj la. Depi travay sa a dwe egzekite apre youn anvan an, nou ajoute jaden an 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

De pwochen travay yo responsab pou itilize sèvis, wout ak fichye deplwaman YAML ki rete nan anyè k8s aplikasyon entènèt nou an, epi tou pou mete ajou deplwaman sa a lè w ap kreye nouvo imaj. Nou te defini de travay gwoup sa yo nan kòmansman atik la.

Kòmanse CONVEYOR la

Se konsa, tout pati nan tiyo nou yo kreye, epi nou pral kouri li ak lòd sa a:

$ tkn pipeline start build-and-deploy-react

Nan etap sa a, yo itilize liy kòmandman an entèaktif epi ou bezwen chwazi resous ki apwopriye yo an repons a chak nan demann li yo: pou resous git la, chwazi web-application-repo, Lè sa a, pou premye resous imaj la, bati-web-aplikasyon. -imaj, epi finalman, pou dezyèm resous imaj -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

Koulye a, ann tcheke estati tiyo a lè l sèvi avèk lòd sa a:

$ tkn pipeline logs -f

Yon fwa tiyo a te kòmanse ak aplikasyon an te deplwaye, nou ka mande wout la pibliye ak lòd sa a:

$ oc get route react-pipeline-example --template='http://{{.spec.host}}'

Pou pi gwo vizyalizasyon, ou ka wè tiyo nou an nan mòd Developer konsole entènèt la nan seksyon an Pipelines, jan yo montre nan Fig. 1.

Aplikasyon modèn sou OpenShift, pati 3: OpenShift kòm yon anviwònman devlopman ak OpenShift Pipelines

Fig.1. Revizyon sou tiyo kouri.

Klike sou yon tiyo kap kouri montre plis detay, jan yo montre nan Figi 2.

Aplikasyon modèn sou OpenShift, pati 3: OpenShift kòm yon anviwònman devlopman ak OpenShift Pipelines

Diri. 2. Lòt enfòmasyon sou tiyo a.

Apre plis enfòmasyon, ou ka wè aplikasyon kouri nan gade nan Topoloji, jan yo montre nan Fig.3.

Aplikasyon modèn sou OpenShift, pati 3: OpenShift kòm yon anviwònman devlopman ak OpenShift Pipelines

Fig 3. Lanse gous.

Klike sou sèk ki nan kwen anwo dwat nan ikòn ouvè aplikasyon nou an, jan yo montre nan Fig. 4.

Aplikasyon modèn sou OpenShift, pati 3: OpenShift kòm yon anviwònman devlopman ak OpenShift Pipelines

Diri. 4. Kouri aplikasyon React.

Konklizyon

Se konsa, nou te montre kouman yo kouri yon sèvè devlopman pou aplikasyon w lan sou OpenShift epi senkronize li ak sistèm dosye lokal la. Nou te gade tou ki jan yo simulation yon modèl chèn-build lè l sèvi avèk OpenShift Pipelines. Tout kòd egzanp nan atik sa a ka jwenn isit la.

Resous adisyonèl (EN)

Anons sou webinar kap vini yo

N ap kòmanse yon seri webinar Vandredi sou eksperyans natif natal lè l sèvi avèk Red Hat OpenShift Container Platform ak Kubernetes:

Sous: www.habr.com

Add nouvo kòmantè