Izinhlelo zokusebenza zesimanje ku-OpenShift, ingxenye 2: ukwakhiwa okuboshiwe

Sanibonani nonke! Lokhu okuthunyelwe kwesibili ochungechungeni lwethu lapho sibonisa khona ukuthi zifakwa kanjani izinhlelo zokusebenza zewebhu zesimanje ku-Red Hat OpenShift.

Izinhlelo zokusebenza zesimanje ku-OpenShift, ingxenye 2: ukwakhiwa okuboshiwe

Kokuthunyelwe kwangaphambilini, sithinte kancane amandla esithombe somakhi esisha se-S2I (umthombo-kuya-isithombe), esidizayinelwe ukwakha nokuphakela izinhlelo zokusebenza zewebhu zesimanje endaweni yesikhulumi se-OpenShift. Khona-ke saba nesithakazelo esihlokweni sokuthumela ngokushesha isicelo, futhi namuhla sizobheka indlela yokusebenzisa isithombe se-S2I njengesithombe somakhi "esihlanzekile" futhi sihlanganise nemihlangano ye-OpenShift ehlobene.

Hlanza isithombe sikamakhi

Njengoba sishilo Engxenyeni XNUMX, iningi lezinhlelo zokusebenza zewebhu zesimanje zinalokho okubizwa ngesiteji sokwakha, ngokuvamile esenza imisebenzi efana nokuhumusha ikhodi, ukuhlanganisa amafayela amaningi, kanye nokuncishiswa. Amafayela atholwe ngenxa yale misebenzi - futhi lena i-HTML emile, i-JavaScript ne-CSS - agcinwa kufolda yokuphumayo. Indawo yale folda ngokuvamile incike ekutheni yimaphi amathuluzi okwakha asetshenziswayo, futhi ku-React lena kuzoba ifolda ethi ./build (sizobuyela kulokhu ngemininingwane eyengeziwe ngezansi).

Umthombo-kuya-Isithombe (S2I)

Kulokhu okuthunyelwe asithinti isihloko esithi "yini i-S2I nokuthi isetshenziswa kanjani" (ungafunda kabanzi ngalokhu lapha), kodwa kubalulekile ukucaca mayelana nezinyathelo ezimbili kule nqubo ukuze uqonde ukuthi senzani isithombe se-Web App Builder.

Isigaba somhlangano

Isigaba somhlangano sifana kakhulu ngokwemvelo nalokho okwenzekayo lapho usebenzisa i-docker build futhi ugcina ngesithombe esisha se-Docker. Ngakho-ke, lesi sigaba senzeka lapho uqala ukwakha endaweni yesikhulumi se-OpenShift.

Esimeni sesithombe se-Web App Builder, sinesibopho sokufaka okuncikile kohlelo lwakho lokusebenza nokusebenzisa isakhiwo. hlanganisa iskripthi. Ngokuzenzakalelayo, isithombe somakhi sisebenzisa i-npm run build construct, kodwa lokhu kungase kukhishwe ngokuhlukahluka kwemvelo kwe-NPM_BUILD.

Njengoba sishilo ekuqaleni, indawo yohlelo oluqediwe, oseluvele lwakhiwe incike ekutheni usebenzisa maphi amathuluzi. Isibonelo, esimweni se-React lena kuzoba ifolda ethi ./build, futhi ezinhlelweni zokusebenza ze-Angular kuzoba ifolda ye-project_name/dist. Futhi, njengoba sekuvele kubonisiwe kokuthunyelwe kwangaphambilini, indawo yohla lwemibhalo ephumayo, ehlelelwe ukuba yakheke ngokuzenzakalelayo, ingakhishwa ngokushintshashintsha kwemvelo kwe-OUTPUT_DIR. Hhayi-ke, njengoba indawo yefolda yokukhipha ihluka kusukela kuhlaka kuya kohlaka, umane ukopishe okukhiqizwayo kufolda evamile esesithombeni, okungukuthi /opt/apt-root/output. Lokhu kubalulekile ekuqondeni konke kwalesi sihloko, kodwa okwamanje ake sibheke ngokushesha isigaba esilandelayo - isigaba sokugijima.

