ืืขืื ืึทืืขืืขื ืืืืฃ ืืขื ืืืึธื! ืืึธืก ืืื ืื ืืจืื ืคึผืึธืกืื ืืื ืึท ืกืขืจืืข ืืื ืืืึธืก ืืืจ ืืืืึทืื ืืื ืฆื ืฆืขืืืืงืืขื ืืึธืืขืจื ืืืขื ืึทืคึผืืึทืงืืืฉืึทื ื ืืืืฃ Red Hat OpenShift.

ืืื ืื ืคืจืืขืจืืืงืข ืฆืืืื ืึทืจืืืงืืขื, ืืืจ ืืขืืืืื ืืื ืฆื ืฆืขืืืืงืืขื ืืึธืืขืจื ืืืขื ืึทืคึผืืึทืงืืืฉืึทื ื ืืื ืืืืื ืึท ืืืกื ืกืืขืคึผืก ืืื ืืื ืฆื ื ืืฆื ืึท ื ืืึทืข S2I ืืืื ืฆืืืึทืืขื ืืื ืึทื ืึทืืืขืง-ืืขื-ืคึผืึธืืืฆืข ืืืืคึผ ืกืขืจืืืขืจ ืืืื, ืึทืืึท ืืื NGINX, ื ืืฆื ืืฉืืื ื ืืืืขื ืฆื ืึธืจืงืขืกืืจืืจื ืคึผืจืึธืืืงืฆืืข ืืืคึผืืืืืึทื ืฅ. .
ืืืึทื ื ืืืจ ืืืขืื ืืืืึทืื ืืื ืฆื ืืืืคื ืึท ืึทื ืืืืืงืืื ื ืกืขืจืืืขืจ ืคึฟืึทืจ ืืืื ืึทืคึผืืึทืงืืืฉืึทื ืืืืฃ ืื OpenShift ืคึผืืึทืืคืึธืจืืข ืืื ืกืื ืืงืจืึทื ืืื ืขืก ืืื ืื ืืืืข ืืขืงืข ืกืืกืืขื, ืืื ืืืื ืจืขืื ืืืขืื ืืืึธืก OpenShift ืคึผืืืคึผืืืื ื ืืขื ืขื ืืื ืืื ืืื ืงืขื ืขื ืืืื ืืขืืืืื ื ืืื ืึทื ืึธืืืขืจื ืึทืืืื ืฆื ืืื ืืงื ืึทืกืขืืืืื.
OpenShift ืืื ืึท ืึทื ืืืืืงืืื ื ืกืืืืืืข
ืึทื ืืืืืงืืื ื ืืืึธืจืงืคืืึธืื
ืืื ืฉืืื ืืขืจืืื ื ืืื , ืืขืจ ืืืคึผืืฉ ืึทื ืืืืืงืืื ื ืคึผืจืึธืฆืขืก ืคึฟืึทืจ ืืึธืืขืจื ืืืขื ืึทืคึผืืึทืงืืืฉืึทื ื ืืื ืคืฉืื ืึท ืืื ืคืื "ืึทื ืืืืืงืืื ื ืกืขืจืืืขืจ" ืืืึธืก ืืจืึทืงืก ืขื ืืขืจืื ืืขื ืฆื ืืืืข ืืขืงืขืก. ืืืขื ืืื ืคืึทืื, ืื ืึทืคึผืืึทืงืืืฉืึทื ืืืืขื ืืื ืืจืืืขืจื ืืื ืขืก ืืื ืืขืจืืืึทื ืืืงื ืฆื ืืขื ืืืขืืขืจืขืจ.
ืืื ืจืืึฟ ืืึธืืขืจื ืคืจืึทืืขืืืึธืจืงืก, ืึทืืึท ืึท "ืึทื ืืืืืงืืื ื ืกืขืจืืืขืจ" ืืื ืืขืืืื ืืื ืื ืงืึธืจืึทืกืคึผืึทื ืืื ื ืืึทืคึฟืขืื ืฉืืจื ืืืฉืืจืื.
ืืืงืืืข ืืืืฉืคืื
ืขืจืฉืืขืจ, ืืึธืืืจ ืืขื ืืื ืืึธืก ืึทืจืืขื ืืืขื ืคืืืกื ืืืง ืึทืคึผืืึทืงืืืฉืึทื ื ืืึธืืงืึทืื. ืืื ืก ื ืขืืขื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืึท ืืืึทืฉืคึผืื ืคืื ืคืจืืขืจืืืงืข ืึทืจืืืงืืขื, ืืึธืืฉ ืึผืืขื ืื ืืขืืืข ืืืึธืจืงืคืืึธืื ืงืึทื ืกืขืคึผืก ืึทืคึผืืืื ืืื ืึทืืข ืื ืืขืจืข ืืึธืืขืจื ืคืจืึทืืขืืืึธืจืงืก.
ืึทืืื, ืฆื ืึธื ืืืืื ืืขื "ืืขืื ืกืขืจืืืขืจ" ืืื ืืื ืืืขืจ ืจืขืึทืงื ืืืึทืฉืคึผืื, ืืืจ ืึทืจืืึทื ืื ืคืืืืขื ืืข ืืึทืคึฟืขื:
$ npm run start
ืืขืจื ืึธื ืืื ืื ืืืึธืงืืึทื ืคึฟืขื ืฆืืขืจ ืืืจ ืืืขืื ืืขื ืขืคึผืขืก ืืื ืืึธืก:

ืืื ืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืืืขื ืขืคืขื ืขื ืืื ืื ืคืขืืืงืืึทื ืืืขืืขืจืขืจ:

