3.4. OpenShift S2I(Source-to-Image) 프로세스 사용
OpenShift 이미지에 대한 JWS를 실행하고 구성하려면 애플리케이션 템플릿 매개 변수 및 환경 변수와 함께 OpenShift S2I 프로세스를 사용합니다.
OpenShift 이미지의 JWS 프로세스는 다음과 같이 작동합니다.
configuration/
source 디렉터리에 Maven settings.xml 파일이 있으면 새 이미지의$HOME/.m2/
로 이동합니다.Maven 및 Maven settings.xml 파일에 대한 자세한 내용은 Apache Maven Project 웹 사이트를 참조하십시오.
소스 리포지토리에 pom.xml 파일이 있는 경우
$MAVEN_ARGS
환경 변수의 콘텐츠를 사용하여 Maven 빌드가 트리거됩니다.기본적으로
패키지
목표는 건너뛰기 테스트(-DskipTests
)와 Red Hat GA 리포지토리(-Dcom.redhat.xpaas.repo.redhatga
) 활성화를 포함하여openshift
프로필과 함께 사용됩니다.Maven 빌드에 성공한 결과는
/opt/webserver/webapps/
로 복사됩니다. 여기에는$ARTIFACT_DIR
환경 변수로 지정된 소스 디렉토리의 모든 WAR 파일이 포함됩니다.$ARTIFACT_DIR
의 기본값은target/
디렉토리입니다.MAVEN_ARGS_APPEND
환경 변수를 사용하여 Maven 인수를 수정합니다.-
deployments/
소스 디렉터리의 모든 WAR 파일이/opt/webserver/webapps/
로 복사됩니다. -
configuration/
source 디렉터리의 모든 파일이/opt/webserver/conf/
로 복사됩니다( Maven settings.xml 파일 제외). lib/
소스 디렉토리의 모든 파일이/opt/webserver/lib/
로 복사됩니다.참고사용자 지정 Tomcat 구성 파일을 사용하려면 파일 이름이 일반 Tomcat 설치와 동일해야 합니다. 예: context.xml 및 server.xml.
사용자 지정 Maven 아티팩트 저장소 미러를 사용하도록 S2I 프로세스를 구성하는 방법은 Artifact Repository Mirrors 섹션을 참조하십시오.
3.4.1. 기존 maven 바이너리를 사용하여 OpenShift 애플리케이션용 JWS 생성
기존 애플리케이션은 oc start-build
명령을 사용하여 OpenShift에 배포됩니다.
사전 요구 사항: OpenShift용 JWS에 배포할 애플리케이션의 기존 .war
,.ear
또는 .jar
입니다.
로컬 파일 시스템의 디렉터리 구조를 준비합니다.
애플리케이션에 필요한 콘텐츠가 바이너리에 포함되어 있지 않은 소스 디렉터리를 생성합니다(필요한 경우 OpenShift S2I(Source-to-Image) 프로세스 사용을참조), 하위 디렉터리
배포/
:$ mkdir -p <build_dir>/deployments
바이너리(
.war
,.ear
,.jar
)를deployments/
에 복사합니다.$ cp /path/to/binary/<filenames_with_extensions> <build_dir>/deployments/
참고소스 디렉터리의
deployments/
하위 디렉터리에 있는 애플리케이션 아카이브는 OpenShift에 빌드되는 이미지의$JWS_HOME/tomcat/webapps/
디렉터리에 복사됩니다. 애플리케이션을 배포하려면 웹 애플리케이션 데이터가 포함된 디렉터리 계층을 올바르게 구조화해야 합니다( 3.4절. “OpenShift S2I(Source-to-Image) 프로세스 사용”참조).OpenShift 인스턴스에 로그인합니다.
$ oc login <url>
필요한 경우 새 프로젝트를 생성합니다.
$ oc new-project <project-name>
oc get를 사용하여 애플리케이션에 사용할 OpenShift 이미지 스트림의 JWS를 확인하는 것은 -n openshift
입니다.$ oc get is -n openshift | grep ^jboss-webserver | cut -f1 -d ' ' jboss-webserver50-tomcat9-openshift
참고-n openshift
는 사용할 프로젝트를 지정합니다.oc
.get
는 openshift 프로젝트에서 이미지 스트림 리소스(임시)를 검색(가져오기)하는 -n
openshift
입니다이미지 스트림 및 애플리케이션 이름을 지정하여 새 빌드 구성을 생성합니다.
$ oc new-build --binary=true \ --image-stream=jboss-webserver<version>-openjdk8-tomcat9-openshift-rhel7:latest \ --name=<my-jws-on-openshift-app>
OpenShift에서 OpenShift 이미지 빌드의 바이너리 입력을 위해 위에서 생성한 소스 디렉터리를 사용하도록 지시합니다.
$ oc start-build <my-jws-on-openshift-app> --from-dir=./<build_dir> --follow
이미지를 기반으로 새 OpenShift 애플리케이션을 생성합니다.
$ oc new-app <my-jws-on-openshift-app>
사용자가 애플리케이션에 액세스할 수 있도록 서비스를 노출합니다.
# to check the name of the service to expose $ oc get svc -o name service/<my-jws-on-openshift-app> # to expose the service $ oc expose svc/my-jws-on-openshift-app route "my-jws-on-openshift-app" exposed
노출된 경로의 주소를 검색합니다.
oc get routes --no-headers -o custom-columns='host:spec.host' my-jws-on-openshift-app
- 브라우저에서 애플리케이션에 액세스하려면 http:// <address_of_exposed_route > / < my-war-ear-jar-filename- without-extension>
3.4.2. 예: 기존 maven 바이너리를 사용하여 OpenShift 애플리케이션용 JWS 생성
아래 예제에서는 3.4.1절. “기존 maven 바이너리를 사용하여 OpenShift 애플리케이션용 JWS 생성” 의 절차를 사용하여 tomcat-websocket-chat 빠른 시작을 사용합니다.
3.4.2.1. 사전 요구 사항
WAR 애플리케이션 아카이브를 가져오거나 애플리케이션을 로컬로 빌드합니다.
소스 코드를 복제합니다.
$ git clone https://github.com/jboss-openshift/openshift-quickstarts.git
애플리케이션을 빌드합니다.
$ cd openshift-quickstarts/tomcat-websocket-chat/
$ mvn clean package [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Tomcat websocket example 1.2.0.Final [INFO] ------------------------------------------------------------------------ ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 01:28 min [INFO] Finished at: 2018-01-16T15:59:16+10:00 [INFO] Final Memory: 19M/271M [INFO] ------------------------------------------------------------------------
로컬 파일 시스템의 디렉터리 구조를 준비합니다.
로컬 파일 시스템 및
deployments/
하위 디렉터리에서 바이너리 빌드의 소스 디렉터리를 생성합니다. WAR 아카이브를deployments/
에 복사합니다.[tomcat-websocket-chat]$ ls pom.xml README.md src/ target/
$ mkdir -p ocp/deployments
$ cp target/websocket-chat.war ocp/deployments/
3.4.2.2. OpenShift에서 예제 애플리케이션 설정
OpenShift 인스턴스에 로그인합니다.
$ oc login <url>
필요한 경우 새 프로젝트를 생성합니다.
$ oc new-project jws-bin-demo
oc get를 사용하여 애플리케이션에 사용할 OpenShift 이미지 스트림의 JWS를 확인하는 것은 -n openshift
입니다.$ oc get is -n openshift | grep ^jboss-webserver | cut -f1 -d ' ' jboss-webserver50-tomcat9-openshift
이미지 스트림 및 애플리케이션 이름을 지정하여 새 빌드 구성을 생성합니다.
$ oc new-build --binary=true \ --image-stream=jboss-webserver<version>-openjdk8-tomcat9-openshift-rhel7:latest\ --name=jws-wsch-app --> Found image 8c3b85b (4 weeks old) in image stream "openshift/jboss-webserver<version>-tomcat9-openshift" under tag "latest" for "jboss-webserver<version>" JBoss Web Server 5.0 -------------------- Platform for building and running web applications on JBoss Web Server 5.0 - Tomcat v9 Tags: builder, java, tomcat9 * A source build using binary input will be created * The resulting image will be pushed to image stream "jws-wsch-app:latest" * A binary build was created, use 'start-build --from-dir' to trigger a new build --> Creating resources with label build=jws-wsch-app ... imagestream "jws-wsch-app" created buildconfig "jws-wsch-app" created --> Success
바이너리 빌드를 시작합니다. OpenShift에서 OpenShift 이미지 빌드의 바이너리 입력에 소스 디렉터리를 사용하도록 지시합니다.
$ *oc start-build jws-wsch-app --from-dir=./ocp --follow* Uploading directory "ocp" as binary input for the build ... build "jws-wsch-app-1" started Receiving source from STDIN as archive ... Copying all deployments war artifacts from /home/jboss/source/deployments directory into `/opt/jws-5.4/tomcat/webapps` for later deployment... '/home/jboss/source/deployments/websocket-chat.war' -> '/opt/jws-5.4/tomcat/webapps/websocket-chat.war' Pushing image 172.30.202.111:5000/jws-bin-demo/jws-wsch-app:latest ... Pushed 0/7 layers, 7% complete Pushed 1/7 layers, 14% complete Pushed 2/7 layers, 29% complete Pushed 3/7 layers, 49% complete Pushed 4/7 layers, 62% complete Pushed 5/7 layers, 92% complete Pushed 6/7 layers, 100% complete Pushed 7/7 layers, 100% complete Push successful
이미지를 기반으로 새 OpenShift 애플리케이션을 생성합니다.
$ oc new-app jws-wsch-app --> Found image e5f3a6b (About a minute old) in image stream "jws-bin-demo/jws-wsch-app" under tag "latest" for "jws-wsch-app" JBoss Web Server 5.0 -------------------- Platform for building and running web applications on JBoss Web Server 5.0 - Tomcat v9 Tags: builder, java, tomcat9 * This image will be deployed in deployment config "jws-wsch-app" * Ports 8080/tcp, 8443/tcp, 8778/tcp will be load balanced by service "jws-wsch-app" * Other containers can access this service through the hostname "jws-wsch-app" --> Creating resources ... deploymentconfig "jws-wsch-app" created service "jws-wsch-app" created --> Success Application is not exposed. You can expose services to the outside world by executing one or more of the commands below: 'oc expose svc/jws-wsch-app' Run 'oc status' to view your app.
사용자가 애플리케이션에 액세스할 수 있도록 서비스를 노출합니다.
# to check the name of the service to expose $ oc get svc -o name service/jws-wsch-app # to expose the service $ oc expose svc/jws-wsch-app route "jws-wsch-app" exposed
노출된 경로의 주소를 검색합니다.
oc get routes --no-headers -o custom-columns='host:spec.host' jws-wsch-app
- 브라우저에서 애플리케이션에 액세스합니다. http:// <address_of_exposed_route>/websocket-chat
3.4.3. 소스 코드에서 OpenShift 애플리케이션용 JWS 생성
소스 코드에서 새 OpenShift 애플리케이션을 생성하는 방법에 대한 자세한 내용은 OpenShift.com - 소스 코드에서 애플리케이션 생성을 참조하십시오.
진행하기 전에 애플리케이션의 데이터가 올바르게 구성되어 있는지 확인합니다( 3.4절. “OpenShift S2I(Source-to-Image) 프로세스 사용”참조).
OpenShift 인스턴스에 로그인합니다.
$ oc login <url>
필요한 경우 새 프로젝트를 생성합니다.
$ oc new-project <project-name>
oc get를 사용하여 애플리케이션에 사용할 OpenShift 이미지 스트림의 JWS를 확인하는 것은 -n openshift
입니다.$ oc get is -n openshift | grep ^jboss-webserver | cut -f1 -d ' ' jboss-webserver50-tomcat9-openshift
Red Hat JBoss Web Server for OpenShift 이미지를 사용하여 소스 코드에서 새 OpenShift 애플리케이션을 생성하고
--image-stream
옵션을 사용합니다.$ oc new-app \ <source_code_location>\ --image-stream=jboss-webserver<version>-openjdk8-tomcat9-openshift-rhel7\ --name=<openshift_application_name>
예를 들면 다음과 같습니다.
$ oc new-app \ https://github.com/jboss-openshift/openshift-quickstarts.git#master \ --image-stream=jboss-webserver<version>-openjdk8-tomcat9-openshift-rhel7\ --context-dir='tomcat-websocket-chat' \ --name=jws-wsch-app
소스 코드가 이미지에 추가되고 소스 코드가 컴파일됩니다. 빌드 구성 및 서비스도 생성됩니다.
애플리케이션을 공개하려면 다음을 수행합니다.
# to check the name of the service to expose $ oc get svc -o name service/<openshift_application_name> # to expose the service $ oc expose svc/<openshift_application_name> route "<openshift_application_name>" exposed
노출된 경로의 주소를 검색하려면 다음을 수행합니다.
oc get routes --no-headers -o custom-columns='host:spec.host' <openshift_application_name>
- 브라우저에서 애플리케이션에 액세스하려면 http:// <address_of_exposed_route> / <java_application_name>