Usetyenziso lwangoku kwi-OpenShift, icandelo lesi-2: ukwakhiwa ngamatyathanga

Molweni nonke! Esi sisithuba sesibini kuthotho lwethu apho sibonisa indlela yokufaka usetyenziso lwewebhu lwangoku kwi-Red Hat OpenShift.

Usetyenziso lwangoku kwi-OpenShift, icandelo lesi-2: ukwakhiwa ngamatyathanga

Kwisithuba sangaphambili, sichukumise kancinci kwisakhono somakhi omtsha we-S2I (umthombo-kumfanekiso) womakhi, olungiselelwe ukwakha kunye nokuhambisa izicelo zewebhu zanamhlanje kwiqonga le-OpenShift. Emva koko sasinomdla kwisihloko sokuthumela ngokukhawuleza isicelo, kwaye namhlanje siza kujonga indlela yokusebenzisa umfanekiso we-S2I njengomfanekiso womakhi "ococekileyo" kwaye udibanise kunye neendibano ze-OpenShift ezinxulumene nazo.

Coca umfanekiso womakhi

Njengoko besitshilo kwiSigaba soku-XNUMX, uninzi lwezicelo zewebhu zanamhlanje zinento ebizwa ngokuba yinqanaba lokwakha, elenza imisebenzi efana nokuguqulelwa kwekhowudi, ukudityaniswa kweefayile ezininzi, kunye nokunciphisa. Iifayile ezifunyenweyo ngenxa yale misebenzi - kwaye le yi-HTML engatshintshiyo, iJavaScript kunye neCSS - zigcinwe kwifolda yemveliso. Indawo yolu lawulo idla ngokuxhomekeke ekubeni zeziphi izixhobo zokwakha ezisetyenziswayo, kwaye kwi-React le izakuba yi-./build incwadi eneenkcukacha (siya kubuyela kule kwinkcukacha ezithe vetshe ngezantsi).

Umthombo-kuya-kuMfanekiso (S2I)

Kule posi asichukumisi isihloko esithi "yintoni i-S2I kunye nendlela yokuyisebenzisa" (unokufunda ngakumbi malunga noku. apha), kodwa kubalulekile ukucaca malunga namanyathelo amabini kule nkqubo ukuqonda ukuba yintoni umfanekiso weWeb App Builder.

Isigaba seNdibano

Inqanaba lendibano lifana kakhulu nendalo kwinto eyenzekayo xa uqhuba i-docker yokwakha kwaye uphele ngomfanekiso omtsha weDocker. Ngokufanelekileyo, eli nqanaba lenzeka xa uqala ukwakha kwiqonga le-OpenShift.

Kwimeko yomfanekiso weWeb App Builder, unoxanduva lokufakela ukuxhomekeka kwesicelo sakho kunye nokusebenzisa ulwakhiwo. hlanganisa iskripthi. Ngokungagqibekanga, umfanekiso womakhi usebenzisa i-npm sebenzisa ulwakhiwo lolwakhiwo, kodwa oku kunokungahoywa ngokuguquguquka kwemekobume ye-NPM_BUILD.

Njengoko besitshilo ngaphambili, indawo egqityiweyo, esele yakhiwe isicelo ixhomekeke kwiziphi izixhobo ozisebenzisayo. Umzekelo, kwimeko ye React izakuba yi ./build folder, kwaye kwiAngular applications iya kuba yi project_name/dist folder. Kwaye, njengoko sele kubonisiwe kwisithuba sangaphambili, indawo yolawulo lwemveliso, emiselwe ukwakha ngokungagqibekanga, inokukhutshwa ngokuguquguquka kwemekobume ye-OUTPUT_DIR. Kulungile, ukusukela ukuba indawo yolawulo lwemveliso yahlukile kwisakhelo ukuya kwisakhelo, ukhuphela ngokulula imveliso eyenziweyo kwisiqulathi seefayili esisemgangathweni emfanekisweni, ongu/opt/apt-root/output. Oku kubalulekile ekuqondeni lonke eli nqaku, kodwa ngoku makhe sijonge ngokukhawuleza kwinqanaba elilandelayo - isigaba sokuqhuba.

