3.2. 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.xmlserver.xml.

사용자 지정 Maven 아티팩트 저장소 미러를 사용하도록 S2I 프로세스를 구성하는 방법은 Artifact Repository Mirrors 섹션을 참조하십시오.

3.2.1. 기존 maven 바이너리를 사용하여 OpenShift 애플리케이션용 JWS 생성

기존 애플리케이션은 oc start-build 명령을 사용하여 OpenShift에 배포됩니다.

사전 요구 사항: OpenShift용 JWS에 배포할 애플리케이션의 기존 .war,.ear 또는 .jar 입니다.

  1. 로컬 파일 시스템의 디렉터리 구조를 준비합니다.

    애플리케이션에 필요한 콘텐츠가 바이너리에 포함되어 있지 않은 소스 디렉터리를 생성합니다(필요한 경우 OpenShift S2I(Source-to-Image) 프로세스 사용을참조), 하위 디렉터리 배포/:

    $ mkdir -p <build_dir>/deployments
  2. 바이너리(.war,.ear,.jar)를 deployments/ 에 복사합니다.

    $ cp /path/to/binary/<filenames_with_extensions> <build_dir>/deployments/
    참고

    소스 디렉터리의 deployments/ 하위 디렉터리에 있는 애플리케이션 아카이브는 OpenShift에 빌드되는 이미지의 $JWS_HOME/webapps/ 디렉터리에 복사됩니다. 애플리케이션을 배포하려면 웹 애플리케이션 데이터가 포함된 디렉터리 계층을 올바르게 구조화해야 합니다( 3.2절. “OpenShift S2I(Source-to-Image) 프로세스 사용”참조).

  3. OpenShift 인스턴스에 로그인합니다.

    $ oc login <url>
  4. 필요한 경우 새 프로젝트를 생성합니다.

    $ oc new-project <project-name>
  5. oc get를 사용하여 애플리케이션에 사용할 OpenShift 이미지 스트림의 JWS를 확인하는 것은 -n openshift 입니다.

    $ oc get is -n openshift | grep ^jboss-webserver | cut -f1 -d ' '
    
    jboss-webserver50-tomcat9-openshift
    참고

    -n openshift 는 사용할 프로젝트를 지정합니다. ocget는 openshift 프로젝트에서 이미지 스트림 리소스(임시)를 검색(가져오기)하는 -n openshift 입니다.

  6. 이미지 스트림 및 애플리케이션 이름을 지정하여 새 빌드 구성을 생성합니다.

    $ oc new-build --binary=true \
     --image-stream=jboss-webserver50-tomcat9-openshift \
     --name=<my-jws-on-openshift-app>
  7. OpenShift에서 이전에 생성한 소스 디렉터리를 사용하여 OpenShift 이미지 빌드의 바이너리 입력을 위해 사용하도록 지시합니다.

    $ oc start-build <my-jws-on-openshift-app> --from-dir=./<build_dir> --follow
  8. 이미지를 기반으로 새 OpenShift 애플리케이션을 생성합니다.

    $ oc new-app <my-jws-on-openshift-app>
  9. 사용자가 애플리케이션에 액세스할 수 있도록 서비스를 노출합니다.

    # 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
  10. 노출된 경로의 주소를 검색합니다.

    oc get routes --no-headers -o custom-columns='host:spec.host' my-jws-on-openshift-app
  11. 브라우저에서 애플리케이션에 액세스하려면 http:// <address_of_exposed_route > / < my-war-ear-jar-filename- without-extension>

3.2.2. 예: 기존 maven 바이너리를 사용하여 OpenShift 애플리케이션용 JWS 생성

아래 예제에서는 3.2.1절. “기존 maven 바이너리를 사용하여 OpenShift 애플리케이션용 JWS 생성” 의 절차를 사용하여 tomcat-websocket-chat 빠른 시작을 사용합니다.

