Nga tono hou mo OpenShift, wahanga 2: hanga mekameka

Kia ora katoa! Koinei te pou tuarua i roto i ta maatau raupapa e whakaatu ana me pehea te tuku tono tukutuku hou i runga i te Red Hat OpenShift.

Nga tono hou mo OpenShift, wahanga 2: hanga mekameka

I roto i te pou o mua, i pa atu matou ki nga kaha o te ahua hou o te S2I (puna-ki-ahua) i hangaia mo te hanga me te whakamahi i nga tono tukutuku hou i runga i te papaaho OpenShift. Na ka aro atu matou ki te kaupapa o te tuku tere i tetahi tono, a i tenei ra ka tirohia me pehea te whakamahi i te ahua S2I hei ahua hanga "parakore" me te whakakotahi me nga huihuinga OpenShift e pa ana.

Atahanga hanga ma

I korerohia e matou i te Wāhanga XNUMX, ko te nuinga o nga tono tukutuku hou he waahi e kiia nei ko te hanga, e mahi ana i nga mahi penei i te whakawhiti waehere, te whakakotahi i nga konae maha, me te whakaiti. Ko nga konae i puta mai i enei mahi - he HTML pateko tenei, JavaScript me CSS - ka rongoa ki te kōpaki putanga. Ko te waahi o tenei kōpaki ka whakawhirinaki ki nga taputapu hanga e whakamahia ana, a, mo React ko te kōpaki ./build tenei (ka hoki mai ano ki tenei korero i raro nei).

Puna-ki-Whakaahua (S2I)

I tenei pou kaore matou e pa ki te kaupapa "he aha te S2I me pehea te whakamahi" (ka taea e koe te panui atu mo tenei konei), engari he mea nui kia marama mo nga kaupae e rua i roto i tenei mahi kia mohio ai koe he aha te ahua o te Kaihanga Taupānga Tukutuku.

Wāhanga Huihuinga

He rite tonu te ahua o te wahanga huihuinga ki nga mea e pa ana ina whakahaere koe i te hanga docker ka mutu ki tetahi ahua Docker hou. No reira, ka puta tenei waahanga i te tiimata o te hanga i runga i te papaaho OpenShift.

Mo te ahua o te Kaihanga Taupānga Tukutuku, kei a ia te kawenga mo te whakauru i nga whakawhirinakitanga o to tono me te whakahaere i te hanga. whakaemi tuhinga. Ma te taunoa, ka whakamahi te ahua hangahanga i te hangahanga hanga npm run, engari ka taea te whakakore i tenei ma te taurangi taiao NPM_BUILD.

Ka rite ki ta matou korero i mua, ko te waahi o te tono kua oti, kua oti te hanga i runga i nga taputapu e whakamahia ana e koe. Hei tauira, mo te React ko te kōpaki ./build tenei, mo nga tono Angular ko te kaupapa_name/dist folder. Na, kua whakaatuhia i roto i te pou o mua, ko te waahi o te whaiaronga whakaputa, kua tautuhia ki te hanga ma te taunoa, ka taea te whakakore i roto i te taurangi taiao OUTPUT_DIR. Ana, i te mea he rereke te waahi o te kōpaki putanga mai i te anga ki tera anga, ka kape noa koe i te putanga i hangaia ki te kōpaki paerewa o te ahua, ara / opt/apt-root/output. He mea nui tenei mo te maarama ki te toenga o tenei tuhinga, engari mo tenei wa ka titiro wawe ki te waahanga e whai ake nei - te wahanga oma.

wahanga oma

Ka puta tenei wahanga ka puta he waea ki te oma docker ki runga i te ahua hou i hangaia i te wahanga huihuinga. Ka pera ano i te wa e tukuna ana i runga i te papaaho OpenShift. Taunoa rere hōtuhi whakamahinga mahi kōwae ki te mahi i nga ihirangi pateko kei roto i te raarangi putanga paerewa o runga ake nei.

He pai tenei tikanga mo te tuku tere i nga tono, engari ko te tikanga karekau i te tūtohu kia tukuna nga ihirangi pateko penei. Ae, i te mea ka mahi noa matou i nga ihirangi pateko, kaore matou e hiahia kia whakauruhia a Node.js ki roto i to maatau ahua - ka rato te tūmau tukutuku.

I etahi atu kupu, i te wa e huihui ana ka hiahia tetahi mea, i te wa e mahia ana ka hiahia tetahi atu. I tenei ahuatanga, ka uru mai nga hanga mekameka.

Hanga mekameka

Koinei ta ratou e tuhi ana hanga mekameka i roto i te tuhinga OpenShift:

"E rua nga huihuinga ka taea te hono tahi, me te whakaputa i tetahi hinonga whakahiato me tetahi atu e manaaki ana i taua hinonga ki tetahi ahua motuhake e whakamahia ana hei whakahaere i taua hinonga."