baleka isigaba

Eli nqanaba lenzeka xa umnxeba kwi-docker run yenziwa kumfanekiso omtsha owenziwe ngexesha lendibano. Kwenzeka okufanayo xa uhambisa kwiqonga le-OpenShift. Ukuhlala kukho sebenzisa iskripthi isebenzisa nceda imodyuli ukukhonza umxholo ongatshintshiyo obekwe kulawulo lwemveliso esemgangathweni ongentla.

Le ndlela ilungele ukuthunyelwa ngokukhawuleza kwezicelo, kodwa ayikhuthazwa ngokubanzi ukukhonza umxholo omileyo ngale ndlela. Ewe, kuba eneneni sisebenza kuphela umxholo omileyo, asiyidingi iNode.js efakwe ngaphakathi komfanekiso wethu - iseva yewebhu iya kwanela.

Ngamanye amazwi, xa sidibanisa sifuna enye into, xa siphumeza sifuna enye. Kule meko, ukwakha ngamatyathanga kuya kuba luncedo.

Ulwakhiwo olukhonkxiwe

Yile nto babhala ngayo imixokelelwane yakha kuxwebhu lwe-OpenShift:

"Iindibano ezimbini zinokudityaniswa, enye ivelise iqumrhu elihlanganisiweyo kwaye enye ibambe eli qumrhu kumfanekiso owahlukileyo osetyenziselwa ukuqhuba eli qumrhu."

Ngamanye amazwi, sinokusebenzisa umfanekiso weWeb App Builder ukuqhuba ukwakhiwa kwethu, kwaye sisebenzise umfanekiso weseva yewebhu, i-NGINX efanayo, ukukhonza umxholo wethu.

Ngaloo ndlela, sinokusebenzisa umfanekiso weWeb App Builder njengomakhi "ococekileyo" kwaye kwangaxeshanye unomfanekiso omncinci wexesha lokubaleka.

Ngoku makhe sijonge oku ngomzekelo othile.

Uqeqesho siya kusebenzisa isicelo esilula React, eyenziwe kusetyenziswa isixhobo sokwenza-react-app yelayini yomyalelo.

Kuya kusinceda sidibanise yonke into Ifayile yetemplate ye-OpenShift.

Makhe sijonge le fayile ngokweenkcukacha ngakumbi, kwaye siqale ngecandelo leeparamitha.

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

Yonke into apha icacile, kodwa kuyafaneleka ukuthobela ingqalelo kwipharamitha ye-OUTPUT_DIR. Kwisicelo se-React kumzekelo wethu, akukho nto inokukhathazeka ngayo, kuba i-React isebenzisa ixabiso elingagqibekanga njengefayile yemveliso, kodwa kwimeko ye-Angular okanye enye into, le parameter iya kufuna ukutshintshwa njengoko kuyimfuneko.

Ngoku makhe sijonge icandelo le-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'

Jonga umfanekiso wesithathu nowesine. Zombini zichazwa njengemifanekiso yeDocker, kwaye unokubona ngokucacileyo apho zivela khona.

Umfanekiso wesithathu ngumakhi wosetyenziso lwewebhu kwaye uvela kwi-nodeshift/ubi8-s2i-web-app ephawulwe 10.x kwi Docker hub.

Okwesine ngumfanekiso we-NGINX (uguqulelo 1.12) kunye nethegi yamva nje Docker hub.

Ngoku makhe sijonge imifanekiso emibini yokuqala. Zombini azinanto ekuqaleni kwaye zidalwe kuphela ngexesha lesigaba sokwakha. Umfanekiso wokuqala, i-react-web-app-builder, iya kuba sisiphumo sesinyathelo sendibano esiya kudibanisa umfanekiso we-web-app-builder-runtime kunye nekhowudi yethu yomthombo. Yiyo loo nto songeze "-umakhi" kwigama lalo mfanekiso.

