3.2. 从二进制工件构建和部署 Java 应用程序
您可以使用二进制源功能在 OpenShift 上部署现有的 Java 应用。
该流程使用 undertow-servlet quickstart 在本地机器上构建 Java 应用程序。quickstart 使用 S2I 二进制源功能将生成的二进制 Artifacts 复制到 OpenShift 中。
先决条件
- 在本地机器上启用 Red Hat JBoss Enterprise Maven 存储库。
获取 JAR 应用存档,并在本地构建应用程序。
克隆 undertow-servlet 源代码:
$ git clone https://github.com/jboss-openshift/openshift-quickstarts.git构建应用程序:
$ cd openshift-quickstarts/undertow-servlet/$ mvn clean package [INFO] Scanning for projects... ... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Undertow Servlet Example 1.0.0.Final [INFO] ------------------------------------------------------------------------ ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.986 s [INFO] Finished at: 2017-06-27T16:43:07+02:00 [INFO] Final Memory: 19M/281M [INFO] ------------------------------------------------------------------------
在本地文件系统上准备目录结构。
将 deployments/ 子目录中的应用存档(其中主二进制构建目录)复制到标准部署文件夹(其中镜像构建在 OpenShift 中)。包含要部署的应用的 Web 应用数据的目录层次结构。
在本地文件系统和 deployments/ 子目录上为二进制构建创建一个主目录。将构建的 JAR 存档复制到 deployments/ 子目录中:
undertow-servlet]$ ls dependency-reduced-pom.xml pom.xml README src target$ mkdir -p ocp/deployments$ cp target/undertow-servlet.jar ocp/deployments/
流程
运行以下命令并提供您的凭证来登录到 OpenShift 实例:
$ oc login创建一个新项目
$ oc new-project jdk-bin-demo创建新的二进制构建,并指定镜像流和应用程序的名称:
$ oc new-build --binary=true \ --name=jdk-us-app \ --image-stream=java:11 --> Found image c1f5b31 (2 months old) in image stream "openshift/java:11" under tag "latest" for "java:11" Java Applications ----------------- Platform for building and running plain Java applications (fat-jar and flat classpath) --> Creating resources with label build=jdk-us-app ... imagestream "jdk-us-app" created buildconfig "jdk-us-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/jdk-us-app'启动二进制构建。
指示
oc可执行文件使用您在上一步中创建的二进制构建主目录,作为包含 OpenShift 构建的二进制输入的目录:$ oc start-build jdk-us-app --from-dir=./ocp --follow Uploading directory "ocp" as binary input for the build ... build "jdk-us-app-1" started Receiving source from STDIN as archive ... ================================================================== Starting S2I Java Build ..... S2I source build with plain binaries detected Copying binaries from /tmp/src/deployments to /deployments ... ... done Pushing image 172.30.197.203:5000/jdk-bin-demo/jdk-us-app:latest ... Pushed 0/6 layers, 2% complete Pushed 1/6 layers, 24% complete Pushed 2/6 layers, 36% complete Pushed 3/6 layers, 54% complete Pushed 4/6 layers, 71% complete Pushed 5/6 layers, 95% complete Pushed 6/6 layers, 100% complete Push successful根据构建创建新的 OpenShift 应用程序:
$ oc new-app jdk-us-app --> Found image 66f4e0b (About a minute old) in image stream "jdk-bin-demo/jdk-us-app" under tag "latest" for "jdk-us-app" jdk-bin-demo/jdk-us-app-1:c1dbfb7a ---------------------------------- Platform for building and running plain Java applications (fat-jar and flat classpath) Tags: builder, java * This image will be deployed in deployment config "jdk-us-app" * Ports 8080/tcp, 8443/tcp, 8778/tcp will be load balanced by service "jdk-us-app" * Other containers can access this service through the hostname "jdk-us-app" --> Creating resources ... deploymentconfig "jdk-us-app" created service "jdk-us-app" created --> Success Run 'oc status' to view your app.将服务作为路由公开。
$ oc expose svc/jdk-us-app route "jdk-us-app" exposed获取路由:
$ oc get route-
使用 URL (上一命令输出中的
HOST/PORT字段的值)访问浏览器中的应用程序。