Nga tono hou mo OpenShift, wahanga 3: OpenShift hei taiao whanaketanga me OpenShift Pipelines

Kia ora koutou katoa i runga i tenei blog! Koinei te tuatoru o nga pou i roto i te raupapa e whakaatu ana me pehea te tuku tono tukutuku hou i runga i te Red Hat OpenShift.

Nga tono hou mo OpenShift, wahanga 3: OpenShift hei taiao whanaketanga me OpenShift Pipelines

I nga pou e rua o mua, i whakaatu matou me pehea te tuku tono tukutuku hou i roto i nga waahanga iti noa me te whakamahi i tetahi ahua S2I hou me te ahua o te tūmau HTTP kei waho o te papa, penei i te NGINX, ma te whakamahi i nga hanga mekameka hei whakarite i nga mahi whakaputa. .

I tenei ra ka whakaatu matou 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 o te rohe, me te korero ano mo te aha OpenShift Pipelines me pehea e taea ai te whakamahi hei rereke ki nga huihuinga hono.

OpenShift hei taiao whanaketanga

Reremahi whanaketanga

Ka rite ki te korero i mua pou tuatahi, ko te tukanga whanaketanga angamaheni mo nga tono tukutuku hou he momo "tumau whanaketanga" e whai ana i nga huringa ki nga konae aa-rohe. Ka puta, ka puta te hanga tono katahi ka whakahoutia ki te tirotiro.

I roto i te nuinga o nga anga hou, ka hangaia he "tumau whanaketanga" ki roto i nga taputapu raina whakahau.

Tauira rohe

Tuatahi, kia kite tatou me pehea te mahi i te wa e whakahaere ana i nga tono a rohe. Me tango te tono hei tauira tauhohe mai i nga tuhinga o mua, ahakoa he rite tonu nga aria rerengamahi e pa ana ki era atu anga hou katoa.
Na, ki te tiimata i te "dev server" i roto i ta maatau tauira React, ka whakauruhia e matou te whakahau e whai ake nei:

$ npm run start

Na i roto i te matapihi kāpeka ka kite tatou i tetahi mea penei:

Nga tono hou mo OpenShift, wahanga 3: OpenShift hei taiao whanaketanga me OpenShift Pipelines

A ka whakatuwherahia ta maatau tono ki te tirotiro taunoa:

Nga tono hou mo OpenShift, wahanga 3: OpenShift hei taiao whanaketanga me OpenShift Pipelines

Inaianei, mena ka huri taatau ki te konae, me whakahou te tono ki te tirotiro.

OK, he maamaa nga mea katoa me te whanaketanga i roto i te aratau rohe, engari me pehea e tutuki ai i runga i OpenShift?

Tūmau whanaketanga i runga i OpenShift

Ki te mahara koe, in Tuhinga o mua, i titiro matou ki te waahanga oma o te ahua S2I ka kite na te taunoa, ko te waahanga mahi te kawenga mo te mahi i to maatau tono paetukutuku.

Heoi, ki te ata titiro koe rere hōtuhi mai i taua tauira, kei roto te $NPM_RUN taurangi taiao, e taea ai e koe te whakahaere i to whakahau.

Hei tauira, ka taea e tatou te whakamahi i te kōwae nodeshift ki te tuku i ta tatou tono:

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

Tuhipoka: Ko te tauira i runga ake nei ka whakapotohia hei whakaatu i te whakaaro whanui.

I konei kua taapirihia e matou te taurangi taiao NPM_RUN ki ta matou tukunga, e kii ana i te wa whakahaere ki te whakahaere i te whakahau tiimata miro, ka tiimata te tūmau whanaketanga React i roto i to maatau OpenShift pod.

Mena ka titiro koe ki te raarangi o te putea rere, ka penei te ahua:

Nga tono hou mo OpenShift, wahanga 3: OpenShift hei taiao whanaketanga me OpenShift Pipelines