Umfanekiso wesibini - react-web-app-runtime - iya kuba sisiphumo sokudibanisa nginx-image-runtime kunye nezinye iifayile ukusuka kwi-react-web-app-builder image. Lo mfanekiso uza kusetyenziswa ngexesha lobeko kwaye uya kuqulatha kuphela iseva yewebhu kunye ne-HTML engatshintshiyo, iJavaScript, iCSS yosetyenziso lwethu.

Ubhidekile? Ngoku makhe sijonge kuqwalaselo lokwakha kwaye kuya kucaca ngakumbi.

Ithemplate yethu inezilungiso ezimbini zokwakha. Nantsi eyokuqala, kwaye ikumgangatho omhle:

  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

Njengoko ubona, umgca oneleyibhile 1 uthi isiphumo solu lwakhiwo siya kufakwa kumfanekiso ofanayo we-react-web-app-builder esiwubonileyo ngaphambilana kwicandelo le-ImageStreams.

Umgca obhalwe 2 ukuxelela ukuba ungayifumana phi ikhowudi. Kwimeko yethu, le yi-git repository, kwaye indawo, i-ref kunye nefolda yomxholo inqunywe yiparameters esele siyibonile ngasentla.

Umgca obhalwe u-3 yinto esele siyibonile kwicandelo leeparamitha. Yongeza i-OUTPUT_DIR imo eguquguqukayo, leyo kumzekelo wethu yakha.
Umgca obhalwe ngo-4 uthi ukusebenzisa i-web-app-builder-runtime image, esele siyibonile kwicandelo le-ImageStream.

Umgca obhalwe 5 uthi sifuna ukusebenzisa i-incremental build ukuba umfanekiso we-S2I uyawuxhasa, kwaye umfanekiso weWeb App Builder uyakwenza. Ekuqalisweni kokuqala, emva kokuba isigaba sendibano sigqityiwe, umfanekiso uya kugcina i-node_modules ifolda kwifayile yogcino. Emva koko, kwimibalekiso elandelayo, umfanekiso uya ngokulula uvule le folda ukunciphisa ixesha lokwakha.

Kwaye ekugqibeleni, umgca obhalwe u-6 ziinqanda nje ezimbalwa ukwenza ukwakhiwa kuqhutywe ngokuzenzekelayo, ngaphandle kokungenelela ngesandla, xa kukho into eguqukayo.

Lilonke olu lulungelelwaniso oluhle lolwakhiwo olusemgangathweni.

Ngoku makhe sijonge kuqwalaselo lolwakhiwo lwesibini. Ifana kakhulu neyokuqala, kodwa kukho umahluko omnye obalulekileyo.

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

Ke uqwalaselo lolwakhiwo lwesibini luyi-react-web-app-runtime, kwaye iqala ngokusemgangathweni.

Umgca obhalwe u-1 awuyonto intsha - isitsho nje ukuba isiphumo sokwakha sifakwe kwi-react-web-app-runtime image.

Umgca obhalwe ngo-2, njengoko kuqwalaselo lwangaphambili, ubonisa ukuba ungayifumana phi ikhowudi yemvelaphi. Kodwa phawula ukuba apha sithi ithathwe emfanekisweni. Ngaphezu koko, ukusuka kumfanekiso esisanda kuwenza - ukusuka kwi-react-web-app-builder (eboniswe kumgca obhalwe 3). Iifayile esifuna ukuzisebenzisa zingaphakathi komfanekiso kwaye indawo yazo ibekwe kumgca obhalwe 4, kwimeko yethu ngu /opt/app-root/output/. Ukuba uyakhumbula, kulapho iifayile ezenziwe ngokusekelwe kwiziphumo zokwakha usetyenziso lwethu zigcinwa.

Ifolda yendawo ekhankanyiweyo kwikota eneleyibhile yesi-5 luluhlu lwangoku nje (oku kuko konke, khumbula, ukusebenza ngaphakathi kwento ethile yomlingo ebizwa ngokuba yi-OpenShift, kwaye hayi kwikhompyuter yakho yendawo).

