á¡á¬ážáá¯á¶ážáááºá¹ááá¬áá«! á€áááºááŸá¬ Red Hat OpenShift ááœáẠáá±ááºáá®áááºá¡ááºááá®áá±ážááŸááºážáá»á¬ážááᯠáááºááá¯á·á¡áá¯á¶ážáá»ááááºááᯠááŒáááá·áº áá»áœááºá¯ááºááá¯á·áá á®ážáá®ážááŸá áá¯áááááá¯á·á áºááŒá áºáááºá
ááááºááá¯á·á
áºááœááºá OpenShift ááááºáá±á¬ááºážáá±á«áºááœáẠáá±ááºáá®áááºá¡ááºááá®áá±ážááŸááºážáá»á¬ážáááºáá±á¬ááºááŒááºážááŸáá·áº á¡áá¯á¶ážáá»ááŒááºážá¡ááœáẠáá®ááá¯ááºážáá¯ááºáá¬ážááá·áº S2I (source-to-image) áááºáá±á¬ááºáá°áá¯ááºáá¯á¶áá
áœááºážáááºáá»á¬ážááᯠáá»áœááºá¯ááºááá¯á· á¡áááºážááẠááááœá±á·áááá«áááºá ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠá¡ááºááá®áá±ážááŸááºážáá
áºáá¯á¡á¬áž áá»ááºááŒááºá
áœá¬á¡áá¯á¶ážáá»ááŒááºážááá¯ááºáᬠáá±á«ááºážá
ááºááᯠá
áááºáááºá
á¬ážáá²á·ááŒááŒá®áž ááá±á·ááœáẠS2I áá¯ááºáá¯á¶á¡á¬áž "á
ááºááŒááºáá±á¬" áááºáá±á¬ááºáá°áá¯ááºáá¯á¶á¡ááŒá
Ạáááºááá¯á·á¡áá¯á¶ážááŒá¯ááááºááᯠáá±á·áá¬ááŒá®áž áááºážááᯠáááºááá¯ááºáᬠOpenShift á
ááºážáá±ážááœá²áá»á¬ážááŸáá·áº áá±á«ááºážá
ááºáááºááŒá
áºáááºá
ááá·áºááŸááºážáá±á¬áááºáá±á¬ááºáá°áá¯á¶
á¡ááá¯ááºáž XNUMX ááœááºáá±á¬áºááŒáá¬ážááá·áºá¡ááá¯ááºážá áá±ááºáá®áááºá¡ááá®áá±ážááŸááºážá¡áá»á¬ážá á¯ááœáẠáá¯ááºá¡á á¬ážááá¯ážááŒááºážá ááá¯ááºá¡áá»á¬ážá¡ááŒá¬ážáá±á«ááºážá ááºááŒááºážááŸáá·áº á¡áá±ážá áááºááŒá¯áá¯ááºááŒááºážáá²á·ááá¯á·áá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¯á¶ááŸááºá¡á¬ážááŒáá·áº áá¯ááºáá±á¬ááºááá·áº áááºáá±á¬ááºááŸá¯á¡ááá·áºáá¯áá±á«áºáááºá á€áá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááŒá±á¬áá·áº áááŸááá±á¬ááá¯ááºáá»á¬áž - áááºážááẠáááºááŒáááºáá±á¬ HTMLá JavaScript ááŸáá·áº CSS ááŒá áºááẠ- á¡ááœááºááá¯ááºááœá²ááœáẠááááºážáááºážáá¬ážáááºá á€ááá¯ááºááœá²ááááºáá±áá¬ááẠá¡áá»á¬ážá¡á¬ážááŒáá·áº áááºááá·áºáááºáá±á¬ááºáááááá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá±áááºáá±á«áºááœááºáá°áááºááŒá®áž React á¡ááœáẠáááºážááẠ./build ááá¯ááºááœá²ááŒá áºáááá·áºááẠ(áá»áœááºá¯ááºááá¯á·ááẠá€á¡áá¬á¡á¬áž á¡á±á¬ááºááœáẠááá¯ááá¯á¡áá±ážá áááºááŒáá·áº ááŒááºáááºáá±á¬áºááŒáá«áááº)á
á¡áááºážá¡ááŒá áºááŸáá¯á¶áááẠ(S2I)
á€ááá¯á·á
áºááœáẠáá»áœááºá¯ááºááá¯á·ááẠ"S2I ááá¯áááºááŸá¬ áá¬áá²á áááºážááᯠá¡áá¯á¶ážááŒá¯áááºáž" áá°áá±á¬ áá±á«ááºážá
ááºááŸáá·áº ááááºááá¯ááºáá« (á€á¡ááŒá±á¬ááºážááᯠáááºáááºáááºááŸá¯ááá¯ááºáá«áááºá
á ááºážáá±ážááœá²á¡ááá·áº
áááºáááºááŸá¯á¡ááá·áºááẠááẠdocker áááºáá±á¬ááºááŒá®áž Docker áá¯á¶á¡áá áºááŒáá·áº á¡áá¯á¶ážáááºááá·áºá¡áá« ááŒá áºáá»ááºáá¯á¶ááŸáá·áº á¡ááœááºáááºáá°áá«áááºá ááá¯á·ááŒá±á¬áá·áºá OpenShift ááááºáá±á¬ááºážáá±á«áºááœááºáááºáá±á¬ááºááŸá¯á áááºáá±á¬á¡áá«á€á¡ááá·áºáááºááŒá áºáá±á«áºáááºá
Web App Builder áá¯á¶áá
áºáá¯á¡ááœááºá ááá·áºá¡ááá®áá±ážááŸááºážá ááŸá®ááá¯ááŸá¯ááᯠááá·áºááœááºážááŒá®áž áááºáá±á¬ááºááŸá¯ááᯠáá¯ááºáá±á¬ááºááẠáá¬áááºááŸááááºá
á á±á¬á á±á¬áááŒá±á¬áá²á·áááá¯áá²á áááºáá±á¬ááºááŒá®ážáá¬áž á¡ááá®áá±ážááŸááºážáá²á· áááºáá±áá¬áᬠáááºá¡áá¯á¶ážááŒá¯áá²á· áááááá¬ááœá±á¡áá±á«áº áá°áááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá React ááœáẠáááºážááẠ./build ááá¯ááºááœá²ááŒá áºáááºááŒá áºááŒá®áž Angular á¡ááá®áá±ážááŸááºážáá»á¬ážá¡ááœáẠáááºážááẠproject_name/dist ááá¯ááºááœá²ááŒá áºáááá·áºáááºá ááááºááá¯á·á áºááœááºááŒáá¬ážááŒá®ážááŒá áºááá·áºá¡ááá¯ááºážá áá¯á¶áá±ááŒáá·áºáááºáá±á¬ááºáááºáááºááŸááºáá¬ážááá·áº output directory ááááºáá±áá¬ááᯠOUTPUT_DIR áááºáááºážáá»áẠvariable ááŸáááá·áºááœáŸááºážááá¯ážááá¯ááºáááºá áá±á¬ááºážááŒá®á output folder ááááºáá±áá¬ááẠframework áá áºáá¯á០framework áá áºáá¯ááŸáá·áºáá áºáá¯ááá°áá±á¬ááŒá±á¬áá·áºá áááºááẠimage ááŸá standard folder ááá¯á·áá¯ááºáá¯ááºááá¯ááºáá±á¬ output ááŒá áºááá·áº /opt/apt-root/output ááá¯áá°ážáá°áá«á á€áá±á¬ááºážáá«ážááá»ááºááŸááá±áá±ážáááºááá¯áá¬ážáááºáááºá¡áá±ážááŒá®ážáááºá ááá¯á·áá±á¬áºááá¯á¡ááœááºáá±á¬ááºáááºá¡ááá·áº - á¡ááŒá±ážá¡ááá·áºááá¯á¡ááŒááºááŒáá·áºááŸá¯ááŒáá«á áá¯á·á
run á¡ááá·áº
á
ááºážáá±ážááœá²á¡ááá·áºá¡ááœááºáž áááºáá®ážáá¬ážáá±á¬ áá¯á¶á¡áá
áºááœáẠdocker run ááá¯á· áá±á«áºááá¯ááŸá¯ááŒá¯áá¯ááºááá·áºá¡áá« á€á¡ááá·áºááẠááŒá
áºáá±á«áºáááºá OpenShift ááááºáá±á¬ááºážáá±á«áºááœáẠááŒáá·áºáá»ááºááá·áºá¡áá« á¡áá¬ážáá°ááŒá
áºáááºáá«áááºá áá¯á¶áá±
á€áááºážáááºážááẠá¡ááá®áá±ážááŸááºážáá»á¬ážááᯠáá»ááºááŒááºá áœá¬ á¡áá¯á¶ážáá»ááŒááºážá¡ááœáẠáá±á¬ááºážááœááºáá±á¬áºáááºážá á€áááºážááŒáá·áº áááºááŒáááºáá±á¬ á¡ááŒá±á¬ááºážá¡áá¬ááᯠáá¯ááºáá±á¬ááºááẠáá±áá¯áá»á¡á¬ážááŒáá·áº á¡ááŒá¶ááŒá¯áá¬ážááŒááºáž áááŸááá«á áá±á¬ááºážááŒá®á áááºááœá±á·ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáááºááŒáááºáá±á¬á¡ááŒá±á¬ááºážá¡áá¬ááá¯áᬠáá±á¬ááºááœááºáá±ážáá±á¬ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááá¯ááºáá¯á¶á¡ááœááºážááœáẠNode.js ááá·áºááœááºážááẠáááá¯á¡ááºáá« - áááºáá¬áá¬ááẠáá¯á¶áá±á¬ááºáááºááŒá áºáááºá
áá áºáááºážááá¯ááá±á¬áº áá»áœááºá¯ááºááá¯á·ááẠáá áºá á¯á¶áá áºáá¯á¡á¬áž á á¯á ááºážáá±á¬á¡áá«á á¡áá±á¬ááºá¡áááºáá±á¬áºáá±á¬á¡áá«ááœáẠá¡ááŒá¬ážáá áºáá¯ááᯠááá¯á¡ááºáááºá á€á¡ááŒá±á¡áá±ááœááºá áá¶ááŒáá¯ážááŒáá·áºáááºáá±á¬ááºááŸá¯áá»á¬ážáááºá¡áááºááŒá±áááºá
áá¶ááŒáá¯ážáá»á¬ážááŒáá·áº áááºáá±á¬ááºáááºá
áá«á áá°ááá¯á·áá±ážáá²á·á¡ááŒá±á¬ááºážáá«á
"áá áºáá¯ááẠcompiled entity ááá¯áááºáá®ážááŒááºážááŸáá·áº á¡ááŒá¬ážáá áºáá¯ááẠááá¯entity ááᯠrun áááºá¡áá¯á¶ážááŒá¯áá±á¬ áá®ážááŒá¬ážáá¯á¶áá áºáá¯ááœáẠááá¯entity ááᯠhosting áá¯ááºááŒááºážááŒáá·áº á ááºážáá±ážááœá²ááŸá áºáá¯ááᯠá¡áá°áááœáá»áááºáááºááá¯ááºáááºá"
áá áºáááºážááá¯ááá±á¬áºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯ááá¯áá¯ááºáá±á¬ááºááẠWeb App Builder áá¯á¶ááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºááŒá®ážá ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·áá¡ááŒá±á¬ááºážá¡áá¬ááᯠáá±á¬ááºááœááºáá±ážáááºá¡ááœáẠáááºáá¬áá¬áá¯á¶ááŒá áºááá·áº NGINX ááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá
ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠWeb App Builder áá¯ááºáá¯á¶ááᯠ"á ááºááŒááºáá±á¬" áááºáá±á¬ááºáá°á¡ááŒá Ạá¡áá¯á¶ážááŒá¯ááá¯ááºááŒá®áž áá áºáá»áááºáááºážááœáẠá¡áá±ážá á¬áž runtime áá¯á¶áá áºáá¯ááŸááááºá
á¡áᯠáá«ááᯠá¡ááá¡áá» á¥ááá¬áá áºáá¯áá²á· ááŒáá·áºáá¡á±á¬ááºá
áá±á·áá»áá·áºááŸá¯á¡ááœáẠá¡áá¯á¶ážááŒá¯áá«áááºá
á¡á²áá«á áá«ááá¯á·á¡á¬ážáá¯á¶ážááᯠáá±á«ááºážá
ááºážááá¯á· áá°áá®áá±ážáááá·áºáááºá
á€ááá¯ááºááᯠááá¯ááá¯á¡áá±ážá áááºááŒáá·áºáá¡á±á¬ááºá ááá·áºáááºáá»ááºáá»á¬ážááá¹áááŒáá·áº á áááºáá«á
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
á€áá±áá¬á á¡áá¬á¡á¬ážáá¯á¶ážááẠááŸááºážááŸááºážáááºážáááºážááŒá áºáá±á¬áºáááºáž OUTPUT_DIR ááá·áºáááºáá»ááºááᯠá¡á¬áá¯á¶á áá¯ááºááá·áºáááºá áá»áœááºá¯ááºááá¯á·áá¥ááá¬ááŸá React á¡ááºááºá¡ááœááºá React ááẠáá°ááááºááá¯ážááᯠá¡ááœááºááá¯ááºááœá²á¡ááŒá Ạá¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ááŒá±á¬áá·áºá ááá¯á·áá±á¬áº Angular ááá¯á·ááá¯áẠá¡ááŒá¬ážá¡áá¬áá áºáá¯áá¯ááœááºá á€ááá·áºáááºáá»ááºááᯠááá¯á¡ááºáááᯠááŒá±á¬ááºážáá²ááẠááá¯á¡ááºáááºááŒá áºáááºá
á¡áᯠ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'
ááááááŸáá·áº á áá¯áá¹ááá¯á¶áá»á¬ážááᯠááŒáá·áºáá«á áááºážááá¯á·ááŸá áºáŠážáá¯á¶ážááᯠDocker áá¯á¶áá»á¬ážá¡ááŒá ẠáááºááŸááºáá¬ážááŒá®áž áááºážááá¯á·ááẠáááºááá·áºáá±áá¬á០áááºážáááºáá¬áááºááᯠááŸááºážááŸááºážáááºážáááºáž ááááŒááºááá¯ááºáá«áááºá
áááááá¯á¶ááẠweb-app-builder ááŒá
áºááŒá®áž áááºážááẠnodeshift/ubi8-s2i-web-app á០10.x ááᯠáááºáá¯ááºáá¬ážáááºá
á
áá¯áá¹áááẠáá±á¬ááºáá¯á¶ážáá±á«áºáááºááºáá«ááŸááá±á¬ NGINX áá¯á¶ (áá¬ážááŸááºáž 1.12) ááŒá
áºáááºá
áá² ááááá¯á¶ááŸá áºáá¯ááᯠááŒáá·áºáá¡á±á¬ááºá áááºážááá¯á·ááŸá áºáŠážá áá¯á¶ážááẠá¡á ááœáẠááá¬ááŒá áºáá±ááŒá®áž áááºáá±á¬ááºááŸá¯á¡ááá·áºááœááºáᬠáááºáá®ážáá¬ážáááºá ááááá¯á¶á react-web-app-builderá ááẠweb-app-builder-runtime áá¯á¶ááŸáá·áº áá»áœááºá¯ááºááá¯á·áá¡áááºážá¡ááŒá áºáá¯ááºááá¯á·ááᯠáá±á«ááºážá ááºááá·áº á¡á á¯á¡áá±ážá¡ááá·áºáá áºáá¯á ááááºááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠá€áá¯á¶áá¡áááºááœáẠ"-builder" ááᯠááá·áºáá¬ážáááºá
áá¯ááááá¯á¶ - react-web-app-runtime - ááẠnginx-image-runtime ááŸáá·áº react-web-app-builder áá¯á¶á០ááá¯ááºá¡áá»áá¯á·ááᯠáá±á«ááºážá ááºááŒááºážá ááááºááŒá áºáááºá á€áá¯á¶ááᯠááŒáá·áºáá»ááºá ááºááœááºáááºáž á¡áá¯á¶ážááŒá¯áááºááŒá áºááŒá®áž áá»áœááºá¯ááºááá¯á·á á¡ááá®áá±ážááŸááºážá áááºááŒáááºáá±á¬ HTMLá JavaScriptá CSS ááá¯á·áᬠáá«áááºáááºááŒá áºáááºá
á áááºááŸá¯ááºáá±áá¬áž? ááᯠáááºáá±á¬ááºááŸá¯áá¯á¶á á¶áá»á¬ážááᯠáá±á·áá¬ááŒáá·áºáá¡á±á¬ááºá áááºážááẠá¡áááºážááẠááá¯ááá¯ááŸááºážáááºážáá¬áááºááŒá áºáááºá
áá»áœááºá¯ááºááá¯á·á ááá°áá¬áá¯á¶á á¶ááœáẠáááºáá±á¬ááºááŸá¯áá¯á¶á á¶ááŸá áºáá»áá¯ážááŸááááºá áá«á ááááá áºáá¯áá«á áá±á¬áºáá±á¬á·áºááᯠá á¶áá»áááºáá®áá«áááºá
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
áááºááœá±á·ááŒááºáááá·áºá¡ááá¯ááºážá á€áááºáá±á¬ááºááŸá¯áááááºááᯠImageStreams ááá¹áááœáẠá¡áááºážáááºá á±á¬áá±á¬ áá»áœááºá¯ááºááá¯á·ááœá±á·áá²á·ááá·áº react-web-app-builder áá¯á¶ááœáẠáááºááŒááºáááá·áºá¡ááá¯ááºáž á¡ááœáŸááºáž 1 áá«áá±á¬á á¬ááŒá±á¬ááºážá áá±á¬áºááŒáááºá
2 ááá¯á· áá¶ááááºáááºáá¬ážáá²á· á á¬ááŒá±á¬ááºážá áá¯ááºááᯠáááºáááááºááá¯áᬠááŒá±á¬ááŒáááºá áá»áœááºá¯ááºááá¯á·áá¡ááŒá±á¡áá±ááœááºá áááºážááẠgit repository ááŒá áºááŒá®ážá áááºáá±áá¬á ref ááŸáá·áº context folder ááẠá¡áááºááœááºááœá±á·ááŒááºááŒá®ážáá¬áž parameters áá»á¬ážááŒáá·áº áá¯á¶ážááŒááºáá«áááºá
3 áᯠáá¶ááááºáááºáá¬ážáá±á¬ á
á¬ááŒá±á¬ááºážááẠááá·áºáááºáá»ááºáá»á¬áž ááá¹áááœáẠáá»áœááºá¯ááºááá¯á· ááŒááºááŒá®ážáá¬ážááŒá
áºáááºá áááºážááẠáá»áœááºá¯ááºááá¯á·áááá°áá¬ááœáẠáááºáá±á¬ááºáá¬ážááá·áº OUTPUT_DIR áááºáááºážáá»áẠvariable ááᯠáá±á«ááºážááá·áºáááºá
ImageStream ááá¹áááœáẠáá»áœááºá¯ááºááá¯á·ááŒááºáá¬ážááŒá®ážááŒá
áºááá·áº web-app-builder-runtime áá¯á¶ááᯠ4 áᯠáá¶ááááºáááºáá¬ážááá·áº á
á¬ááŒá±á¬ááºážá ááá¯áááºá
S5I áá¯ááºáá¯á¶ááẠáááºážááᯠáá¶á·ááá¯ážáá±ážáááºááá¯áá«á áá»áœááºá¯ááºááá¯á·ááẠááá¯ážááŒáá·áºáááºáá±á¬ááºááŸá¯áá áºáá¯ááᯠá¡áá¯á¶ážááŒá¯ááá¯ááŒá±á¬ááºáž ááŸáá·áº Web App Builder áá¯á¶ááœáẠáá¶ááááºáááºáá¬ážáá±á¬ á á¬ááŒá±á¬ááºáž 2 á ááá¯áááºá ááááŠážá áœá¬á áááºáá»áááºááœááºá á á¯áá±ážááŸá¯á¡ááá·áºááŒá®ážááœá¬ážáá±á¬á¡áá«á áá¯á¶ááẠnode_modules ááá¯áá«ááᯠarchive file áá áºáá¯á¡ááŒá áºááááºážáááºážáááºááŒá áºáááºá ááá¯á·áá±á¬ááºá áá±á¬ááºáááºááœá²áá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááœááºá áá¯á¶ááẠáááºáá±á¬ááºáá»áááºááá¯áá»áŸá±á¬á·áá»ááẠá€ááá¯ááºááœá²ááᯠáá áºááœáá·áºááá¯ááºáá«áááºá
áá±á¬ááºáá¯á¶ážá¡áá±ááŸáá·áºá 6 áá¯á¡áááºáááºáá¬ážáá±á¬á á¬ááŒá±á¬ááºážááẠáá áºá á¯á¶áá áºáá¯ááŒá±á¬ááºážáá²áá±á¬á¡áá«ááœáẠáá°ááá¯ááºááá¯ááºáááºáá±á¬ááºá áœááºáááºááŸá¯áááŸááá² á¡ááá¯á¡áá»á±á¬ááºáááºáá±á¬ááºááẠá¡á áá»áá¯ážá¡áááºážáááºáá»áŸáá¬ááŒá áºáááºá
áá±áá°áá»á¡á¬ážááŒáá·áº á€á¡áá¬ááẠáá±á¬áºáá¯á¶áááºáá¯á¶ áááºáá±á¬ááºááŸá¯áá¯á¶á á¶áá áºáá¯ááŒá áºáááºá
á¡áᯠáá¯ááááááºáá±á¬ááºááŸá¯áá¯á¶á á¶ááᯠááŒáá·áºáá¡á±á¬ááºá ááááá áºáá¯ááŸáá·áº á¡ááœááºáááºáá°áá±á¬áºáááºáž á¡áá±ážááŒá®ážáá±á¬ ááŒá¬ážáá¬ážáá»ááºáá áºáá¯ááŸááááºá
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
ááá¯á·ááŒá±á¬áá·áº áá¯ááááááºáá±á¬ááºááŸá¯áá¯á¶á á¶ááẠreact-web-app-runtime ááŒá áºááŒá®ážá áááºážááẠá á¶ááŸá¯ááºážáá»á¬ážá áœá¬ááŒáá·áº á áááºáááºá
1 áá¯á¡áááºáááºáá¬ážáá±á¬á á¬ááŒá±á¬ááºážááẠá¡áá áºá¡áááºážááá¯ááºáá« - áááºáá±á¬ááºááŸá¯ááááºááᯠreact-web-app-runtime áá¯á¶ááœáẠááá·áºááœááºážáá¬ážááŒá±á¬ááºáž ááá¯ážááá¯ážááŸááºážááŸááºážááŒá±á¬áá¬ážáááºá
ááááºááœá²á·á ááºážáá¯á¶ááœááºáá²á·ááá¯á· 2 áá¶ááááºáááºáá¬ážáá±á¬ á á¬ááŒá±á¬ááºážááẠá¡áááºážá¡ááŒá áºáá¯ááºááᯠáááºááá·áºáá±áá¬ááœáẠááá°ááááºááᯠááœáŸááºááŒáááºá ááá¯á·áá±á¬áº á€áá±áá¬ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáááºážááᯠáá¯á¶ááŸáá°áááºáᯠááŒá±á¬áá±ááŒááºážááᯠáááááŒá¯áá«á ááá¯á·á¡ááŒááºá áá»áœááºá¯ááºááá¯á·áááºáá®ážáá¬ážáá±á¬áá¯á¶á០- react-web-app-builder (á á¬ááŒá±á¬ááºáž 3 ááœááºáá±á¬áºááŒáá¬ážáááº) ááŸá áá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯ááá¯áá±á¬ááá¯ááºáá»á¬ážááẠáá¯á¶á¡ááœááºážááœááºááŸáááŒá®áž áááºážááá¯á·ááááºáá±áá¬ááᯠáá»ááºážááŒá±á¬ááºáž 4 ááœááºáááºááŸááºáá¬ážááŒá®ážá áá»áœááºá¯ááºááá¯á·ááá á¹á ááœááºá áááºážááẠ/opt/app-root/output/ ááŒá áºáááºá áááºááŸááºáááá«áá áá»áœááºá¯ááºááá¯á·áá¡ááá®áá±ážááŸááºážáááºáá±á¬ááºááŒááºážáááááºáá»á¬ážá¡áá±á«áºá¡ááŒá±áá¶ááá¯ááºáá¯ááºáá¬ážáá±á¬ááá¯ááºáá»á¬ážááá¯ááááºážáááºážáá¬ážááá·áºáá±áá¬ááŒá áºáááºá
á¡ááœáŸááºáž 5 áá« áá±á«áá¬áááœááºáá±á¬áºááŒáá¬ážááá·áº áŠážáááºáá¬ááá¯ááºááœá²ááẠáááºááŸááááºážááœáŸááºáá»ááºááŒá áºááẠ(áááºážááẠOpenShift áá¯áá±á«áºáá±á¬ ááŸá±á¬áºáááºááá·áºá¡áá¬áá áºáá¯á¡ááœááºážááœáẠáááºáááºáá±ááŒá®áž ááá·áºá ááºááœááºážááœááºáá»á°áá¬ááœááºááá¯ááºáá²)á
áá»á°áá¬á¡ááá¯ááºáž - 6 áá¯á¡áááºáááºáá¬ážáá±á¬ ááá¯ááºážááẠááááááºáá±á¬ááºáá¯á¶ááœá²á·á ááºážáá¯á¶ááŸáá·áº áááºáá°áááºá ááá¯áá áºááŒáááºáᬠáá»áœááºá¯ááºááá¯á·ááẠImageStream ááá¹áááœáẠááœá±á·áá¬ážááŒá®ážááŒá áºááá·áº nginx-image-runtime ááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
áá±á¬ááºáá¯á¶ážááœááºá 7 áá¯á¡áááºáááºáá¬ážáá±á¬á á¬ááŒá±á¬ááºážááẠreact-web-app-builder áá¯á¶ááŒá±á¬ááºážááá¯ááºáž á€áááºáá±á¬ááºááŸá¯ááᯠá¡áááºááœááºážááá·áº á¡á áá»áá¯ážááá¹ááá áºáá¯ááŒá áºáááºá
ááá¯ááºáá«áá á€áá¯á¶á á¶áááááºááœáẠá á¶ááá°áá¬ááŒááœá²á·á ááºážááŸá¯áá¯á¶á á¶á¡ááŒáẠáááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº áááºážááŒá±á¬ááºážáá»á¬ážááŸáá·áº áááºááá¯ááºááá·áºá¡áá¬áá»á¬ážáá«ááŸááááºá ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááẠááá¯á¡áá±ážá áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠááœááºááœááºáá²áá² áá¯ááºáá±á¬ááºáááºááá¯ááºáá«á á¡áá¯á¶ážááŒá¯ááá·áºáá¯á¶ááẠreact-web-app-runtime áá¯á¶ááŒá áºááŒá±á¬ááºáž áá»á±ážáá°ážááŒá¯á áááááŒá¯áá«á
áá»áŸá±á¬ááºááœáŸá¬ááŒáá·áºáá»ááºááŒááºážá
áá«ááŒá±á¬áá·áº á¡áᯠááá°áá¬áá¯á¶á á¶ááᯠááŒáá·áºááŒá®áž á¡ááºááá®áá±ážááŸááºážááᯠáááºááá¯á¡áá¯á¶ážáá»áááá²ááá¯áᬠááŒáá·áºááŒáá¡á±á¬ááºá
áá»áœááºá¯ááºááá¯á·á template ááá¯á¡áá¯á¶ážááŒá¯ááẠoc áá¯áá±á«áºáá±á¬ OpenShift client tool ááá¯áá¯á¶ážááá¯ááºáááº-
$ 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
á¡áááºáá±á¬áºááŒáá« áááºáá¬ážááŒááºáá¬ááºáá¯á¶ááŸá áááá¡áááá·áºááŸá¬ ááá°áá¬áá¯á¶á á¶áá áºáá¯ááᯠááŸá¬ááœá±ááẠááááºááᬠá¡ááºáá»ááºáá®áá¬áááºážáá áºáá¯ááŒá áºáááºá/openshiftio/application.yamlá
áá¯ááá command ááẠဠtemplate ááᯠá¡ááŒá±áá¶á á¡ááá®áá±ážááŸááºážá¡áá áºáá áºáá¯ááᯠáááºáá®ážáááºá
á€á¡áááá·áºáá»á¬ážá¡áá¯ááºáá¯ááºááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááœááºá ááºážáá±ážááœá²ááŸá áºáá¯ááŸááááºááá¯áá»áœááºá¯ááºááá¯á·ááœá±á·áááá·áºáááºá
ááŒá¯á¶áá¯á¶áá¯á¶ážáááºáá»áẠáááºáá¬ážááŒááºááá¯á· ááŒááºááœá¬ážáá±á¬á¡áá«á ááœáŸáá·áºáááºáá¬ážáá±á¬ áá±á«á·ááºááᯠáá»áœááºá¯ááºááá¯á· ááœá±á·ááááá·áºáááº-
ááá·áºááºááᯠááŸáááºááá¯ááºáá«á áá»áœááºá¯ááºááá¯á·ááẠáá°áááºáž React App á á¬áá»ááºááŸá¬ááŒá áºááá·áº áá»áœááºá¯ááºááá¯á·áá¡ááºááºááá¯á· áá±á«áºáá±á¬ááºááœá¬ážáá«áááºá
ááŒáá·áºá áœáẠ1
Angular áá»á
áºáá°áá»á¬ážá¡ááœááºáá»áœááºá¯ááºááá¯á·áááºážááŸááááºá
OUTPUT_DIR ááááºážááŸááºááŸááœá²á á€áá±áá¬ááœáẠáá¯á¶á á¶ááẠá¡áá°áá°áááºááŒá áºáá«áááºá
ááŒáá·áºá áœáẠ2
á€áá±á¬ááºážáá«ážááœáẠáá»áœááºá¯ááºááá¯á·ááẠNGINX ááᯠáááºáá¬áá¬á¡ááŒá
Ạá¡áá¯á¶ážááŒá¯áá²á·áááºá ááá¯á·áá±á¬áº áááºážááᯠApache ááŒáá·áº á¡á
á¬ážááá¯ážááẠá¡ááœááºááœááºáá°áááºá ááá¯ááºááŸá ááá°áá¬áá¯á¶á
á¶ááᯠááŒá±á¬ááºážááá¯ááºáá¯á¶áááºá
áá±á¬ááºáá»ááº
á€á á®ážáá®ážááááááá¯ááºážáá áá»áœááºá¯ááºááá¯á·ááẠOpenShift ááááºáá±á¬ááºážáá±á«áºááœáẠáá±ááºáá®áááºá¡ááºááºáá®áá±ážááŸááºážáá»á¬ážááᯠáááºááá¯á·áá»ááºááŒááºá áœá¬á¡áá¯á¶ážáá»ááááºááᯠááŒááá²á·áááºá ááá±á·ááœáẠWeb App áá¯á¶áá áºáá¯áá¯ááºáá±á¬ááºáá¯á¶ááŸáá·áº áááºážááᯠNGINX áá²á·ááá¯á· ááá·áºá ááºáá±á¬áááºáá¬áá¬áá áºáá¯ááŸáá·áº áá±á«ááºážá ááºáá¯ááºáá¯ááºááá¯ááºá á±ááẠáá¶ááŒáá¯ážáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááá¯ááá¯áá¯ááºáá¯ááºáááºá¡áááºááá·áºááŸááá±á¬ application build áá áºáá¯ááᯠáááºáá®ážáááºá¡ááœáẠááá±á· áá»áœááºá¯ááºááá¯á· ááŒáá·áºááŸá¯áá²á·ááŒáááºá á€á á®ážáá®ážá áá±á¬ááºááŸáá·áº áá±á¬ááºáá¯á¶ážáá±á¬ááºážáá«ážááœáẠOpenShift ááœáẠááá·áºá¡ááºááºáá®áá±ážááŸááºážá¡ááœáẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¬áá¬ááᯠáááºááá¯á·áá¯ááºáá±á¬ááºááááºááᯠááŒááááºááŒá áºááŒá®áž áá±áááœááºážááŸáá·áº á¡áá±ážááááºážááá¯ááºáá»á¬ážááᯠáá áºááŒáá¯ááºáááºážáá¯ááºáá±á¬ááºááŒá±á¬ááºáž áá±áá»á¬á á±áááºááŒá áºáááºá
á€áá±á¬ááºážáá«ážááœá²á á¡ááŒá±á¬ááºážá¡áá¬áá»á¬áž
- á¡ááá¯ááºáž 1:
á¡ááá·áºá¡áááºážáááºáá»áŸááŒáá·áº áá±ááºáá®áááºá¡ááºááºáá®áá±ážááŸááºážáá»á¬ážááᯠáááºááá¯á·á¡áá¯á¶ážááŒá¯ááááºáááºážá ; - á¡ááá¯ááºáž 2- áá¯ááºáá¯ááºááŸá¯ ááŒáá·áºáá»ááºááŸá¯á¡ááœáẠáááºá áẠOpenShift á ááºážáá±ážááœá²áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áááºááŸá HTTP áá¬áá¬áá¯á¶ááŒá áºááá·áº NGINX áá²á·ááá¯á· S2I áá¯ááºáá¯á¶á¡áá áºááᯠá¡áá¯á¶ážááŒá¯áááºážá
- á¡ááá¯ááºáž 3- OpenShift ááááºáá±á¬ááºážáá±á«áºááœáẠááá·áºá¡ááá®áá±ážááŸááºážá¡ááœáẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¬áá¬ááᯠáááºááá¯á·áááºáááºááŒá®áž áááºážááᯠáá±áááœááºáž ááá¯ááºá áá áºááŸáá·áº áá áºááŒáá¯ááºáááºážáá¯ááºáá±á¬ááºááááºáááºážá
áááºáá±á¬ááºážá¡áááºážá¡ááŒá áºáá»á¬áž
- á¡ááá²á· e-book
OpenShift ááá¯á· á¡áá¯á¶ážáá»áá±áá«áááºá . - ááááºážá¡áá»ááºá¡áááºá¡áá±á«áº
OpenShift ááŸáá·áº Kubernetes .
source: www.habr.com