ืืืฆื, ืืืื ืืืจ ืืึทืื ืขื ืืขืจืื ืืขื ืฆื ืืขืจ ืืขืงืข, ืื ืึทืคึผืืึทืงืืืฉืึทื ืืึธื ืืขืจืืืึทื ืืืงื ืืื ืืขื ืืืขืืขืจืขืจ.
ืืื, ืึทืืฅ ืืื ืงืืึธืจ ืืื ืึทื ืืืืืงืืื ื ืืื ืืืืข ืืึธืืข, ืึธืืขืจ ืืื ืฆื ืืขืจืืจืืืื ืื ืืขืืืข ืืืืฃ OpenShift?
ืึทื ืืืืืงืืื ื ืกืขืจืืืขืจ ืืืืฃ OpenShift
ืืืื ืืืจ ืืขืืขื ืงืขื, ืืื , ืืืจ ืืขืงืืงื ืืื ืื ืึทืืื ืืขืจืืคืขื ืข ืืืืคื ืคืึทืกืข ืคืื โโืื S2I ืืืื ืืื ืืขืืขื ืึทื ืืืจื ืคืขืืืงืืึทื, ืื ืืื ืขื ืืึธืืืืข ืืื ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ ืกืขืจืืืืกืื ื ืืื ืืืขืจ ืืืขื ืึทืคึผืืึทืงืืืฉืึทื.
ืึธืืขืจ, ืืืื ืืืจ ื ืขืืขื ืึท ื ืขืขื ืืขืจ ืงืืง ืคึฟืื ืืขื ืืืึทืฉืคึผืื, ืขืก ืึผืืื ืื $ NPM_RUN ืกืืืืืืข ืืืึทืืขืืืืืง, ืืืึธืก ืึทืืึทืื ืืืจ ืฆื ืืืกืคืืจื ืืืื ืืึทืคึฟืขื.
ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืืจ ืงืขื ืขื ื ืืฆื ืื ื ืึธืืขืฉืืคื ืืึธืืืืข ืฆื ืฆืขืืืืงืืขื ืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื:
$ npx nodeshift --deploy.env NPM_RUN="yarn start" --dockerImage=nodeshift/ubi8-s2i-web-app
ืืึทืืขืจืงืื ื: ืื ืืืืื ืืืึทืฉืคึผืื ืืื ืึทืืจืืืืืืืืื ืฆื ืืืืืกืืจืืจื ืื ืึทืืืขืืืื ืข ืืขืืึทื ืง.
ืืึธ ืืืจ ืืึธืื ืฆืืืขืืืืื ืื NPM_RUN ืกืืืืืืข ืืืึทืืขืืืืืง ืฆื ืืื ืืืขืจ ืืืคึผืืืืืึทื ื, ืืืึธืก ืืขืจืฆืืืื ืื ืจืื ืืืืข ืฆื ืืืืคื ืื ืืึทืจื ืึธื ืืืื ืืึทืคึฟืขื, ืืืึธืก ืกืืึทืจืฅ ืื ืจืขืึทืงื ืึทื ืืืืืงืืื ื ืกืขืจืืืขืจ ืืื ืืื ืืืขืจ OpenShift ืคึผืึธื.
ืืืื ืืืจ ืงืืง ืืื ืื ืงืืึธืฅ ืคืื ืึท ืคืืืกื ืืืง ืคึผืึธื, ืขืก ืืืขื ืงืืงื ืขืคึผืขืก ืืื ืืึธืก:

ืคืื ืงืืจืก, ืึทืืข ืืขื ืืืขื ืืืื ืืึธืจื ืืฉื ืืื ืืืจ ืงืขื ืขื ืกืื ืืงืจืึทื ืืื ืื ืืืืข ืงืึธื ืืื ืื ืงืึธื, ืืืึธืก ืืื ืืืื ืืึธื ืืืึธืจืขื ืคึฟืึทืจ ืขื ืืขืจืื ืืขื, ืึธืืขืจ ืืขืื ืืืืฃ ืึท ืืืืึทื ืกืขืจืืืขืจ.
ืกืื ืืงืจืึทื ืืืืื ื ืืืืึทื ืืื ืืืืข ืงืึธื
ืฆืื ืืืืง, ื ืึธืืขืฉืืคื ืงืขื ืขื ืืืืื ืืขืืคื ืืื ืกืื ืืงืจืึทื ืึทืืืืฉืึทื, ืืื ืืืจ ืงืขื ืขื ื ืืฆื ืื ืืืึทื ืืึทืคึฟืขื ืฆื ืฉืคึผืืจ ืขื ืืขืจืื ืืขื.
ื ืึธื ืืืจ ืืึธืื ืืืืคื ืื ืืึทืคึฟืขื ืฆื ืฆืขืืืืงืืขื ืื ืึทื ืืืืืงืืื ื ืกืขืจืืืขืจ ืคึฟืึทืจ ืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื, ืืืจ ืงืขื ืขื ืืขืฉืึธืืขื ื ืืฆื ืื ืคืืืืขื ืืข ืืึทืคึฟืขื:
$ npx nodeshift watch
ืืื ืึท ืจืขืืืืืึทื, ืึท ืคึฟืึทืจืืื ืืื ื ืืืขื ืืืื ืืขืืืื ืฆื ืื ืคืืืกื ืืืง ืคึผืึธื ืืืึธืก ืืืจ ืืืฉืืคื ืึท ืืืกื ืคืจืืขืจ, ืื ืกืื ืืงืจืึทื ืึทืืืืฉืึทื ืคืื ืืื ืืืขืจ ืืืืข ืืขืงืขืก ืืื ืื ืืืืึทื ืงื ืืื ืืืขื ืืืื ืึทืงืืืืืืืืื, ืืื ืื ืืขืงืขืก ืืืืฃ ืืื ืืืขืจ ืืืืข ืกืืกืืขื ืืืขื ืึธื ืืืืื ืฆื ืืึธื ืืืึธืจ ืคึฟืึทืจ ืขื ืืขืจืื ืืขื.
ืืขืจืืืขืจ, ืืืื ืืืจ ืืืฆื ืืขืจืืืึทื ืืืงื ืื src/App.js ืืขืงืข, ืื ืกืืกืืขื ืืืขื ืจืขืึทืืืจื ืฆื ืื ืขื ืืขืจืื ืืขื, ื ืึธืืืึทืื ืืื ืฆื ืื ืืืืึทื ืงื ืืื ืืื ืึธื ืืืืื ืื ืึทื ืืืืืงืืื ื ืกืขืจืืืขืจ, ืืืึธืก ืืืขื ืืขืจืืืึทื ืืืงื ืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืืื ืืขื ืืืขืืขืจืขืจ.
ืฆื ืคืึทืจืขื ืืืงื ืืขื ืืืื, ืืึธืื ืืื ืื ืืืืึทืื ืืื ืื ืืื ืฆืข ืงืึทืืึทื ืื ืงืืงื ืืื:
$ 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
ืื ืืืึทื ืืึทืคึฟืขื ืืื ืึทื ืึทืืกืืจืึทืงืฆืืข ืืืืฃ ืฉืคึผืืฅ ืคืื ืื oc rsync ืืึทืคึฟืขื, ืืืจ ืงืขื ืขื ืืขืจื ืขื ืืขืจ ืืืขืื ืืื ืขืก ืึทืจืืขื .
ืืึธืก ืืื ืืขืืืขื ืึท ืืืืฉืคึผืื ืคึฟืึทืจ ืจืขืึทืงื, ืึธืืขืจ ืื ืคึผืื ืืืขื ืืขืืืืงืขืจ ืืืคึฟื ืงืขื ืขื ืืืื ืืขืืืืื ื ืืื ืื ืืขืจืข ืคืจืึทืืขืืืึธืจืงืก, ื ืึธืจ ืฉืืขืื ืื NPM_RUN ืกืืืืืืข ืืืึทืืขืืืืืง ืืื ื ืืืืืง.
โ
ืึธืคึผืขื ืฉืืคื ืคึผืืืคึผืืืื ื