Ko te tikanga, ka kore noa iho enei mea kia taea ra ano e tatou te tukutahi i te waehere rohe me te waehere, ka tirotirohia ano mo nga huringa, engari kei te noho i runga i te tūmau mamao.

Te tukutahi waehere mamao me te rohe

Waimarie, ka taea e te nodeshift te awhina ngawari ki te tukutahi, ka taea e koe te whakamahi i te whakahau mataara ki te whai i nga huringa.

Na i muri i to maatau whakahaere i te whakahau ki te tuku i te tūmau whanaketanga mo ta maatau tono, ka taea e taatau te whakamahi i te whakahau e whai ake nei:

$ npx nodeshift watch

Ko te hua o tenei, ka hono atu ki te putunga rere i hangaia e matou i mua tata ake nei, ka whakahohehia te tukutahitanga o nga konae aa-rohe me te kahui mamao, ka tiimata te tirotirohia nga konae kei runga i ta maatau punaha rohe mo nga huringa.

No reira, ki te whakahouhia e tatou te konae src/App.js, ka tauhohe te punaha ki enei huringa, ka kape ki te kahui mamao ka tiimata te tūmau whanaketanga, ka whakahou i ta maatau tono ki te tirotiro.

Hei whakaoti i te pikitia, me whakaatu te ahua o enei whakahau katoa:

$ 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

Ko te whakahau mataara he tangohanga i runga ake o te whakahau oc rsync, ka taea e koe te ako ake mo te mahi konei.

He tauira tenei mo React, engari ka taea te whakamahi i te tikanga rite tonu me etahi atu angamahi, me whakarite noa te taurangi taiao NPM_RUN e tika ana.

Nga Pipeline Openhift

Nga tono hou mo OpenShift, wahanga 3: OpenShift hei taiao whanaketanga me OpenShift Pipelines

I muri mai ka korero tatou mo tetahi taputapu penei i te OpenShift Pipelines me pehea e taea ai te whakamahi hei whakakapi mo nga hanga mekameka.

He aha nga OpenShift Pipelines

Ko OpenShift Pipelines he CI/CD taketake-kapua te whakauru tonu me te punaha tuku i hangaia mo te whakarite paipa ma te whakamahi i a Tekton. Ko Tekton he anga-tuwhera-tuwhera-puna-tuwhera CI/CD e taea ai e koe te whakaaunoa i te tukunga ki runga i nga momo papaaho (Kubernetes, serverless, miihini mariko, me etahi atu) ma te tango mai i te paparanga o raro.

Kia mohio koe ki tenei tuhinga me mohio koe ki nga Pipelines, na reira ka tino taunaki matou kia panui tuatahi koe pukapuka whaimana.

Te whakarite i to taiao mahi

Hei takaro ki nga tauira o tenei tuhinga, me whakarite e koe to taiao mahi:

  1. Tāutahia, whirihorahia he kāhui OpenShift 4. Ka whakamahia e a maatau tauira nga Waea CodeReady (CRD) mo tenei, ka kitea nga tohutohu whakaurunga. konei.
  2. I muri i te reri o te tautau, me whakauru e koe te Pipeline Operator ki runga. Kaua e wehi, he ngawari, nga tohutohu whakauru konei.
  3. Tangohia Tekton CLI (tkn) konei.
  4. Whakahaerehia te hanga-react-taupānga taputapu raina whakahau hei hanga tono ka tukuna e koe (he tono ngawari tenei tauhohe).
  5. (Kōwhiringa) Korohia te putunga hei whakahaere i te tono tauira ki te rohe me te whakauru npm katahi ka timata te npm.

Ka whai kōpaki k8s te putunga tono, kei roto nga Kubernetes/OpenShift YAML i whakamahia hei tuku i te tono. Ka puta nga Mahi, Taumahi Huihuinga, Rauemi me nga Pipeline ka mahia e matou i roto i tenei whare putunga.

Kia timata tatou