isigaba sokugijima

Lesi sigaba senzeka lapho ucingo lokuya kudocker lwenziwa esithombeni esisha esidalwe ngesikhathi sesiteji somhlangano. Okufanayo kwenzeka uma usebenzisa ku-OpenShift yesikhulumi. Okuzenzakalelayo sebenzisa iskripthi isebenzisa sebenzisa module ukuze unikeze okuqukethwe okumile okukuhla lwemibhalo olungenhla olujwayelekile lokuphumayo.

Le ndlela ilungele ukuthunyelwa ngokushesha kwezinhlelo zokusebenza, kodwa ngokuvamile ayinconywa ukunikeza okuqukethwe okumile ngale ndlela. Nokho, njengoba empeleni sisebenzisa okuqukethwe okumile kuphela, asidingi i-Node.js efakwe ngaphakathi kwesithombe sethu - iseva yewebhu izokwanela.

Ngamanye amazwi, lapho sihlanganisa sidinga into eyodwa, lapho siqhuba sidinga enye. Kulesi simo, ukwakha ngamaketanga kuyasiza.

Izakhiwo eziboshwe ngamaketanga

Yilokhu ababhala ngakho amaketanga akha kumadokhumenti e-OpenShift:

β€œImihlangano emibili ingahlanganiswa, enye ikhiqize inhlangano ehlanganisiwe bese enye isingathe lelo bhizinisi ngesithombe esihlukile esisetshenziselwa ukuqhuba lelo bhizinisi.”

Ngamanye amazwi, singasebenzisa isithombe se-Web App Builder ukuze siqalise isakhiwo sethu, bese sisebenzisa isithombe seseva yewebhu, i-NGINX efanayo, ukuze sinikeze okuqukethwe kwethu.

Ngakho-ke, singasebenzisa isithombe se-Web App Builder njengomakhi "ohlanzekile" futhi ngesikhathi esifanayo sibe nesithombe esincane sesikhathi sokusebenza.

Manje ake sibheke lokhu ngesibonelo esithile.

Ukuqeqeshwa sizokusebenzisa Isicelo esilula se-React, idalwe kusetshenziswa ithuluzi lomugqa womyalo we-create-react-app.

Kuzosisiza ukuthi sihlanganise konke Ifayela lesifanekiso se-OpenShift.

Ake sibheke leli fayela ngemininingwane eyengeziwe, futhi siqale ngesigaba samapharamitha.

parameters:
  - name: SOURCE_REPOSITORY_URL
    description: The source URL for the application
    displayName: Source URL
    required: true
  - name: SOURCE_REPOSITORY_REF
    description: The branch name for the application
    displayName: Source Branch
    value: master
    required: true
  - name: SOURCE_REPOSITORY_DIR
    description: The location within the source repo of the application
    displayName: Source Directory
    value: .
    required: true
  - name: OUTPUT_DIR
    description: The location of the compiled static files from your web apps builder
    displayName: Output Directory
    value: build
    required: false

Konke lapha kucace kahle, kodwa kufanelekile ukunaka ipharamitha ye-OUTPUT_DIR. Kuhlelo lokusebenza lwe-React esibonelweni sethu, akukho okufanele sikhathazeke ngakho, njengoba i-React isebenzisa inani elizenzakalelayo njengefolda yokukhipha, kodwa esimweni se-Angular noma enye into, le parameter izodinga ukushintshwa njengoba kudingeka.

Manje ake sibheke isigaba se-ImageStreams.

- apiVersion: v1
  kind: ImageStream
  metadata:
    name: react-web-app-builder  // 1 
  spec: {}
- apiVersion: v1
  kind: ImageStream
  metadata:
    name: react-web-app-runtime  // 2 
  spec: {}