I etahi atu kupu, ka taea e tatou te whakamahi i te ahua o te Kaihanga Tukutuku Tukutuku hei whakahaere i ta tatou hanga, katahi ka whakamahi i te ahua o te tūmau tukutuku, te NGINX ano, ki te mahi i o tatou ihirangi.

Na, ka taea e tatou te whakamahi i te ahua o te Kaihanga Tukutuku Tukutuku hei kaihanga "parakore" me te wa ano he ahua iti o te waa whakahaere.

Inaianei kia tirohia tenei me tetahi tauira motuhake.

Mo te whakangungu ka whakamahia e matou tono React ngawari, i hangaia ma te whakamahi i te hanga-react-app taputapu raina whakahau.

Ka awhina i a maatau ki te whakakotahi i nga mea katoa OpenShift kōnae tauira.

Kia ata tirohia tenei konae, ka tiimata me te waahanga tawhā.

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

Ko nga mea katoa kei konei he tino marama, engari he pai ki te aro ki te tawhā OUTPUT_DIR. Mo te tono React i roto i ta maatau tauira, kaore he mea hei awangawanga, na te mea ka whakamahia e React te uara taunoa hei kōpaki putanga, engari mo te Angular tetahi atu mea ranei, me whakarereke tenei tawhā i te mea e tika ana.

Inaianei me titiro ki te waahanga 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'

Tirohia nga whakaahua tuatoru me te tuawha. Ko enei e rua kua tautuhia hei whakaahua Docker, a ka tino kitea e koe no hea mai.

Ko te whakaahua tuatoru ko te kaihanga-tukutuku-taupānga-a ka puta mai i te nodeshift/ubi8-s2i-web-app kua tohua 10.x i runga Pupu Docker.

Ko te tuawha he ahua NGINX (putanga 1.12) me te tohu hou kei runga Pupu Docker.

Inaianei ka titiro tatou ki nga whakaahua tuatahi e rua. Kei te noho kau raua i te timatanga, ka hangaia i te wa o te hangahanga. Ko te ahua tuatahi, ko te react-web-app-builder, ko te hua o te huinga huihuinga ka whakakotahi i te ahua tukutuku-app-builder-runtime me to tatou waehere puna. Koia i taapirihia e matou te "-kaihanga" ki te ingoa o tenei ahua.

Ko te ahua tuarua - react-web-app-runtime - ko te hua o te whakakotahi i te nginx-image-runtime me etahi konae mai i te react-web-app-builder image. Ka whakamahia ano tenei ahua i te wa e horahia ana, ka mau anake te tūmau tukutuku me te HTML pateko, JavaScript, CSS o ta maatau tono.

Poauau? Inaianei me titiro ki nga whirihoranga hanga ka marama ake.

E rua nga whirihoranga hanga o ta maatau tauira. Anei te mea tuatahi, he tino paerewa:

  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

Ka taea e koe te kite, ko te raina me te tapanga 1 e kii ana ko te hua o tenei hanga ka tuu ki roto i te ahua react-web-app-builder i kitehia e matou i mua i te waahanga ImageStreams.

Ko te rarangi tapanga 2 e whakaatu ana ki a koe te wahi hei tiki mai i te waehere. I roto i to maatau, he putunga git tenei, a ko te waahi, te ref me te kōpaki horopaki e whakatauhia ana e nga tawhā kua kitea e matou i runga ake nei.

Ko te raina e tapaina ana ko te 3 te mea i kitea e matou i nga waahanga tawhā. Ka taapirihia te taurangi taiao OUTPUT_DIR, kei roto i a maatau tauira te hanga.
Ko te rarangi tapanga 4 e kii ana ki te whakamahi i te ahua o te paetukutuku-app-builder-runtime, kua kitea e matou i te waahanga ImageStream.

Raina tapanga 5 e kii ana kei te pirangi matou ki te whakamahi i te hanga taapiri mena ka tautokohia e te ahua S2I, me te ahua o te Kaihanga Taupānga Tukutuku. I te whakarewatanga tuatahi, i muri i te otinga o te wahanga huihuinga, ka tiakina e te ahua te kōpaki node_modules ki roto i te konae purongo. Na, i nga oma ka whai ake, ka wetewete noa te ahua o tenei kōpaki hei whakaiti i te wa hanga.

Ka mutu, ko te raina e tapaina ana ko te 6 he iti noa nga kaikorero kia rere aunoa te hanga, kaore he wawaotanga a-ringa, ina huri tetahi mea.

I te katoa he whirihoranga hanga paerewa pai tenei.

Inaianei me titiro ki te whirihoranga hanga tuarua. He tino rite ki te tuatahi, engari kotahi ano te rereketanga nui.

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