Ko te mahi tuatahi mo ta maatau tauira ko te hanga kaupapa hou ki te roopu OpenShift. Karangahia tenei kaupapa webapp-pipeline ka waihangahia me te whakahau e whai ake nei:

$ oc new-project webapp-pipeline

Ka puta tenei ingoa kaupapa i roto i te waehere a muri ake nei, na ki te whakatau koe ki te whakaingoa i tetahi atu mea, kaua e wareware ki te whakatika i te tauira tauira. Ka timata mai i tenei waahi, kaore matou e haere ki runga-iho, engari ki raro-ki runga: ara, ka hangaia e matou nga waahanga katoa o te kaikawe, katahi ano ko te kaikawe.

Na, tuatahi ...

Nga Mahi

Me hanga etahi mahi e rua, ka awhina i te tuku i te tono ki roto i a maatau paipa. Ko te mahi tuatahi - apply_manifests_task - he kawenga mo te tono YAML o aua rauemi Kubernetes (ratonga, tuku me te huarahi) kei roto i te kōpaki k8s o ta maatau tono. Ko te mahi tuarua - update_deployment_task - he kawenga mo te whakahou i tetahi ahua kua tukuna ki te ahua i hangaia e to maatau paipa.

Kaua e awangawanga mena kaore ano kia tino marama. Ko te tikanga, he rite enei mahi ki nga taputapu, a ka ata tirohia e matou i muri tata nei. Inaianei, me hanga noa e tatou:

$ 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

Na, ma te whakamahi i te whakahau tkn CLI, ka tirohia kua hangahia nga mahi:

$ tkn task ls

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

Tuhipoka: He mahi a rohe enei mo to kaupapa o naianei.

Nga mahi roopu

He rite tonu nga mahi roopu ki nga mahi ngawari. Arā, he kohinga hikoi ka taea te whakamahi ka whakakotahihia i tetahi huarahi, i tetahi atu ranei i te wa e whakahaere ana i tetahi mahi motuhake. Ko te rerekee ko te mahi kapoi kei nga waahi katoa i roto i te roopu. Hei kite i te rarangi o nga mahi tautau ka hanga aunoa ina taapirihia te Kaiwhakahaere Pipeline, ka whakamahi ano matou i te tono tkn CLI:

$ 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

Inaianei me hanga e rua nga mahi tautau. Ko te tuatahi ka whakaputa i te ahua S2I ka tukuna ki te rehita OpenShift o roto; Ko te tuarua ko te hanga i to maatau ahua i runga i te NGINX, ma te whakamahi i te tono kua oti i a maatau te hanga hei ihirangi.

Waihanga me te tuku i te ahua

I te wa e hanga ana i te mahi tuatahi, ka whakahoki ano i ta maatau i mahi i te tuhinga o mua mo nga huihuinga hono. Kia maumahara i whakamahia e matou te ahua S2I (ubi8-s2i-web-app) ki te "hanga" i to maatau tono, ka mutu he whakaahua kua rongoa ki roto i te rehitatanga o roto o OpenShift. Inaianei ka whakamahia e matou tenei ahua taupānga paetukutuku S2I ki te hanga DockerFile mo ta maatau taupānga katahi ka whakamahi i te Buildah ki te mahi i te tino hanga me te pana i te ahua ka puta ki te rehitatanga o roto o OpenShift, na te mea koinei tonu te mahi a OpenShift ina tukuna ana e koe o tono ma te whakamahi i te NodeShift. .

Nahea matou i mohio ai ki enei mea katoa, ka patai koe? Mai putanga mana o Node.js mana, i kape noa matou ka whakarereketia ma matou ano.

Na, me hanga e tatou te mahi roopu s2i-web-app:

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

E kore matou e tino tātari i tenei, engari ka aro noa ki te tawhā OUTPUT_DIR:

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