3.2.2.1. 사전 요구 사항

  1. WAR 애플리케이션 아카이브를 가져오거나 애플리케이션을 로컬로 빌드합니다.

    • 소스 코드를 복제합니다.

      $ git clone https://github.com/jboss-openshift/openshift-quickstarts.git
    • Red Hat JBoss Middleware Maven 리포지토리 구성

    • 애플리케이션을 빌드합니다.

      $ 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] ------------------------------------------------------------------------
  1. 로컬 파일 시스템의 디렉터리 구조를 준비합니다.

    로컬 파일 시스템 및 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.2.2.2. OpenShift에서 예제 애플리케이션 설정

  1. OpenShift 인스턴스에 로그인합니다.

    $ oc login <url>
  2. 필요한 경우 새 프로젝트를 생성합니다.

    $ oc new-project jws-bin-demo
  3. oc get를 사용하여 애플리케이션에 사용할 OpenShift 이미지 스트림의 JWS를 확인하는 것은 -n openshift 입니다.

    $ oc get is -n openshift | grep ^jboss-webserver | cut -f1 -d ' '
    
    jboss-webserver50-tomcat9-openshift
  4. 이미지 스트림 및 애플리케이션 이름을 지정하여 새 빌드 구성을 생성합니다.

    $ oc new-build --binary=true \
     --image-stream=jboss-webserver50-tomcat9-openshift \
     --name=jws-wsch-app
    
    --> Found image 8c3b85b (4 weeks old) in image stream "openshift/jboss-webserver50-tomcat9-openshift" under tag "latest" for "jboss-webserver50-tomcat9-openshift"
    
        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
  5. 바이너리 빌드를 시작합니다. 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/webserver/webapps for later deployment...
    '/home/jboss/source/deployments/websocket-chat.war' -> '/opt/webserver/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
  6. 이미지를 기반으로 새 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.
  7. 사용자가 애플리케이션에 액세스할 수 있도록 서비스를 노출합니다.

    # 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
  8. 노출된 경로의 주소를 검색합니다.

    oc get routes --no-headers -o custom-columns='host:spec.host' jws-wsch-app
  9. 브라우저에서 애플리케이션에 액세스합니다. http:// <address_of_exposed_route>/websocket-chat

3.2.3. 소스 코드에서 OpenShift 애플리케이션용 JWS 생성

소스 코드에서 새 OpenShift 애플리케이션을 생성하는 방법에 대한 자세한 내용은 OpenShift.com - 소스 코드에서 애플리케이션 생성을 참조하십시오.

참고

진행하기 전에 애플리케이션의 데이터가 올바르게 구성되어 있는지 확인합니다( 3.2절. “OpenShift S2I(Source-to-Image) 프로세스 사용”참조).

  1. OpenShift 인스턴스에 로그인합니다.

    $ oc login <url>
  2. 필요한 경우 새 프로젝트를 생성합니다.

    $ oc new-project <project-name>
  3. oc get를 사용하여 애플리케이션에 사용할 OpenShift 이미지 스트림의 JWS를 확인하는 것은 -n openshift 입니다.

    $ oc get is -n openshift | grep ^jboss-webserver | cut -f1 -d ' '
    
    jboss-webserver50-tomcat9-openshift
  4. Red Hat JBoss Web Server for OpenShift 이미지를 사용하여 소스 코드에서 새 OpenShift 애플리케이션을 생성하고 --image-stream 옵션을 사용합니다.

    $ oc new-app \
     <source_code_location> \
     --image-stream=jboss-webserver50-tomcat9-openshift \
     --name=<openshift_application_name>

    예를 들면 다음과 같습니다.

    $ oc new-app \
     https://github.com/jboss-openshift/openshift-quickstarts.git#master \
     --image-stream=jboss-webserver50-tomcat9-openshift \
     --context-dir='tomcat-websocket-chat' \
     --name=jws-wsch-app

    소스 코드가 이미지에 추가되고 소스 코드가 컴파일됩니다. 빌드 구성 및 서비스도 생성됩니다.

  5. 애플리케이션을 공개하려면 다음을 수행합니다.

    # 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
  6. 노출된 경로의 주소를 검색하려면 다음을 수행합니다.

    oc get routes --no-headers -o custom-columns='host:spec.host' <openshift_application_name>
  7. 브라우저에서 애플리케이션에 액세스하려면 http:// <address_of_exposed_route> / <java_application_name>