Na ko te whirihoranga hanga tuarua ko te react-web-app-runtime, a ka tiimata te tino paerewa.

Ko te raina kua tapaina 1 ehara i te mea hou - e kii ana ka tukuna te hua hanga ki te ahua react-web-app-runtime.

Ko te raina kua tapaina ki te 2, penei i te whirihoranga o mua, e tohu ana i hea ka puta mai te waehere puna. Engari kia mahara kei konei e kii ana i tangohia mai i te ahua. I tua atu, mai i te ahua i hangaia e matou - mai i te react-web-app-builder (kua tohuhia ki te rarangi tapanga 3). Ko nga konae e hiahia ana matou ki te whakamahi kei roto i te ahua me to raatau waahi kei te rarangi tapanga 4, i roto i ta maatau ko /opt/app-root/output/. Mena ka maumahara koe, koinei te waahi ka penapena nga konae i hangaia i runga i nga hua o te hanga i a maatau tono.

Ko te kōpaki ūnga kua tohua i roto i te kupu me te tapanga 5 ko te whaiaronga o naianei (koinei, kia mahara, ka rere ki roto i etahi mea makutu e kiia nei ko OpenShift, kaua ki to rorohiko o to rohe).

Ko te waahanga rautaki - rarangi tapanga 6 - he rite ano ki te whirihoranga hanga tuatahi. Ko tenei wa anake ka whakamahia e matou te nginx-image-runtime, kua kitea e matou i te waahanga ImageStream.

Ka mutu, ko te raina e tapaina ana ko te 7 he wahanga o nga keu ka whakahohe i tenei hanga i nga wa katoa ka huri te ahua o te react-web-app-builder.

Ki te kore, kei roto i tenei tauira te whirihoranga whakatakotoranga paerewa tino pai, me nga mea e pa ana ki nga ratonga me nga huarahi, engari kare matou e uru ki nga korero nui rawa atu. Kia mahara ko te ahua ka tukuna ko te react-web-app-runtime image.

Taupānga Tukunga

Na inaianei kua titiro tatou ki te tauira, me pehea te whakamahi hei whakatakoto tono.

Ka taea e matou te whakamahi i te taputapu kiritaki OpenShift e kiia nei ko oc hei tuku i ta maatau tauira:

$ 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

Ko te whakahau tuatahi i roto i te Whakaahuamata i runga ake nei he huarahi hangai ki te kimi tauira./openshiftio/application.yaml.

Ko te whakahau tuarua he hanga tono hou i runga i tenei tauira.

Ka mutu enei whakahau, ka kite tatou e rua nga huihuinga:

Nga tono hou mo OpenShift, wahanga 2: hanga mekameka

Na ka hoki ki te mata Tirohanga, ka kite tatou i te putunga kua whakarewahia:

Nga tono hou mo OpenShift, wahanga 2: hanga mekameka

Patohia te hono ka kawea matou ki to maatau taupānga, ko te wharangi React App taunoa:

Nga tono hou mo OpenShift, wahanga 2: hanga mekameka

Tāpiritanga 1

Mo te hunga aroha Angular kei a matou ano tauira tono.

He rite tonu te tauira i konei, haunga te taurangi OUTPUT_DIR.

Tāpiritanga 2

I roto i tenei tuhinga i whakamahia e matou te NGINX hei tūmau tukutuku, engari he mea ngawari ki te whakakapi ki a Apache, huri noa i te tauira i roto i te konae. Whakaahua NGINX i runga i ahua Apache.

mutunga

I te wahanga tuatahi o tenei raupapa, i whakaatu matou me pehea te tuku tere i nga tono tukutuku hou i runga i te papaaho OpenShift. I tenei ra i titiro matou he aha te ahua o te Tukutuku Tukutuku me te pehea e honoa ai ki te tūmau tukutuku parakore penei i te NGINX ma te whakamahi i nga hanga mekameka hei hanga i tetahi hanga tono kua rite. I roto i te tuhinga e whai ake nei me te whakamutunga o tenei raupapa, ka whakaatu matou me pehea te whakahaere i tetahi tūmau whanaketanga mo to tono i runga i OpenShift me te whakarite i te tukutahi o nga konae rohe me te mamao.

Nga korero o tenei raupapa tuhinga

  • Wahanga 1: me pehea te whakatakoto i nga tono tukutuku hou i roto i etahi waahanga noa;
  • Wāhanga 2: Me pehea te whakamahi i te ahua S2I hou me te ahua o te tūmau HTTP, penei i te NGINX, ma te whakamahi i nga huihuinga OpenShift e hono ana mo te tuku whakangao;
  • Wāhanga 3: me pehea te whakahaere i tetahi tūmau whanaketanga mo to tono i runga i te papaaho OpenShift me te tukutahi me te punaha konae a rohe.

Rauemi Tāpiri

Source: will.com

Tāpiri i te kōrero