Ma te taunoa, he rite tenei tawhā ki te hanga, kei reira a React e whakatakoto ai nga ihirangi kua whakaemihia. Ko etahi atu anga e whakamahi ana i nga huarahi rereke, hei tauira, kei Ember he tawhiti. Ko te putanga o ta maatau mahi huinga tuatahi he ahua kei roto te HTML, JavaScript, me te CSS i kohia e matou.

Hangaia he whakaahua i runga i te NGINX

Mo ta maatau mahi roopu tuarua, me hanga he ahua-NGINX mo tatou, ma te whakamahi i nga ihirangi o te tono kua oti i a maatau te hanga. Ko te mea nui, koinei te waahanga o te waahanga o mua i tirohia e maatau nga hanga mekameka.

Ki te mahi i tenei, ko taatau - he rite tonu ki runga ake nei - ka hanga he mahi kahui webapp-build-runtime:

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

Mena ka titiro koe ki te waehere o enei mahi kapoi, ka kite koe kaore i te whakaatu i te putunga Git e mahi tahi ana matou me nga ingoa ranei o nga whakaahua ka hangaia e matou. Ka tohua noa e matou he aha ta matou e whakawhiti ana ki a Git, ki tetahi ahua ranei hei whakaputa i te ahua whakamutunga. Koia te take ka taea te whakamahi ano i enei mahi tautau ina mahi ana me etahi atu tono.

Na konei ka haere marie tatou ki te waahi e whai ake nei...

Rauemi

Na, i te mea i kii ake nei matou, me tino whanui nga mahi tautau, me hanga rauemi hei whakaurunga (te putunga Git) me te whakaputa (nga whakaahua whakamutunga). Ko te rauemi tuatahi e hiahiatia ana ko Git, kei reira to tatou tono, penei:

# 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

Anei te PipelineResource he momo git. Ko te kī url i roto i te wahanga params e tohu ana ki tetahi putunga motuhake me te tohu i te peka matua (he mea whiriwhiri tenei, engari ka tuhia e matou kia oti).

Inaianei me hanga he rauemi mo te ahua ka tiakina nga hua o te mahi s2i-web-app, penei te mahi:

# 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

I konei ko te PipelineResource he ahua momo, a ko te uara o te tawhā url e tohu ana ki te Rehita Atahanga OpenShift o roto, otira ko te mea kei roto i te mokowā ingoa paipa-tukutuku. Kaua e wareware ki te huri i tenei tautuhinga mena kei te whakamahi koe i tetahi waahi ingoa rereke.

Ka mutu, ko te rauemi whakamutunga e hiahiatia ana he ahua ahua ano ko tenei ko te ahua NGINX whakamutunga ka whakamahia i te wa e tukuna ana:

# 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

Ano, mahara kei te rongoa tenei rauemi i te ahua ki roto i te rehitatanga OpenShift o roto i te mokowāingoa webapp-pipeline.

Hei waihanga i enei rauemi katoa i te wa kotahi, ka whakamahia e matou te whakahau hanga:

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

Ka taea e koe te mohio kua hangaia nga rauemi penei:

$ tkn resource ls

Paipa kawe

Inaianei kei a maatau nga waahanga katoa e tika ana, me whakaemi he paipa mai i a raatau ma te hanga ma te whakahau e whai ake nei:

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

Engari i mua i te whakahaere i tenei whakahau, me titiro ki enei waahanga. Ko te ingoa tuatahi:

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

Na i roto i te waahanga korero ka kite tatou i te tohu o nga rauemi i hangaia e matou i mua:

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

Ka hangahia e matou nga mahi e tika ana kia whakaotihia e to maatau paipa. Tuatahi, me mahi te mahi s2i-web-app kua oti i a maatau te hanga:

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

Ko tenei mahi ka tango i nga tawhā whakauru (rauemi gir) me te putanga (hanga-tukutuku-tono-whakaahua). Ka tukuna ano e matou he tawhā motuhake kia kore ai e manatoko i te TLS i te mea kei te whakamahi matou i nga tiwhikete kua hainatia ake:

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