ืืืืึทืืขืจ ืืืจ ืืืขืื ืจืขืื ืืืขืื ืึท ืืขืฆืืึทื ืืื OpenShift Pipelines ืืื ืืื ืขืก ืงืขื ืขื ืืืื ืืขืืืืื ื ืืื ืึทื ืึธืืืขืจื ืึทืืืื ืฆื ืืฉืืื ื ืืืืืขืจ.
ืืืึธืก ืืื OpenShift Pipelines
OpenShift Pipelines ืืื ืึท ืืืึธืืงื-ืืขืืืืจื ืกื / CD ืงืขืกืืืืขืจืืืง ืื ืึทืืจืืืฉืึทื ืืื ืขืงืกืคึผืจืขืก ืกืืกืืขื ืืืืืื ื ืคึฟืึทืจ ืึธืจืืึทื ืืืืื ื ืคึผืืืคึผืืืื ื ื ืืฆื Tekton. Tekton ืืื ืึท ืคืืขืงืกืึทืืึทื ืขืคึฟืขื ืขื-ืืงืืจ Kubernetes-ืืขืืืืจื CI / CD ืคืจืืืืืืขืจืง ืืืึธืก ืึทืืึทืื ืืืจ ืฆื ืึธืืึทืืืื ืืืคึผืืืืืึทื ื ืืืืฃ ืคืึทืจืฉืืื ืคึผืืึทืืคืึธืจืืก (Kubernetes, ืกืขืจืืืขืจืืขืกืก, ืืืืจืืืึทื ืืืฉืื ืขื, ืืื"ื ื) ืืืจื ืึทืืกืืจืึทืงืืื ื ืคืื ืื ืึทื ืืขืจืืืืื ื ืฉืืืืข.
ืคืืจืฉืืื ื ืคืื ืืขื ืึทืจืืืงื ืจืืงืืืืืขืจื ืขืืืขืืข ืืืืกื ืคืื ืคึผืืืคึผืืืื ื, ืึทืืื ืืืจ ืจืขืงืึธืืขื ืืืจื ืืืจ ืขืจืฉืืขืจ ืืืืขื ืขื .
ืืึทืฉืืขืืืงื ืืืื ืึทืจืืขื ืกืืืืืืข
ืฆื ืฉืคึผืืื ืืื ืื ืืืืฉืคืืื ืืื ืืขื ืึทืจืืืงื, ืืืจ ืขืจืฉืืขืจ ืืึทืจืคึฟื ืฆื ืฆืืืจืืืื ืืืื ืึทืจืืขื ืกืืืืืืข:
- ืื ืกืืึทืืืจื ืืื ืงืึทื ืคืืืืขืจ ืึทื OpenShift 4 ืงื ืืื ืืื ืืืขืจ ืืืืฉืคืืื ื ืืฆื CodeReady Containers (CRD) ืคึฟืึทืจ ืืขื .
- ื ืึธื ืืขื ืงื ืืื ืืื ืืจืืื, ืืืจ ืืึทืจืคึฟื ืฆื ืื ืกืืึทืืืจื Pipeline Operator ืืืืฃ ืขืก. ืื ืืืืกื ื ืืฉื ืืืื ืืขืจืฉืจืึธืงื, ืขืก ืก ืืจืื ื, ืื ืกืืึทืืืจืื ื ืื ืกืืจืึทืงืฉืึทื ื .
- ืืจืืคืงืืคืืข (ืืงื) .
- ืืืืคื ืื ืฉืึทืคึฟื-ืจืขืึทืืืจื-ืึทืคึผ ืืึทืคึฟืขืื ืฉืืจื ืืขืฆืืึทื ืฆื ืฉืึทืคึฟื ืึท ืึทืคึผืืึทืงืืืฉืึทื ืึทื ืืืจ ืืืขื ืืขืืึธืื ืฆืขืืืืงืืขื (ืืึธืก ืืื ืึท ืคึผืฉืื ืึทืคึผืืึทืงืืืฉืึทื ).
- (ืึธืคึผืืืึธื ืึทื) ืงืืึธืื ืื ืจืืคึผืึทืืึทืืึธืจื ืฆื ืืืืคื ืื ืืืืฉืคึผืื ืึทืคึผืืึทืงืืืฉืึทื ืืึธืืงืึทืื ืืื npm ืื ืกืืึทืืืจื ืืื ืืขืืึธืื npm ืึธื ืืืื.
ืื ืึทืคึผืืึทืงืืืฉืึทื ืจืืคึผืึทืืึทืืึธืจื ืืืขื ืืืื ืืึธืื ืึท ืง8ืก ืืขืงืข, ืืืึธืก ืืืขื ืึทื ืืืึทืืื ืื Kubernetes/OpenShift YAMLs ืืขื ืืฆื ืฆื ืฆืขืืืืงืืขื ืื ืึทืคึผืืึทืงืืืฉืึทื. ืขืก ืืืขื ืืืื ืืึทืกืงืก, ืงืืึทืกืืขืจ ืืึทืกืงืก, ืจืขืกืึธืืจืกืขืก ืืื ืคึผืืืคึผืืืื ื ืืืึธืก ืืืจ ืืืขืื ืืึทืื ืืื ืืขื .
ืืขืืื ื ืึทืจืึธืคึผ
ืืขืจ ืขืจืฉืืขืจ ืฉืจืื ืคึฟืึทืจ ืืื ืืืขืจ ืืืืฉืคึผืื ืืื ืฆื ืฉืึทืคึฟื ืึท ื ืืึทืข ืคึผืจืืืขืงื ืืื ืื OpenShift ืงื ืืื. ืืึธืืืจ ืจืืคื ืืขื ืคึผืจืืืขืงื ืืืขืืึทืคึผืคึผ-ืจืขืจื - ืืื ืืข ืืื ืืึทืื ืขืก ืืื ืื ืคืืืืขื ืืข ืืึทืคึฟืขื:
$ oc new-project webapp-pipeline
ืืขืจ ื ืึธืืขื ืคืื ืืขื ืคึผืจืืืขืงื ืืืขื ืืขืจืฉืืึทื ืขื ืืื ืื ืงืึธื ืฉืคึผืขืืขืจ, ืึทืืื ืืืื ืืืจ ืืึทืฉืืืกื ืฆื ื ืึธืืขื ืขืก ืขืคึผืขืก ืึทื ืืขืจืฉ, ืืึธื ื ืื ืคืึทืจืืขืกื ืฆื ืจืขืืึทืืืจื ืืขื ืืืึทืฉืคึผืื ืงืึธื ืึทืงืึธืจืืื ืืื. ืคึฟืื ืืขื ืคืื ื, ืืืจ ืืืขืื ื ืืฉื ืืืื ืืืืื-ืึทืจืึธืคึผ, ืึธืืขืจ ืื ืึธ-ืึทืจืืืฃ: ืืึธืก ืืื, ืืืจ ืืืขืื ืขืจืฉืืขืจ ืืึทืื ืึทืืข ืื ืงืึทืืคึผืึธืื ืึทื ืฅ ืคืื ืื ืงืึทื ืืืืืขืจ, ืืื ืืืืื ืืขืืึธืื ืืขืจ ืงืึทื ืืืืืขืจ ืืื.
ืึทืืื, ืขืจืฉืืขืจ ืคืื ืึทืืข ...
ืืึทืกืงืก
ืืึธืืืจ ืืึทืื ืึท ืคึผืึธืจ ืคืื ืืึทืกืงืก, ืืืึธืก ืืืขื ืืขืืคึฟื ืฆืขืืืืงืืขื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืืื ืืืขืจ ืจืขืจื - ืืื ืืข. ืืขืจ ืขืจืฉืืขืจ ืึทืจืืขื - application_manifests_task - ืืื ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ ืึทืคึผืืืืื ื ืื YAML ืคืื ืื Kubernetes ืจืขืกืืจืกื (ืืื ืกื, ืืืคึผืืืืืึทื ื ืืื ืืึทืจืฉืจืื) ืืืึธืก ืืขื ืขื ืืืื ืืื ืื k8s ืืขืงืข ืคืื โโืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื. ืื ืจืืข ืึทืจืืขื - update_deployment_task - ืืื ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ ืึทืคึผืืืืืื ื ืึทื ืฉืืื ืืืคึผืืืื ืืืื ืฆื ืืขืจ ืืืื ืขืจ ืืืฉืืคื ืืืจื ืืื ืืืขืจ ืจืขืจื - ืืื ืืข.
ืฆื ื ืื ืืึธืจื ืืืื ืขืก ืืื ื ืืฉื ืืืืขืจ ืงืืึธืจ ื ืึธื. ืืื ืคืึทืงื, ืื ืืึทืกืงืก ืืขื ืขื ืขืคึผืขืก ืืื ืืืืืืึทืืื, ืืื ืืืจ ืืืขืื ืงืืงื ืืืืฃ ืืื ืืื ืืขืจ ืืขืืึทื ืึท ืืืกื ืฉืคึผืขืืขืจ. ืืืฆื ืืึธืื ืืื ืื ืืึทืื ืืื:
$ 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
ืืขืจื ืึธื, ื ืืฆื ืื tkn CLI ืืึทืคึฟืขื, ืืืจ ืืืขืื ืงืึธื ืืจืึธืืืจื ืึทื ืื ืืึทืกืงืก ืืขื ืขื ืืืฉืืคื:
$ tkn task ls
NAME AGE
apply-manifests 1 minute ago
update-deployment 1 minute ago
ืืึทืืขืจืงืื ื: ืืึธืก ืืขื ืขื ืืืืข ืืึทืกืงืก ืคึฟืึทืจ ืืืื ืงืจืึทื ื ืคึผืจืืืขืงื.
ืงื ืืื ืืึทืกืงืก
ืงื ืืื ืืึทืกืงืก ืืขื ืขื ืืืืกืืงืื ืื ืืขืืืข ืืื ืคึผืฉืื ืืึทืกืงืก. ืืึธืก ืืื, ืขืก ืืื ืึท ืจืืืืึทืืึทื ืืึทืืืื ื ืคืื ืกืืขืคึผืก ืืืึธืก ืืขื ืขื ืงืึทืืืืื ื ืืื ืืืื ืึธืืขืจ ืื ืืขืจื ืืืขื ืืืขื ืืืจ ืืืืคื ืึท ืกืคึผืขืฆืืคืืฉ ืึทืจืืขื. ืืขืจ ืืืืืง ืืื ืึทื ืึท ืงื ืืื ืึทืจืืขื ืืื ืื ืืืฆื ืืืืขืืื ืืื ืืขื ืงื ืืื. ืฆื ืืขื ืื ืจืฉืืื ืคืื ืงื ืืื ืืึทืกืงืก ืืืึธืก ืืขื ืขื ืืืืืึธืืึทืืืฉ ืืืฉืืคื ืืืขื ืึทืืื ื ืคึผืืืคึผืืืื ืึธืคึผืขืจืึทืืึธืจ, ืืืจ ืืืขืื ืืืืืขืจ ื ืืฆื ืื 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
ืืืฆื ืืึธืืืจ ืืึทืื ืฆืืืื ืงื ืืื ืืึทืกืงืก. ืืขืจ ืขืจืฉืืขืจ ืืืขื ืืืฉืขื ืขืจืืื ืื S2I ืืืื ืืื ืฉืืงื ืขืก ืฆื ืื ืื ืขืจืืขื OpenShift ืจืขืืืกืืจื; ืื ืจืืข ืืื ืฆื ืืืืขื ืืื ืืืขืจ ืืืื ืืืืืจื ืืืืฃ NGINX, ื ืืฆื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืืจ ืืึธืื ืฉืืื ืืขืืืื ืืื ืืื ืืึทืื.
ืฉืึทืคึฟื ืืื ืฉืืงื ืื ืืืื
ืืืขื ืงืจืืืืืื ื ืืขืจ ืขืจืฉืืขืจ ืึทืจืืขื, ืืืจ ืืืขืื ืืืืขืจืืืจื ืืืึธืก ืืืจ ืืึธืื ืฉืืื ืืขืืื ืืื ืืขื ืคืจืืขืจืืืงื ืึทืจืืืงื ืืืขืื ืืื ืืงื ืึทืกืขืืืืื. ืฆืืจืืงืจืืคื ืึทื ืืืจ ืืขืืืืื ื ืื S2I ืืืื (ubi8-s2i-web-app) ืฆื "ืืืืขื" ืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื, ืืื ืขื ืืืงื ืืื ืืื ืึท ืืืื ืกืืึธืจื ืืื ืื OpenShift ืื ืขืจืืขื ืจืขืืืกืืจื. ืืืฆื ืืืจ ืืืขืื ื ืืฆื ืืขื S2I ืืืขื ืึทืคึผ ืืืื ืฆื ืฉืึทืคึฟื ืึท DockerFile ืคึฟืึทืจ ืืื ืืืขืจ ืึทืคึผ ืืื ืืึทื ื ืืฆื Buildah ืฆื ืืึธื ืื ืคืึทืงืืืฉ ืืืืขื ืืื ืฉืืืคึผื ืื ืจืืืึทืืืื ื ืืืื ืฆื ืื OpenShift ืื ืขืจืืขื ืจืขืืืกืืจื, ืืืืึทื ืืึธืก ืืื ืคึผืื ืงื ืืืึธืก OpenShift ืืื ืืืขื ืืืจ ืฆืขืืืืงืืขื ืืืื ืึทืคึผืืึทืงืืืฉืึทื ื ื ืืฆื NodeShift. .
ืคึฟืื ืืืึทื ืขื ืืึธืื ืืืจ ืืึธืก ืึทืืฅ ืืขืืืึผืกื, ืคึฟืจืขืื ืืืจ? ืคืื , ืืืจ ื ืึธืจ ืงืึทืคึผืื ืขืก ืืื ืืึทืืึทืคืืื ืขืก ืคึฟืึทืจ ืืื.
ืืืฆื ืืึธืื ืืื ืื ืืึทืื ืื s2i-web-app ืงื ืืื ืึทืจืืขื:
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/s2i-web-app-task.yaml
ืืืจ ืืืขืื ื ืืฉื ืคืื ืึทื ืืขืจืงืืืึทืื ืืขื ืืื ืืขืืึทื, ืึธืืขืจ ื ืึธืจ ืคืึธืงืืก ืืืืฃ ืื OUTPUT_DIR ืคึผืึทืจืึทืืขืืขืจ:
params:
- name: OUTPUT_DIR
description: The location of the build output directory
default: build
ืืืจื ืคืขืืืงืืึทื, ืืขื ืคึผืึทืจืึทืืขืืขืจ ืืื ืืืืึทื ืฆื ืืืืขื, ืืืึธืก ืืื ืืื React ืืืืื ืื ืึทืกืขืืืึทืื ืืื ืืึทืื. ืื ืืขืจืข ืคืจืึทืืขืืืึธืจืงืก ื ืืฆื ืคืึทืจืฉืืืขื ืข ืคึผืึทืืก, ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืื Ember ืขืก ืืื ืืืกื. ืืขืจ ืจืขืืืืืึทื ืคืื ืืื ืืืขืจ ืขืจืฉืืขืจ ืงื ืืื ืึทืจืืขื ืืืขื ืืืื ืึท ืืืื ืืื HTML, ืืืฉืึทืืืึทืกืงืจืืคึผื ืืื CSS ืืืจ ืืขืืืืื.
ืืืืขื ืึท ืืืื ืืืืืจื ืืืืฃ NGINX
ืืื ืคึฟืึทืจ ืืื ืืืขืจ ืจืืข ืงื ืืื ืึทืจืืขื, ืขืก ืืึธื ืืืืขื ืึท NGINX-ืืืืืจื ืืืื ืคึฟืึทืจ ืืื ืื, ื ืืฆื ืื ืืื ืืึทืื ืคืื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืืจ ืืึธืื ืฉืืื ืืขืืืื. ืืกืขื ืฉืึทืื, ืืึธืก ืืื ืืขืจ ืืืื ืคืื ืื ืคืจืืขืจืืืงืข ืึธืคึผืืืืืื ื ืืื ืืืจ ืืขืงืืงื ืืืืฃ ืืฉืืื ื ืืืืขื.
ืฆื ืืึธื ืืึธืก, ืืืจ - ืคึผืื ืงื ืื ืืขืืืข ืืื ืืืืื - ืฉืึทืคึฟื ืึท ืงื ืืื ืึทืจืืขื ืืืขืืึทืคึผืคึผ-ืืืืขื-ืจืื ืืืืข:
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/webapp-build-runtime-task.yaml
ืืืื ืืืจ ืงืืง ืืื ืื ืงืึธื ืคืื ืื ืงื ืืื ืืึทืกืงืก, ืืืจ ืงืขื ืขื ืืขื ืึทื ืขืก ืงืขื ื ืืฉื ืกืคึผืขืฆืืคืืฆืืจื ืื Git ืจืืคึผืึทืืึทืืึธืจื ืืื ืืืึธืก ืืืจ ืึทืจืืขืื ืึธืืขืจ ืื ื ืขืืขื ืคืื ืื ืืืืืขืจ ืืืึธืก ืืืจ ืฉืึทืคึฟื. ืืืจ ื ืึธืจ ืกืคึผืขืฆืืคืืฆืืจื ืืืึธืก ืคึผืื ืงื ืืืจ ืืขื ืขื ืืจืึทื ืกืคืขืจืื ื ืฆื Git, ืึธืืขืจ ืึท ืืืืขืจ ืืืื ืืื ืื ืืขืฆื ืืืื ืืึธื ืืืื ืจืขืืืืืึทื. ืึทื ืืื ืืืึธืก ืื ืงื ืืื ืืึทืกืงืก ืงืขื ืขื ืืืื ืจืืืื ืืืขื ืืจืืขืื ืืื ืื ืืขืจืข ืึทืคึผืืึทืงืืืฉืึทื ื.
ืืื ืืึธ ืืืจ ืืจืึทืฆืืขื ืืืื ืืืืฃ ืฆื ืืขืจ ืืืืึทืืขืจ ืคืื ื ...
ืจืขืกืืจืกื
ืึทืืื, ืืื ืืืจ ื ืึธืจ ืืขืืืื, ืงื ืืื ืืึทืกืงืก ืืึธื ืืืื ืืื ืึทืืืขืืืื ืืื ืืขืืืขื, ืืืจ ืืึทืจืคึฟื ืฆื ืฉืึทืคึฟื ืจืขืกืืจืกื ืืืึธืก ืืืขื ืืืื ืืขืืืืื ื ืืื ืึทืจืืึทื ืฉืจืืึทื (ืื Git ืจืืคึผืึทืืึทืืึธืจื) ืืื ืืื ืจืขืืืืืึทื (ืื ืืขืฆื ืืืืืขืจ). ืืขืจ ืขืจืฉืืขืจ ืืืื ืืืึธืก ืืืจ ืืึทืจืคึฟื ืืื Git, ืืื ืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืจืืืืืื, ืขืคึผืขืก ืืื ืืึธืก:
# 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
ืืึธ PipelineResource ืืื ืคืื ืืืคึผ ืืื. ืืขืจ URL ืฉืืืกื ืืื ืื ืคึผืึทืจืึทืืก ืึธืคึผืืืืืื ื ืืืืืื ืฆื ืึท ืกืคึผืขืฆืืคืืฉ ืจืืคึผืึทืืึทืืึธืจื ืืื ืกืคึผืขืฆืืคืืฆืืจื ืื ืืขื ืฆืืืืึทื (ืืึธืก ืืื ืึทืคึผืฉืึทื ืึทื, ืึธืืขืจ ืืืจ ืฉืจืืึทืื ืขืก ืคึฟืึทืจ ืงืึทืืคึผืืืื ืึทืก).
ืืืฆื ืืืจ ืืึทืจืคึฟื ืฆื ืฉืึทืคึฟื ืึท ืืืื ืคึฟืึทืจ ืื ืืืื ืืื ืื ืจืขืืืืืึทืื ืคืื ืื s2i-web-app ืึทืจืืขื ืืืขื ืืืื ืืขืจืืืขืืืขื, ืืึธืก ืืื ืืขืืื ืืื ืืึธืก:
# 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
ืืึธ ืื PipelineResource ืืื ืคืื ืืืคึผ ืืืื, ืืื ืื ืืืขืจื ืคืื ืื URL ืคึผืึทืจืึทืืขืืขืจ ืืืืืื ืฆื ืื ืื ืขืจืืขื OpenShift ืืืื ืจืขืืืกืืจื, ืกืคึผืึทืกืืคืืงืื ืืขืจ ืืืื ืขืจ ืืืึธืก ืืื ืืืื ืืื ืื ืืืขืืึทืคึผ-ืจืขืจื - ืืื ืืข ื ืึธืืขื. ืื ืืืืกื ื ืืฉื ืคืึทืจืืขืกื ืฆื ืืืืฉื ืืขื ืืึทืฉืืขืืืงื ืืืื ืืืจ ื ืืฆื ืึท ืึทื ืืขืจืฉ ื ืึธืืขื.
ืืื ืืขืกืึธืฃ, ืื ืืขืฆืืข ืืืื ืืืึธืก ืืืจ ืืึทืจืคึฟื ืืืขื ืืืื ืืืื ืคืื ืืืคึผ ืืืื ืืื ืืึธืก ืืืขื ืืืื ืื ืืขืฆื NGINX ืืืื ืืืึธืก ืืืขื ืืืื ืืขืืืืื ื ืืขืฉืึทืก ืืืคึผืืืืืึทื ื:
# 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
ืืืืืขืจ, ืืึธื ืึทื ืืขื ืืืื ืกืืึธืจื ืื ืืืื ืืื ืื ืื ืขืจืืขื OpenShift ืจืขืืืกืืจื ืืื ืื ืืืขืืึทืคึผ-ืจืขืจื - ืืื ืืข.
ืฆื ืฉืึทืคึฟื ืึทืืข ืื ืจืขืกืืจืกื ืืื ืึทืืึธื, ืืืจ ื ืืฆื ืื ืฉืึทืคึฟื ืืึทืคึฟืขื:
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/resources/resource.yaml
ืืืจ ืงืขื ืขื ืืึทืื ืืืืขืจ ืึทื ืื ืจืขืกืืจืกื ืืขื ืขื ืืืฉืืคื ืืื ืืึธืก:
$ tkn resource ls
ืงืึทื ืืืืืขืจ ืจืขืจื - ืืื ืืข
ืืืฆื ืึทื ืืืจ ืืึธืื ืึทืืข ืื ื ืืืืืง ืงืึทืืคึผืึธืื ืึทื ืฅ, ืืึธืื ืืื ืื ืึทืกืขืืืึทื ืึท ืจืขืจื - ืืื ืืข ืืืจื ืงืจืืืืืื ื ืขืก ืืื ืื ืคืืืืขื ืืข ืืึทืคึฟืขื:
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/pipelines/build-and-deploy-react.yaml
ืึธืืขืจ ืืืืืขืจ ืืืจ ืืืืคื ืืขื ืืึทืคึฟืขื, ืืึธืื ืืื ืื ืงืืง ืืื ืื ืงืึทืืคึผืึธืื ืึทื ืฅ. ืืขืจ ืขืจืฉืืขืจ ืืื ืืขืจ ื ืึธืืขื:
apiVersion: tekton.dev/v1alpha1
kind: Pipeline
metadata:
name: build-and-deploy-react
ืืขืจื ืึธื ืืื ืื ืกืคึผืขืง ืึธืคึผืืืืืื ื ืืืจ ืืขื ืึทื ืึธื ืืืืึทื ืคืื ืื ืจืขืกืืจืกื ืืืึธืก ืืืจ ืืืฉืืคื ืคืจืืขืจ:
spec:
resources:
- name: web-application-repo
type: git
- name: built-web-application-image
type: image
- name: runtime-web-application-image
type: image
ืืขืจื ืึธื ืืืจ ืืึทืื ืื ืืึทืกืงืก ืืืึธืก ืืื ืืืขืจ ืจืขืจื - ืืื ืืข ืืึทืจืฃ ืฆื ืคืึทืจืขื ืืืงื. ืขืจืฉืืขืจ ืคืื ืึทืืข, ืขืก ืืืื ืืืกืคืืจื ืื s2i-web-app ืึทืจืืขื ืืืึธืก ืืืจ ืืึธืื ืฉืืื ืืืฉืืคื:
tasks:
- name: build-web-application
taskRef:
name: s2i-web-app
kind: ClusterTask
ืื ืึทืจืืขื ื ืขืื ืึทืจืืึทื ืฉืจืืึทื (ืืืจ ืืืื) ืืื ืจืขืืืืืึทื (ืืืื-ืืืขื-ืึทืคึผืคึผืืืงืึทืืืึธื-ืืืื ืืืื) ืคึผืึทืจืึทืืขืืขืจืก. ืืืจ ืืืื ืคืึธืจื ืขืก ืึท ืกืคึผืขืฆืืขื ืคึผืึทืจืึทืืขืืขืจ ืึทืืื ืึทื ืขืก ืงืขื ื ืืฉื ืืึทืฉืืขืืืงื TLS ืืื ื ืืืจ ื ืืฆื ืืื-ืืขืืชืืขื ืกืขืจืืืคืืงืึทืฅ:
resources:
inputs:
- name: source
resource: web-application-repo
outputs:
- name: image
resource: built-web-application-image
params:
- name: TLSVERIFY
value: "false"
ืืขืจ ืืืืึทืืขืจ ืึทืจืืขื ืืื ืึผืืขื ืื ืืขืืืข, ื ืึธืจ ืืึธ ืื ืืืขืืึทืคึผืคึผ-ืืืืขื-ืจืื ืืืืข ืงื ืืื ืึทืจืืขื ืืืึธืก ืืืจ ืืึธืื ืฉืืื ืืืฉืืคื ืืื ืืขืจืืคื:
name: build-runtime-image
taskRef:
name: webapp-build-runtime
kind: ClusterTask
ืืื ืืื ืื ืคืจืืขืจืืืงืข ืึทืจืืขื, ืืืจ ืคืึธืจื ืึท ืืืื, ืึธืืขืจ ืืืฆื ืขืก ืืื ืืขืืืื-ืืืขื-ืึทืคึผืืึทืงืืืฉืึทื ืืืื (ืืขืจ ืจืขืืืืืึทื ืคืื ืืื ืืืขืจ ืคืจืืขืจืืืงื ืึทืจืืขื). ืืื ืืื ืึท ืจืขืืืืืึทื ืืืจ ืืืืืขืจ ืฉืืขืื ืื ืืืื. ืืื ื ืืขื ืึทืจืืขื ืืืื ืืืื ืขืงืกืึทืงืืืืึทื ื ืึธื ืื ืคืจืืขืจืืืงืข, ืืืจ ืืืืื ืื 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
ืื ืืืืึทืืขืจ ืฆืืืื ืืึทืกืงืก ืืขื ืขื ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ ื ืืฆื ืื ืกืขืจืืืืก, ืืึทืจืฉืจืื ืืื ืืืคึผืืืืืึทื ื YAML ืืขืงืขืก ืืืึธืก ืืขืื ืืื ืื k8s ืืืขืืืืืึทืืขืจ ืคืื ืืื ืืืขืจ ืืืขื ืึทืคึผืืึทืงืืืฉืึทื, ืืื ืืืื ืคึฟืึทืจ ืึทืคึผืืืืืื ื ืืขื ืืืคึผืืืืืึทื ื ืืืขื ืงืจืืืืืื ื ื ืืึทืข ืืืืืขืจ. ืืืจ ืืืคืืื ื ืื ืฆืืืื ืงื ืืื ืืึทืกืงืก ืืื ืื ืึธื ืืืื ืคืื ืืขื ืึทืจืืืงื.
ืกืืึทืจืืื ื ืื ืงืึทื ืืืืืขืจ
ืึทืืื, ืึทืืข ืืืืื ืคืื ืืื ืืืขืจ ืจืขืจื - ืืื ืืข ืืขื ืขื ืืืฉืืคื, ืืื ืืืจ ืืืขืื ืืืืคื ืขืก ืืื ืื ืคืืืืขื ืืข ืืึทืคึฟืขื:
$ tkn pipeline start build-and-deploy-react
ืืื ืืขื ืืื ืข, ืื ืืึทืคึฟืขืื ืฉืืจื ืืื ืื ืืขืจืึทืงืืืืืื ืืขื ืืฆื ืืื ืืืจ ืืึทืจืคึฟื ืฆื ืืืืกืงืืืึทืื ืื ืฆืื ืขืืขื ืจืขืกืืจืกื ืืื ืขื ืืคืขืจ ืฆื ืืขืืขืจ ืคืื ืืืึทื ืจืืงืืืขืก: ืคึฟืึทืจ ืื ืืื ืืืื, ืกืขืืขืงืืืจื ืืืขื-ืึทืคึผืคึผืืืงืึทืืืึธื-ืจืขืคึผืึธ, ืืื ืคึฟืึทืจ ืืขืจ ืขืจืฉืืขืจ ืืืื ืืืื, ืืขืืืื-ืืืขื-ืึทืคึผืืึทืงืืืฉืึทื -ืืืื, ืืื ืืขืกืึธืฃ, ืคึฟืึทืจ ืื ืจืืข ืืืื ืืืื -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
ืืืฆื ืืึธืื ืืื ืื ืงืึธื ืืจืึธืืืจื ืื ืกืืึทืืืก ืคืื ืื ืจืขืจื - ืืื ืืข ืืื ืื ืคืืืืขื ืืข ืืึทืคึฟืขื:
$ tkn pipeline logs -f
ืึทืืึธื ืื ืจืขืจื - ืืื ืืข ืืื ืกืืึทืจืืขื ืืื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืืืคึผืืืื, ืืืจ ืงืขื ืขื ืืขืื ืื ืืจืืืก ืืึทืจืฉืจืื ืืื ืื ืคืืืืขื ืืข ืืึทืคึฟืขื:
$ oc get route react-pipeline-example --template='http://{{.spec.host}}'
ืคึฟืึทืจ ืืขืจ ืืืืืฉืืืึทืืึทืืืืฉืึทื, ืืืจ ืงืขื ืขื ืืขื ืืื ืืืขืจ ืจืขืจื - ืืื ืืข ืืื ืื ืืขืืืขืืึธืคึผืขืจ ืืึธืืข ืคืื โโโโืื ืืืขื ืงืึทื ืกืึธืื ืืื ืืขืจ ืึธืคึผืืืืืื ื ืคึผืืคึผืขืืื ืขืก, ืืื ืืขืืืืื ืืื Fig. 1.

ืคืื.1. ืจืขืฆืขื ืืืข ืคืื โโืคืืืกื ืืืง ืคึผืืืคึผืืืื ื.
ืงืืืงืื ื ืืืืฃ ืึท ืคืืืกื ืืืง ืจืขืจื - ืืื ืืข ืืืกืคึผืืืื ื ืึธื ืืขืืึทืืืก, ืืื ืืขืืืืื ืืื ืคืืืืจืข 2.

ืจืืืก. 2. ื ืึธื ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืื ืจืขืจื - ืืื ืืข.
ื ืึธื ืืขืจ ืืื ืคึฟืึธืจืืึทืฆืืข, ืืืจ ืงืขื ืขื ืืขื ืคืืืกื ืืืง ืึทืคึผืืึทืงืืืฉืึทื ื ืืื ืื ืืืื ืื ื ืืึทืคึผืึธืืึทืืืฉื, ืืื ืืขืืืืื ืืื Fig.3.

ืคืืึทื 3. ืืึธื ืืฉื ืคึผืึธื.
ืงืืืงืื ื ืืืืฃ ืื ืงืจืืึทื ืืื ืืขืจ ืืืืืขืจืฉืืขืจ ืจืขืื ืืืื ืงื ืคืื ืื ืืืืื ืขืคืขื ืขื ืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื, ืืื ืืขืืืืื ืืื ืคืืืืจืข 4.

ืจืืืก. 4. ืคืืืกื ืืืง ืจืขืึทืงื ืึทืคึผืืึทืงืืืฉืึทื.
ืกืึธืฃ
ืึทืืื, ืืืจ ืืขืืืืื ืืื ืฆื ืืืืคื ืึท ืึทื ืืืืืงืืื ื ืกืขืจืืืขืจ ืคึฟืึทืจ ืืืื ืึทืคึผืืึทืงืืืฉืึทื ืืืืฃ OpenShift ืืื ืกืื ืืงืจืึทื ืืื ืขืก ืืื ืื ืืืืข ืืขืงืข ืกืืกืืขื. ืืืจ ืืืื ืืขืงืืงื ืืืืฃ ืืื ืฆื ืกืืืืืืจื ืึท ืืฉืืื ื-ืืืืขื ืืืกืืขืจ ื ืืฆื OpenShift Pipelines. ืึทืืข ืืืืฉืคึผืื ืงืึธืืื ืคืื ืืขื ืึทืจืืืงื ืงืขื ืขื ืืืื ืืขืคึฟืื ืขื .
ื ืึธื ืจืขืกืืจืกื (EN)
- ืคืจืื E- ืืื
- ืื ืืขืจืข ืึทืจืืืงืืขื ืืืืฃ ืืืืฃ ืื Red Hat ืืืขืืืืืื
ืึทื ืึทืื ืกืื ืคืื ืึทืคึผืงืึทืืื ื ืืืขืืื ืึทืจืก
ืืืจ ืึธื ืืืืื ืึท ืกืขืจืืข ืคืื โโืคืจืืืืื ืืืขืืื ืึทืจืก ืืืขืื ืืขืืืืจื ืืขืจืคืึทืจืื ื ืืื Red Hat OpenShift Container Platform ืืื Kubernetes:
ืืงืืจ: www.habr.com