Icandelo lesicwangciso - umgca obhalwe nge-6 - ufana nokwakhiwa kokuqala kokwakha. Kuphela ngeli xesha siza kusebenzisa i-nginx-image-runtime, esele siyibonile kwicandelo le-ImageStream.

Ekugqibeleni, umgca obhalwe u-7 licandelo lezinto ezibangela ukuba kusebenze oku kwakha rhoqo xa i-react-web-app-builder image itshintsha.

Ngaphandle koko, le template iqulethe ulungelelwaniso oluhle olusemgangathweni, kunye nezinto ezinxulumene neenkonzo kunye neendlela, kodwa asiyi kungena kwiinkcukacha ezininzi kakhulu. Nceda uqaphele ukuba umfanekiso oza kusetyenziswa ngumfanekiso we-react-web-app-runtime.

Ukusasazwa kwesicelo

Ke ngoku njengoko sijonge itemplate, makhe sibone indlela yokuyisebenzisa ukuhambisa isicelo.

Singasebenzisa isixhobo somthengi we-OpenShift esibizwa ngokuba yi-oc ukubeka ithemplate yethu:

$ 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

Umyalelo wokuqala kumfanekiso wekhusi ongentla uyindlela yobunjineli ngabom yokufumana itemplate./openshiftio/application.yaml.

Umyalelo wesibini wenza ngokulula isicelo esitsha esekwe kule template.

Emva kokuba le miyalelo isebenze, siya kubona ukuba sineendibano ezimbini:

Usetyenziso lwangoku kwi-OpenShift, icandelo lesi-2: ukwakhiwa ngamatyathanga

Kwaye sibuyela kwiscreen sokuJonga, siza kubona i-pod eqalisiwe:

Usetyenziso lwangoku kwi-OpenShift, icandelo lesi-2: ukwakhiwa ngamatyathanga

Cofa ikhonkco kwaye siya kusiwa kwi-app yethu, elelona phepha leReact App elingagqibekanga:

Usetyenziso lwangoku kwi-OpenShift, icandelo lesi-2: ukwakhiwa ngamatyathanga

Ukongeza ngo-1

Kubathandi be-Angular sinazo umzekelo isicelo.

Ipatheni apha iyafana, ngaphandle koguqulo lwe OUTPUT_DIR.

Ukongeza ngo-2

Kweli nqaku sisebenzise i-NGINX njengomncedisi wewebhu, kodwa kulula kakhulu ukuyibuyisela nge-Apache, tshintsha nje itemplate kwifayile. NGINX umfanekiso phezu Umfanekiso weApache.

isiphelo

Kwinxalenye yokuqala yolu ngcelele, sibonise indlela yokuthumela ngokukhawuleza usetyenziso lwewebhu lwangoku kwiqonga le-OpenShift. Namhlanje sijonge ukuba yintoni umfanekiso we-Web App kunye nendlela onokudibaniswa ngayo nomncedisi wewebhu ococekileyo njenge-NGINX usebenzisa i-chain builds ukudala ukwakhiwa kwesicelo esilungele ukuveliswa. Kwinqaku elilandelayo nelokugqibela kolu ngcelele, siza kubonisa indlela yokuqhuba iseva yophuhliso yesicelo sakho kwi-OpenShift kwaye siqinisekise ungqamaniso lweefayile zasekhaya kunye nezikude.

Iziqulatho zolu ngcelele lwamanqaku

  • Icandelo loku-1: indlela yokufaka usetyenziso lwewebhu lwangoku ngamanyathelo nje ambalwa;
  • Icandelo 2: Indlela yokusebenzisa umfanekiso omtsha we-S2I kunye nomfanekiso womncedisi we-HTTP okhoyo, njenge-NGINX, usebenzisa iindibano ze-OpenShift ezinxulumene nokuthunyelwa kwemveliso;
  • Icandelo 3: uqhuba njani umncedisi wophuhliso wesicelo sakho kwiqonga le-OpenShift kwaye uyilungelelanise kunye nenkqubo yefayile yendawo.

Izibonelelo ezongezelelweyo

umthombo: www.habr.com

Yongeza izimvo