He rite tonu te mahi e whai ake nei, i konei ko te mahi kapoi-whare-whakahaere-whakahaere kua oti i a maatau te hanga ka kiia:

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

Pērā i te mahi o mua, ka tukuna he rauemi, engari inaianei ko te hanga-tukutuku-tono-ahua (te putanga o ta maatau mahi o mua). Na hei putanga ka whakaturia ano e matou te ahua. I te mea me mahi tenei mahi i muri i te mahi o mua, ka taapirihia te mara 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

Ko nga mahi e rua e whai ake nei he kawenga mo te whakamahi i te ratonga, te huarahi me te tuku i nga konae YAML e noho ana i roto i te raarangi k8s o ta maatau tono paetukutuku, me te whakahou ano i tenei tukunga i te wa e hanga whakaahua hou. I tautuhia e matou enei mahi roopu e rua i te timatanga o te tuhinga.

Ka timata te kaikawe

Na, kua hangaia nga waahanga katoa o ta maatau pipeline, a ka whakahaerehia e matou me te whakahau e whai ake nei:

$ tkn pipeline start build-and-deploy-react

I tenei waahanga, ka whakamahia te raina whakahau me te whiriwhiri i nga rauemi e tika ana hei whakautu mo ia o ana tono: mo te rauemi git, tohua te paetukutuku-tono-repo, katahi mo te rauemi whakaahua tuatahi, hanga-tukutuku-tono. -whakaahua, ka mutu, mo te rauemi whakaahua tuarua –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

Inaianei kia tirohia te mana o te paipa ma te whakamahi i te whakahau e whai ake nei:

$ tkn pipeline logs -f

I te wa i timata ai te paipa ka tukuna te tono, ka taea e matou te tono mo te huarahi whakaputa me te whakahau e whai ake nei:

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

Mo te tirohanga nui ake, ka taea e koe te tiro i ta maatau paipa i roto i te aratau Kaiwhakawhanake o te papatohu paetukutuku i te waahanga Pipeline, e whakaatuhia ana i te Fig. 1.

Nga tono hou mo OpenShift, wahanga 3: OpenShift hei taiao whanaketanga me OpenShift Pipelines

Fig.1. Te arotake i nga paipa rere.

Ma te panui i te paipa rere ka whakaatu etahi atu korero, penei i te Whakaaturanga 2.

Nga tono hou mo OpenShift, wahanga 3: OpenShift hei taiao whanaketanga me OpenShift Pipelines

raihi. 2. Nga korero taapiri mo te paipa.

Whai muri i etahi atu korero, ka kite koe i nga tono e rere ana i te tirohanga Topology, e whakaatuhia ana i te Fig.3.

Nga tono hou mo OpenShift, wahanga 3: OpenShift hei taiao whanaketanga me OpenShift Pipelines

Fig 3. Kua whakarewahia te pod.

Ma te panui i te porowhita kei te kokonga matau o runga o te ata ka whakatuwhera i to maatau tono, penei i te Whakaahua 4.

Nga tono hou mo OpenShift, wahanga 3: OpenShift hei taiao whanaketanga me OpenShift Pipelines

raihi. 4. Whakahaere React tono.

mutunga

Na, i whakaatu matou me pehea te whakahaere i tetahi tūmau whanaketanga mo to tono ki OpenShift me te tukutahi me te punaha konae a rohe. I titiro ano matou me pehea te whakatauira i tetahi tauira hanga mekameka ma te whakamahi i nga Pipelines OpenShift. Ka kitea nga tauira tauira katoa mai i tenei tuhinga konei.

Rauemi taapiri (EN)

Nga panui mo nga paetukutuku ipurangi e haere ake nei

Kei te timata matou i te raupapa ipurangi ipurangi mo te Paraire mo te wheako taketake ma te whakamahi i te Red Hat OpenShift Container Platform me nga Kubernetes:

Source: will.com

Tāpiri i te kōrero