- apiVersion: v1
  kind: ImageStream
  metadata:
    name: web-app-builder-runtime // 3
  spec:
    tags:
    - name: latest
      from:
        kind: DockerImage
        name: nodeshift/ubi8-s2i-web-app:10.x
- apiVersion: v1
  kind: ImageStream
  metadata:
    name: nginx-image-runtime // 4
  spec:
    tags:
    - name: latest
      from:
        kind: DockerImage
        name: 'centos/nginx-112-centos7:latest'

Bheka isithombe sesithathu nesesine. Zombili zichazwa njengezithombe ze-Docker, futhi ungabona kahle ukuthi zivelaphi.

Isithombe sesithathu esakhi sohlelo lokusebenza lwewebhu futhi sivela kuhlelo lokusebenza lwe-nodeshift/ubi8-s2i-web olumakwe 10.x ku- Ihabhu le-Docker.

Okwesine yisithombe se-NGINX (inguqulo 1.12) esinomaka wakamuva ovuliwe Ihabhu le-Docker.

Manje ake sibheke izithombe ezimbili zokuqala. Zombili azinalutho ekuqaleni futhi zidalwe kuphela phakathi nesigaba sokwakha. Isithombe sokuqala, i-react-web-app-builder, sizoba umphumela wesinyathelo sokuhlanganiswa esizohlanganisa isithombe se-web-app-builder-runtime kanye nekhodi yethu yomthombo. Yingakho sengeze u-β€œ-builder” egameni lalesi sithombe.

Isithombe sesibili - i-react-web-app-runtime - sizoba umphumela wokuhlanganisa i-nginx-image-runtime namanye amafayela asuka kusithombe se-react-web-app-builder. Lesi sithombe sizophinda sisetshenziswe ngesikhathi sokuthunyelwa futhi sizoqukatha kuphela iseva yewebhu kanye ne-HTML emile, i-JavaScript, i-CSS yohlelo lwethu lokusebenza.

Udidekile? Manje ake sibheke ukucushwa kokwakha futhi kuzocaca kancane.

Isifanekiso sethu sinokucushwa okubili kokwakha. Nansi eyokuqala, futhi isezingeni elihle:

  apiVersion: v1
  kind: BuildConfig
  metadata:
    name: react-web-app-builder
  spec:
    output:
      to:
        kind: ImageStreamTag
        name: react-web-app-builder:latest // 1
    source:   // 2 
      git:
        uri: ${SOURCE_REPOSITORY_URL}
        ref: ${SOURCE_REPOSITORY_REF}
      contextDir: ${SOURCE_REPOSITORY_DIR}
      type: Git
    strategy:
      sourceStrategy:
        env:
          - name: OUTPUT_DIR // 3 
            value: ${OUTPUT_DIR}
        from:
          kind: ImageStreamTag
          name: web-app-builder-runtime:latest // 4
        incremental: true // 5
      type: Source
    triggers: // 6
    - github:
        secret: ${GITHUB_WEBHOOK_SECRET}
      type: GitHub
    - type: ConfigChange
    - imageChange: {}
      type: ImageChange

Njengoba ubona, umugqa onelebula 1 uthi umphumela walesi sakhiwo uzobekwa esithombeni esifanayo se-react-web-app-builder esisibone ngaphambili kancane esigabeni se-ImageStreams.

Umugqa olebulwe ngokuthi 2 ukutshela ukuthi ikhodi ungayithola kuphi. Esimweni sethu, lena inqolobane ye-git, futhi indawo, ifolda ye-ref kanye nefolda yokuqukethwe kunqunywa imingcele esesivele siyibonile ngenhla.

Ulayini obhalwe 3 yilokho esesivele sikubonile esigabeni samapharamitha. Yengeza i-OUTPUT_DIR imvelo eguquguqukayo, okuyinto esibonelweni sethu yokwakha.
Ulayini obhalwe ukuthi 4 uthi sebenzisa isithombe se-web-app-builder-runtime, esesivele sisibonile esigabeni se-ImageStream.

