Serîlêdanên nûjen ên li ser OpenShift, beş 2: avahiyên zincîrkirî

Silav hemû! Ev posta duyemîn e di rêza me de ku tê de em destnîşan dikin ka meriv çawa sepanên webê yên nûjen li ser Red Hat OpenShift bicîh dike.

Serîlêdanên nûjen ên li ser OpenShift, beş 2: avahiyên zincîrkirî

Di nivîsa paşîn de, me hinekî dest da ser kapasîteyên wêneya çêkerê nû S2I (çavkanî-ber-wêneyê), ku ji bo çêkirin û bicihkirina sepanên tevna nûjen li ser platforma OpenShift hatî çêkirin. Dûv re em eleqedar bûn bi mijara bilez danasîna serîlêdanê, û îro em ê binihêrin ka meriv çawa wêneyek S2I wekî wêneyek çêker "paqij" bikar tîne û wê bi meclîsên OpenShift-ê yên têkildar re berhev dike.

Wêneyê avakerê paqij

Wekî ku me di Beşa XNUMX-ê de behs kir, pir sepanên webê yên nûjen xwedan qonaxek çêkirinê ye, ku bi gelemperî operasyonên wekî veguheztina kodê, girêdana pelan a pirjimar, û kêmkirin pêk tîne. Pelên ku di encama van operasyonan de hatine bidestxistin - û ev HTML, JavaScript û CSS statîk e - di peldanka derketinê de têne hilanîn. Cihê vê peldankê bi gelemperî bi kîjan amûrên çêkirinê têne bikar anîn ve girêdayî ye, û ji bo React ev ê peldanka ./build be (em ê li jêr bi hûrgulî vegerin ser vê).

Çavkanî-Wêne (S2I)

Di vê postê de em dest nadin mijara "S2I çi ye û meriv wê çawa bikar tîne" (hûn dikarin li ser vê yekê bêtir bixwînin vir), lê girîng e ku hûn di vê pêvajoyê de du gavên zelal bin da ku fêm bikin ka wêneyek Web App Builder çi dike.

Qonaxa kombûnê

Qonaxa meclîsê di xwezayê de pir dişibihe tiştê ku gava ku hûn avakirina docker-ê dimeşînin û bi wêneyek nû ya Docker-ê diqedin. Li gorî vê yekê, ev qonax dema ku avakirina li ser platforma OpenShift dest pê dike pêk tê.

Di doza wêneyek Afirînerê Serlêdana Webê de, ew berpirsiyar e ku girêdanên serîlêdana we saz bike û çêkirinê bimeşîne. skrîptê bicivîne. Ji hêla xwerû, wêneyê çêker avakirina avakirina npm run bikar tîne, lê ev dikare bi guhêrbara jîngehê NPM_BUILD were paşguh kirin.

Wekî ku me berê jî got, cîhê serîlêdana qediyayî, jixwe hatî çêkirin bi kîjan amûrên ku hûn bikar tînin ve girêdayî ye. Mînakî, di doza React de ev ê peldanka ./build be, û ji bo sepanên Angular ew ê bibe peldanka project_name/dist. Û, wekî ku di posta berê de hatî xuyang kirin, cîhê pelrêça derketinê, ku ji hêla xwerû ve hatî çêkirin, dikare bi guhêrbara jîngehê OUTPUT_DIR were paşguh kirin. Welê, ji ber ku cîhê peldanka derketinê ji çarçoveyek çarçoveyek cûda ye, hûn bi tenê derketina hatî hilberandin li peldanka standard a di wêneyê de kopî bikin, ango /opt/apt-root/output. Ev ji bo têgihîştina mayî ya vê gotarê girîng e, lê ji bo naha em bi lez li qonaxa paşîn - qonaxa xebitandinê binêrin.

qonaxa run

Ev qonax diqewime dema ku bangek ji bo docker run li ser wêneya nû ya ku di qonaxa kombûnê de hatî afirandin tê kirin. Heman tişt dema ku li ser platforma OpenShift-ê tête bicîh kirin jî çêdibe. Destçûnî script run bikar tîne module xizmetê ji bo xizmetkirina naveroka statîk ku di pelrêça hilberîna standard a jorîn de cih digire.

Ev rêbaz ji bo bilezkirina sepanan baş e, lê bi gelemperî nayê pêşniyar kirin ku bi vî rengî naveroka statîk xizmet bike. Welê, ji ber ku di rastiyê de em tenê naveroka statîk pêşkêş dikin, em ne hewce ne ku Node.js di hundurê wêneya me de were saz kirin - serverek webê bes e.

Bi gotineke din, dema komkirinê pêdiviya me bi tiştekî heye, dema îdamkirinê pêdiviya me bi tiştekî din heye. Di vê rewşê de, avahiyên zincîran bi kêr têne.

Avahiyên zincîrkirî

Ya ku ew li ser dinivîsin ev e avakirina zincîran di belgeya OpenShift de:

"Du meclîs dikarin bi hev re bêne girêdan, ku yek saziyek berhevkirî çêdike û ya din wê sazûmanek di wêneyek cihê de ku ji bo birêvebirina wê saziyê tê bikar anîn mêvandar dike."

Bi gotinek din, em dikarin wêneya Web App Builder bikar bînin da ku avakirina xwe bimeşînin, û dûv re wêneya servera malperê, heman NGINX, bikar bînin da ku naveroka xwe xizmet bike.

Ji ber vê yekê, em dikarin wêneya Web App Builder wekî avakerek "paqij" bikar bînin û di heman demê de xwediyê wêneyek piçûktir a dema xebatê be.

Niha em bi mînakek taybetî li vê yekê binêrin.

Ji bo perwerdehiyê em ê bikar bînin serîlêdana React ya hêsan, bi karanîna amûra rêzika fermanê create-react-app hatî afirandin.

Ew ê ji me re bibe alîkar ku em her tiştî li hev bikin Pelê şablonê OpenShift.

Ka em bi hûrgulî li vê pelê binêrin, û bi beşa parameteran dest pê bikin.

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

Li vir her tişt pir zelal e, lê hêja ye ku bala xwe bidin parametreya OUTPUT_DIR. Ji bo serîlêdana React-a di mînaka me de, tiştek ku meriv pê xemgîn bibe tune, ji ber ku React nirxa xwerû wekî peldanka derketinê bikar tîne, lê di doza Angular an tiştek din de, dê ev parametre wekî ku hewce be were guheztin.

Naha em li beşa ImageStreams binêrin.

- 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'

Li wêneyên sêyemîn û çaremîn binêrin. Ew her du jî wekî wêneyên Docker têne destnîşan kirin, û hûn dikarin bi zelalî bibînin ku ew ji ku derê têne.

Wêneyê sêyem çêker-serlêdana malperê ye û ew ji nodeshift/ubi8-s2i-web-app-ê ku bi 10.x ve hatî nîşankirin tê. Docker hub.

Ya çaremîn wêneyek NGINX e (guhertoya 1.12) ku li ser etîketa herî dawî ye Docker hub.

Niha em li du wêneyên pêşîn binêrin. Ew herdu di destpêkê de vala ne û tenê di qonaxa avakirinê de têne afirandin. Wêneyê yekem, react-web-app-builder, dê encama pêngavek meclîsê be ku dê wêneya web-app-builder-runtime û koda meya çavkaniyê bide hev. Ji ber vê yekê me “-builder” li navê vê wêneyê zêde kir.

Wêneyê duyemîn - react-web-app-runtime - dê encama berhevkirina nginx-image-runtime û hin pelan ji wêneya react-web-app-builder be. Ev wêne dê di dema bicîhkirinê de jî were bikar anîn û dê tenê servera malperê û HTML-ya statîk, JavaScript, CSS ya serîlêdana me hebe.

şaş kirin? Naha em li mîhengên avakirinê mêze bikin û ew ê hinekî zelaltir bibe.

Şablona me du mîhengên çêkirinê hene. Li vir ya yekem e, û ew pir standard e:

  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

Wekî ku hûn dikarin bibînin, rêza bi etîketa 1 dibêje ku encama vê çêkirinê dê di heman wêneya react-web-app-builder de ku me hinekî berê di beşa ImageStreams de dîtibû, were danîn.

Rêza bi navê 2 ji we re vedibêje ku hûn kodê ji ku derê bistînin. Di rewşa me de, ev depoyek git e, û cîh, ref û peldanka çarçovê ji hêla pîvanên ku me berê li jor dîtibûn têne destnîşankirin.

Xeta ku bi 3-yê hatî binavkirin ew e ku me berê di beşa parameteran de dît. Ew guhêrbara jîngehê OUTPUT_DIR, ku di mînaka me de hatî çêkirin, zêde dike.
Rêza bi navê 4 dibêje ku hûn wêneya web-app-builder-runtime bikar bînin, ku me berê di beşa ImageStream de dît.

Xeta ku bi 5-ê hatî navnîş kirin dibêje ku em dixwazin avahiyek zêde bikar bînin heke wêneya S2I wê piştgirî dike, û wêneya Web App Builder jî dike. Di destpêka yekem de, piştî ku qonaxa kombûnê qediya, wêne dê peldanka node_modules di pelek arşîvê de hilîne. Dûv re, di rêveçûna paşîn de, wêne dê tenê vê peldankê veke da ku dema çêkirinê kêm bike.

Û di dawiyê de, xêza ku bi 6-ê hatî binavkirin tenê çend rêgez e ku gava ku tiştek diguhezîne avahî bixweber, bêyî destwerdana destan, bixebite.

Bi tevahî ev veavakirinek avahîsaziyek pir standard e.

Naha em li veavakirina avakirina duyemîn binêrin. Ew pir dişibihe ya yekem, lê cûdahiyek girîng heye.

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

Ji ber vê yekê veavakirina avakirina duyemîn react-web-app-runtime e, û ew pir standard dest pê dike.

