αα½ααααΈβα’αααβααΆααα’ααααααΆ! αααααΊααΆααΆααααααΆαααΈααΈααα αααα»ααααααΈααααααΎααααααΎααααα αΆαααΈααααααΆαααααααΆααααααα·ααΈαααααΆαααααΎααα ααΎ Red Hat OpenShift α
αα
αααα»αααΆααααααΆααα»α ααΎαααΆααααααααα·α
ααΎαααααααΆαααααΌαααΆαα’ααααααααΎα S2I (ααααααα
ααΌαααΆα) αααααααΌαααΆααα
ααΆα‘αΎααααααΆααααΆααααΆα αα·αααΆαααααααΆααααααα·ααΈαααααΆαααααΎααα
ααΎαααα·ααΆ OpenShift α αααααΆααααααΎαα
αΆααα’αΆααααααααΎαααααΆαααααααΆαααΆαααααααΆααααααα·ααΈαααΆααα αα α αΎααααααααααΎαααΉααα·αα·αααααΎαααααααααΎααΌαααΆα S2I ααΆααΌαααΆαα’ααααααααΎα "αα»ααα" α αΎααααα
αΌαααΆααΆαα½αααΆααααα»α OpenShift αααααΆαααααααα
ααΌαααΆαα’αααααΆααααααα’αΆα
ααΌα αααααΎαααΆαααΎαα‘αΎααα αααα»ααααααααΈ XNUMX αααααα·ααΈαααααΆαααααΎαααΆαα αααΎαααΆαααααΆααααΆααααα α ααΆ build αααααΆααααααΆααααΎαααΆαααΌα ααΆααΆαα ααααααΌα ααΆαααααΆααα―αααΆαα αααΎα αα·αααΆαααααα½αααΌα α α―αααΆααααααα½αααΆαααΆααααααααααααα·ααααα·ααΆαααΆααααα α αΎααααααΊααΆ HTML αα·αα·αααα JavaScript αα·α CSS ααααΌαααΆααααααΆαα»ααααα»αααααααααα ααΈααΆαααααα Folder αααααΆααααααΆα’αΆαααααααΎα’αααΈααα build tool αααα»αααααΌαααΆαααααΎααααΆαα α αΎααααααΆαα React αααααΉαααααΆαααΆ folder ./build (ααΎαααΉαααααααααααΆαα·ααα αααα»αααααααΆααααα’α·αααΆαααααα)α
ααααα-αα ααΌαααΆα (S2I)
αα
αααα»αααΆααααααΆαααα ααΎααα·ααα·ααΆαα’αααΈαααααΆααα "α’αααΈααΆ S2I αα·αααααααααΎααΆ" (α’αααα’αΆα
α’αΆαααααααα’αααΈααΏααααα
ααααΆααααΆαααααΆααα½αααααα»αααααΆα
ααααΆααααΆαααα‘αΎαααΊααααααααααΆαα ααΉαα’αααΈαααααΎαα‘αΎααα αααα’αααααααΎαααΆα docker build αα·ααααα αααααααΌαααΆα Docker ααααΈα ααΌα ααααα αΎα ααααΆααααΆααααααΎαα‘αΎααα αααα αΆααααααΎααααααΎααα ααΎαααα·ααΆ OpenShift α
αααα»αααααΈααΌαααΆα Web App Builder ααΆααα½ααα»αααααΌααααα»αααΆαααα‘αΎαααΆαα’αΆααααααααααααα·ααΈααααα’ααα αα·αααααΎαααΆα buildα
ααΌα αααααΎαααΆααα·ααΆααα»αααα ααΈααΆαααααααααα·ααΈαααααΆααααα αα αα·αααΆαααΆαααααα½α α αΎα α’αΆαααααααΎα§αααααα’αααΈαααα’αααααααΎα α§ααΆα ααα αααα»αααααΈ React ααΆααΉαααΆ ./build folder α αΎααααααΆαααααααα·ααΈ Angular ααΆααΉαααααΆαααΆαα project_name/dist α α αΎαααΌα αααααΆααααα αΆααα½α ααα αΎααα αααα»αααΆααααααΆααα»α ααΈααΆαααααααααααα αααααααΌαααΆααααααααΎααααΈαααααΎαααΆαααααΆαααΎα α’αΆα ααααΌαααΆαααα·αααααΆααααα’αααααα·ααααΆα OUTPUT_DIR α ααΆααΆααααααΎαααΆαα α αΆααααΆααααΈααΈααΆαααααααααααααα»αααααΆααΈααααααααααα½ααα ααααααααα α’αααααααΆααααα αααααααααααααααΆααααααΎααα ααα―αααΆααααααααΆααααα»αααΌαααΆα αααααΊ /opt/apt-root/output α αααααΆαααΆααααααΆαααααααΆααααΆααααααΉαααΈα’αααααααα ααα»αααααααααΆαααααααα α αΌαααΎααααα‘ααααΎαααααΆααααΆααααααΆαααααΆααα αα - ααααΆααααΆααααα
ααααΆααααΆαααααΎαααΆα
ααααΆααααΆααααααΎαα‘αΎααα
ααααααααΆαα α
αα
ααΆαα docker run ααααΌαααΆαααααΎα‘αΎααα
ααΎααΌαααΆαααααΈαααααΆααααααΎαααα‘α»αααααα½αααααα»αααααΆα ααΌα
ααααΆααααααααΎαα‘αΎααα
αααααΆαααααααΆααα
ααΎαααα·ααΆ OpenShift α ααααΆαααΎα
αα·ααΈααΆααααααααααΊααα’αααααΆααααΆαααΆαααααααΆααααααα·ααΈαααΆαααΆαααα αα ααα»ααααααΆααΌαα ααΆαα·αααααΌαααΆαααααααΆαα±αααααααΎααΆαα·ααΆαα·αα·ααααααΆααα·ααΈαααααα ααΆααΆααααααΎαααΆαα αααααΆαααΆααα·αααΎααααααΎααααΆαα·ααΆαα·αα·αααα ααΎααα·αααααΌαααΆα Node.js αααααΆαααα‘αΎααα ααΆααααα»αααΌαααΆαααααααΎααα - αααΆαααΈαααααα αααααααΉααααααααααΆααα
αααααΆαβααα αααβααα‘αΎαβααΎαβααααΌαβααΆαβααααβαα½α αααβααααα·ααααα· ααΎαβααααΌαβααΆαβααααβαα½αβαααα αααα»αβααααΆαααΆαβααα ααΆαβααΆαβαααβαααβααΆααβααΆβα ααααΆααβααβααΆβααααααααα
αααααααΆααα αααααΆαα
αααααΊααΆα’αααΈααααα½ααααααααα’αααΈ
"ααΆααα½αααααα»αααααΆααΈαα’αΆα ααααΌαααΆαααααΆααααΆαα½αααααΆααααα½ααααααΎαα’αααααΆαα ααααα αα·ααα½αααααααα ααα’αααααΆαααααα αααα»αααΌαααΆαααΆα ααααα‘αααααααααΌαααΆαααααΎααΎααααΈααααΎαααΆαα’αααααΆααααα"
αααααΆααα·αααα ααΎαα’αΆα ααααΎααΌαααΆα Web App Builder ααΎααααΈααααΎαααΆαααΆααααααΎαααααααΎα α αΎααααααΆααααααααΎααΌαααΆααααΆαααΈαααααα ααααα NGINX ααΌα ααααΆ ααΎααααΈαααααΎααΆαα·ααΆααααααΎαα
ααΌα αααα ααΎαα’αΆα ααααΎααΌαααΆα Web App Builder ααΆα’ααααααααΎα "αα»ααα" α αΎααααα»αααααααα½αααΆαααΌαααΆααααααααΎαααΆαααΌα αα½αα
α₯α‘αΌααααααΌααααα‘ααααΎαααΏααααααΆαα½αααΉαα§ααΆα αααααΆααααΆαααα½αα
αααααΆααααΆαααααα»ααααααΆαααΎαααΉαααααΎ
ααΆααΉααα½αααΎαααΆααα’αααΈααααααααΆααα½αααααΆ
ααΌααααα‘ααααΎαα―αααΆααααα±ααααΆαααα’α·α α αΎαα αΆααααααΎαααΆαα½αααααααααΆαααΆααααααα
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
ααΌα αααα’αααα’αΆα ααΎααααααΆαααααααΆαααααΆαααα 1 αα·ααΆαααΆααααααααααΆααααααΎααααααΉαααααΌαααΆαααΆαααα αααα»αααΌαααΆα react-web-app-builder ααΌα ααααΆαααααΎαααΆαααΎααα»ααααααααα·α αα αααα»αααααα ImageStreams α
αααααΆαααααααΆαααααΆαααα 2 ααααΆααα’αααααΈαααααααααααααΌααααααααΌαααΈα αααα»αααααΈααααααΎα αααααΊααΆααααΆαα git α αΎαααΈααΆαα ref αα·αααααα·ααααααΌαααΆααααααααααααΆαααΆαααααααααααΎαααΆαααΎαααΆαααΎαα½α α αΎαα
αααααΆαααααααΆαααααΆαααα 3 ααΊααΆα’αααΈαααααΎαααΆαααΎααα½α
α αΎααα
αααα»αααααααααΆαααΆααααααα ααΆααααααα’αααααα·ααααΆα OUTPUT_DIR ααααααα»αα§ααΆα αααααααααΎαααααΌαααΆαααΆααααα
αααααΆαααααααΆαααααΆαααα 4 αα·ααΆαααΆααααΎααΌαααΆα web-app-builder-runtime αααααΎαααΆαααΎααα½α
α αΎααα
αααα»αααααα ImageStream α
αααααΆαααααααΆαααααΆαααα 5 αα·ααΆαααΆααΎαα ααααααΎααΆααααααΎαααααααααααα·αααΎααΌαααΆα S2I ααΆααααααΆ α αΎαααΌαααΆα Web App Builder ααααΎα αα αααα αΆααααααΎαααααΌα αααααΆααααΈααααΆααααΆαααα‘αΎαααααΌαααΆααααα αα ααΌαααΆαααΉααααααΆαα»ααα node_modules αα αααα»αα―αααΆαααααααΆαα αααααΆαααα αα αααααααΎαααΆαααΆαααααααααΆαα ααΌαααΆαααΉαααααΆαααααααααΆααα―αααΆαααα ααΎααααΈααΆααααααααααααααΆααΆααααα
α αΎαααΆα α»αααααα αααααΆαααααααΆαααααΆαααα 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 - ααααααααααΉαααΆαααααααα ααΆααααααααααααΌααααα ααΆααααααααααααααααΎαααΉαααααΎ nginx-image-runtime αααααΎαααΆαααΎααα½α α αΎααα αααα»αααααα ImageStream α
ααΆα α»αααααα αααααΆαααααααΆαααααΆαααα 7 ααΊααΆααααααααααααΉααααααΉαααααΎα±ααααΆαααααΆαααΆααααααααααΆααααααααααΌαααΆα react-web-app-builder ααααΆααααααΌαα
ααΎαα·αααΌα αααααα ααααΌαααααΆαααΆαααααααα ααΆααααααααααΆαααΆααα±ααααααΎααααΆαααααααααΆαααα’αΆα ααααΌα ααΆαααααααααΆααααααΉαααααΆαααα αα·αααααΌα ααα»ααααααΎαααΉααα·αα αΌααα αααα»αααααααΆααααα’α·αα αααΎαααααααααα ααΌαα αααΆαααΆααΌαααΆααααααΉαααααΌαααΆαααΆααα±ααααααΎααααΆααααΊααΆααΌαααΆα react-web-app-runtimeα
ααΆαααΆααα±ααααααΎααααΆαααααααα·ααΈ
ααΌα ααααβα αΎαβααΆαβααΆβααΎαβααΆαβααΎαβααααΌβαααβα αΎα ααΌαβααΎαβααααβααααΎβααΆβααΎααααΈβααΆααβα±ααβααααΎβαααααα·ααΈα
ααΎαα’αΆα ααααΎα§αααααα’αα·αα·αα OpenShift α α ααΆ oc ααΎααααΈααΆαααααααΆαααααΌααααααΎαα
$ 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α
ααΆααααααααΆααΈααΈαααααΆαααααααααΎααααααα·ααΈααααΈαααααα’ααααΎααααΌαααα
αααααΆααααΈααΆααααααααΆααΆαααααααααΎαααΆα ααΎαααΉαααΎαααΆααΎαααΆααααΆααΈαα
α αΎααααααααα α’αααααααα·αααααΆαααΌαα ααΎαααΉαααΎααααααααΆαααΎαααααΎαααΆαα
α α»α ααΎαααααααΆααααα ααΎαααΉαααΆααα ααΆαααααααα·ααΈααααααΎα αααααΆααααααααααα·ααΈ React ααααΆαααΎαα
ααααααααααΆα α’α α’α
αααααΆααα’ααααααααΆαα Angular ααΎαααααΆααααααα
ααααΆααα ααΈαααααΊααΌα ααααΆ ααΎααααααα’ααα OUTPUT_DIR α
ααααααααααΆα α’α α’α
αα
αααα»αα’αααααααα ααΎαααΆαααααΎ NGINX ααΆ web server ααα»ααααααΆααΆααααα½αααΆαααααα»αααΆααααα½αααΆααα Apache αααααααΆααααααααΌα template αααα»αα―αααΆα
ααα ααααΈααααα·ααααΆα
αα αααα»ααααααααααΌααααααααΈααα ααΎαααΆααααα αΆαααΈααααααΆααα±ααααααΎααααΆαααααααα·ααΈαααααΆαααααΎααααΆαααΆαααα αααα ααΎαααα·ααΆ OpenShift α αααααααααΎαααΆααα·αα·αααααΎαα’αααΈαααααΌαααΆααααααα·ααΈααα αααααααααΎ αα·ααααααααααΆα’αΆα ααααΌαααΆαααααααΆαα½ααααΆαααΈαααααα ααααααα»αααααΌα ααΆ NGINX αααααααΎααΆαααααΆαααΆααΆα αααααΆαα ααΎααααΈαααααΎααααααα·ααΈαααααααααα½α ααΆααααα αααα»αααΆαααα·αααΆααααα αααΎαα αα αααα»αα’ααααααααααΆαα αα·αα α»αααααααα αααα»ααααααΈααα ααΎαααΉααααα αΆαααΈααααααααΎαααΆααααΆαααΈαααα’αα·αααααααααααΆαααααααα·ααΈααααα’ααααα ααΎ OpenShift αα·αααΆααΆα±ααααΆαααΆαααααΎααααΆαααααααα―αααΆααααα»ααααα»α αα·αααΈα ααααΆαα
ααααΉαααΆααααααααΈααα’ααααααααα
- αααααααΈ 1α
ααααααΆαααααααΆααααααα·ααΈαααααΆαααααΎααααααααΆααααααΈαααΈααα αΆαααα»αααααα ; - αααααααΈ 2α ααααααααΎααΌαααΆα S2I ααααΈααΆαα½αααΌαααΆααααΆαααΈααα HTTP αααααΆαααααΆαα ααΌα ααΆ NGINX αααααααΎααΆαααααΆαα OpenShift αααααΆααααααααααααΆααααΆαααΆαααααααΆαααα·αααααα
- αααααααΈ 3α ααααααααΎαααΆααααΆαααΈαααα’αα·αααααααααααΆαααααααα·ααΈααααα’ααααα ααΎαααα·ααΆ OpenShift α αΎαααααΎααααΆαααααααΆααΆαα½αααααααααα―αααΆαααΌαααααΆαα
ααααΆααααααα
- ααααα
α’αα‘α·α
ααααΌαα·α
α₯ααα·ααααα
ααΆαααΆαααααααΆααα OpenShift . - ααααααΆααα
ααΎ
OpenShift αα·α Kubernetes .
ααααα: www.habr.com