Ulayini obhalwe ukuthi 5 uthi sifuna ukusebenzisa isakhiwo esikhuphukayo uma isithombe se-S2I sisisekela, kanye nesithombe se-Web App Builder. Ekuqalisweni kokuqala, ngemva kokuqedwa kwesiteji somhlangano, isithombe sizogcina ifolda ye-node_modules efayeleni lengobo yomlando. Bese, ekugijimeni okulandelayo, isithombe sizomane sivule le folda ukuze kuncishiswe isikhathi sokwakha.

Futhi ekugcineni, umugqa obhalwe ukuthi 6 uyizisusa ezimbalwa zokwenza ukwakhiwa kusebenze ngokuzenzakalela, ngaphandle kokungenelela okwenziwa ngesandla, uma okuthile kushintsha.

Sekukonke lokhu kuwukucushwa okuhle okujwayelekile kokwakha.

Manje ake sibheke ukucushwa kokwakha kwesibili. Ifana kakhulu neyokuqala, kodwa kunomehluko owodwa obalulekile.

apiVersion: v1
  kind: BuildConfig
  metadata:
    name: react-web-app-runtime
  spec:
    output:
      to:
        kind: ImageStreamTag
        name: react-web-app-runtime:latest // 1
    source: // 2
      type: Image
      images:                              
        - from:
            kind: ImageStreamTag
            name: react-web-app-builder:latest // 3
          paths:
            - sourcePath: /opt/app-root/output/.  // 4
              destinationDir: .  // 5
             
    strategy: // 6
      sourceStrategy:
        from:
          kind: ImageStreamTag
          name: nginx-image-runtime:latest
        incremental: true
      type: Source
    triggers:
    - github:
        secret: ${GITHUB_WEBHOOK_SECRET}
      type: GitHub
    - type: ConfigChange
    - type: ImageChange
      imageChange: {}
    - type: ImageChange
      imageChange:
        from:
          kind: ImageStreamTag
          name: react-web-app-builder:latest // 7

Ngakho-ke ukucushwa kwesibili kokwakha yi-react-web-app-runtime, futhi kuqala ngendlela evamile.

Ulayini obhalwe 1 awuyona into entsha - uvele uthi umphumela wokwakha ufakwe esithombeni se-react-web-app-runtime.

Umugqa olebulwe ngokuthi 2, njengasekucushweni kwangaphambilini, ubonisa ukuthi ikhodi yomthombo ingayithola kuphi. Kodwa qaphela ukuthi lapha sithi ithathwe esithombeni. Ngaphezu kwalokho, kusukela esithombeni esisanda kusidala - kusuka ku-react-web-app-builder (ekhonjiswe emugqeni onelebula 3). Amafayela esifuna ukuwasebenzisa angaphakathi kwesithombe futhi indawo yawo lapho isethwe emgqeni obhalwe ukuthi 4, esimweni sethu ngu/opt/app-root/output/. Uma ukhumbula, kulapho amafayela akhiqizwe ngokusekelwe emiphumeleni yokwakha uhlelo lwethu lokusebenza agcinwa khona.

Ifolda okuyiwa kuyo eshiwo ethemini enelebula 5 imane nje iyinkomba yamanje (yilokhu kuphela, khumbula, isebenza ngaphakathi kwento ethile engumlingo ebizwa ngokuthi i-OpenShift, hhayi kukhompyutha yangakini).

Isigaba samasu - umugqa obhalwe ukuthi 6 - ubuye ufane nokucushwa kokwakha kokuqala. Kulokhu kuphela lapho sizosebenzisa i-nginx-image-runtime, esesivele siyibonile esigabeni se-ImageStream.

Okokugcina, umugqa olebulwe ngokuthi 7 uyisigaba sezibangeli ezizokwenza kusebenze lesi sakhiwo ngaso sonke isikhathi uma isithombe se-react-web-app-builder sishintsha.