Rêza bi navê 1 ne tiştek nû ye - ew bi tenê dibêje ku encama çêkirinê di wêneya react-web-app-runtime de tê danîn.

Rêza ku bi 2-yê hatî navnîş kirin, wekî di veavakirina berê de, destnîşan dike ku meriv koda çavkaniyê ji ku derê bigire. Lê bala xwe bidin ku li vir em dibêjin ku ew ji wêneyê hatiye girtin. Digel vê yekê, ji wêneya ku me nû çêkir - ji react-web-app-builder (di rêza bi 3-ê de hatî destnîşan kirin). Pelên ku em dixwazin bikar bînin di hundurê wêneyê de ne û cîhê wan li wir di rêza 4 de hatî destnîşan kirin, di rewşa me de ew /opt/app-root/output/ ye. Ger tê bîra we, li vir pelên ku li ser bingeha encamên avakirina serlêdana me hatine çêkirin têne hilanîn.

Peldanka mebestê ya ku di têgîna bi etîketa 5-ê de hatî destnîşan kirin tenê pelrêça heyî ye (ev hemî ye, ji bîr mekin, ku di hundurê tiştek sêrbaz a bi navê OpenShift de dimeşe, û ne li ser komputera weya herêmî).

Beşa stratejiyê - rêza bi 6-ê binavkirî - di heman demê de mîna veavakirina avakirina yekem e. Tenê vê carê em ê nginx-image-runtime bikar bînin, ku me berê di beşa ImageStream de dît.

Di dawiyê de, rêza binavkirî 7 beşek teşqele ye ku her carê ku wêneya react-web-app-builder diguhere dê vê avahî çalak bike.

Wekî din, ev şablon veavakirina birêkûpêk a pir standard, û her weha tiştên ku bi karûbar û rêgezan ve girêdayî ne, dihewîne, lê em ê pir hûrgulî neçin. Ji kerema xwe not bikin ku wêneya ku dê were bicîh kirin wêneya react-web-app-runtime ye.

Daxistina Serlêdanê

Ji ber vê yekê naha ku me li şablonê nihêrî, ka em bibînin ka meriv wê çawa bikar tîne da ku serîlêdanek bicîh bike.

Em dikarin amûra xerîdar OpenShift ya bi navê oc bikar bînin da ku şablonê xwe bicîh bikin:

$ 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

Fermana yekem a di dîmena jorîn de rêyek bi zanebûn endezyariyek e ku meriv şablonekê bibîne./openshiftio/application.yaml.

Fermana duyemîn bi tenê serîlêdanek nû li ser bingeha vê şablonê diafirîne.

Piştî ku van fermanan bixebitin, em ê bibînin ku du meclîsên me hene:

Serîlêdanên nûjen ên li ser OpenShift, beş 2: avahiyên zincîrkirî

Û em vegerin ser ekrana Pêşniyarê, em ê podê dest pêkirî bibînin:

Serîlêdanên nûjen ên li ser OpenShift, beş 2: avahiyên zincîrkirî

Zencîreyê bikirtînin û em ê werin ser sepana xwe, ku rûpela xwerû ya React App-ê ye:

Serîlêdanên nûjen ên li ser OpenShift, beş 2: avahiyên zincîrkirî

Pêvek 1

Ji bo hezkirên Angular jî em hene serîlêdana nimûne.

Nimûneya li vir yek e, ji bilî guhêrbara OUTPUT_DIR.

Pêvek 2

Di vê gotarê de me NGINX wekî serverek malperê bikar anî, lê guheztina wê bi Apache re pir hêsan e, tenê şablonê di pelê de biguhezînin. Wêneyê NGINX li ser Wêneyê Apache.

encamê

Di beşa yekem a vê rêzê de, me nîşan da ku meriv çawa bi lez sepanên tevna nûjen li ser platforma OpenShift bicîh dike. Îro me mêze kir ku wêneyek Serlêdana Webê çi dike û ew çawa dikare bi serverek malperek paqij a mîna NGINX re bi karanîna avahîyên zincîrkirî re were hev kirin da ku avahiyek serîlêdana amade-hilberînek bêtir biafirîne. Di gotara paşîn û paşîn a vê rêzê de, em ê nîşan bidin ka meriv çawa serverek pêşkeftinê ji bo serîlêdana xwe li ser OpenShift dimeşîne û hevdengkirina pelên herêmî û dûr piştrast dike.

Naveroka vê rêze gotaran

  • Beş 1: meriv çawa tenê di çend gavan de sepanên tevna nûjen bicîh dike;
  • Beş 2: Meriv çawa wêneyek S2I-ya nû bi wêneyek servera HTTP-ya heyî re, wekî NGINX-ê, bikar tîne, ku civînên OpenShift-ê yên têkildar ji bo bicîhkirina hilberînê bikar tîne;
  • Beş 3: Meriv çawa ji bo serîlêdana xwe serverek pêşkeftinê li ser platforma OpenShift dimeşîne û wê bi pergala pelê ya herêmî re hevdeng bike.

Çavkaniyên Additional

Source: www.habr.com

Add a comment