Uma kungenjalo, lesi sifanekiso siqukethe ukucushwa okujwayelekile okujwayelekile okuhle, kanye nezinto ezihlobene namasevisi nemizila, kodwa ngeke singene kuleyo mininingwane eminingi kakhulu. Sicela wazi ukuthi isithombe esizosetshenziswa yisithombe se-react-web-app-runtime.

Ukuthunyelwa Kohlelo

Ngakho-ke njengoba sesibheke isifanekiso, ake sibone ukuthi singasisebenzisa kanjani ukuze sikhiphe uhlelo lokusebenza.

Singasebenzisa ithuluzi leklayenti le-OpenShift elibizwa ngokuthi oc ukuze sikhiphe isifanekiso sethu:

$ find . | grep openshiftio | grep application | xargs -n 1 oc apply -f

$ oc new-app --template react-web-app -p SOURCE_REPOSITORY_URL=https://github.com/lholmquist/react-web-app

Umyalo wokuqala kusithombe-skrini esingenhla uyindlela yobunjiniyela ngamabomu yokuthola isifanekiso./openshiftio/application.yaml.

Umyalo wesibili umane udale uhlelo olusha olusekelwe kulesi sifanekiso.

Ngemva kokusebenza kwale miyalo, sizobona ukuthi sinemihlangano emibili:

Izinhlelo zokusebenza zesimanje ku-OpenShift, ingxenye 2: ukwakhiwa okuboshiwe

Futhi ukubuyela esikrinini sokubuka konke, sizobona i-pod yethuliwe:

Izinhlelo zokusebenza zesimanje ku-OpenShift, ingxenye 2: ukwakhiwa okuboshiwe

Chofoza isixhumanisi futhi sizoyiswa kuhlelo lwethu lokusebenza, okuyikhasi elizenzakalelayo le-React App:

Izinhlelo zokusebenza zesimanje ku-OpenShift, ingxenye 2: ukwakhiwa okuboshiwe

Isengezo sango-1

Kubathandi be-Angular nathi sinabo isibonelo isicelo.

Iphethini lapha iyafana, ngaphandle kokuhluka kwe-OUTPUT_DIR.

Isengezo sango-2

Kulesi sihloko sisebenzise i-NGINX njengeseva yewebhu, kodwa kulula kakhulu ukuyifaka esikhundleni se-Apache, vele ushintshe ithempulethi efayeleni. Isithombe se-NGINX on Isithombe se-Apache.

isiphetho

Engxenyeni yokuqala yalolu chungechunge, sibonise ukuthi zifakwa kanjani ngokushesha izinhlelo zokusebenza zewebhu zesimanje endaweni yesikhulumi se-OpenShift. Namuhla sibheke ukuthi isithombe se-Web App senzani nokuthi singahlanganiswa kanjani nesiphakeli sewebhu esihlanzekile njenge-NGINX kusetshenziswa ukwakhiwa okuboshiwe ukuze kwakhiwe uhlelo lokusebenza olulungele ukukhiqiza. Esihlokweni esilandelayo nesokugcina kulolu chungechunge, sizobonisa indlela yokusebenzisa iseva yokuthuthukisa yohlelo lwakho lokusebenza ku-OpenShift futhi siqinisekise ukuvumelanisa kwamafayela endawo nakude.

Okuqukethwe kwalolu chungechunge lwezihloko

  • Ingxenye 1: uzisebenzisa kanjani izinhlelo zokusebenza zewebhu zesimanje ngezinyathelo ezimbalwa nje;
  • Ingxenye 2: Indlela yokusebenzisa isithombe esisha se-S2I esinesithombe seseva ye-HTTP esikhona, njenge-NGINX, kusetshenziswa imihlangano ye-OpenShift ehlotshaniswayo yokuthunyelwa kokukhiqiza;
  • Ingxenye 3: uyisebenzisa kanjani iseva yokuthuthukisa yohlelo lwakho lokusebenza endaweni ye-OpenShift futhi uyivumelanise nohlelo lwamafayela wendawo.

Izinsiza Ezengeziwe

Source: www.habr.com

Engeza amazwana