55.3 Openshift

Openshift是RedHat公共(和企业)PaaS解决方案。和Heroku相似,它也是通过运行被git提交触发的脚本来工作的,所以你可以使用任何你喜欢的方式编写Spring Boot应用启动脚本,只要Java运行时环境可用(这是在Openshift上可以要求的一个标准特性)。为了实现这样的效果,你可以使用DIY Cartridge,并在.openshift/action_scripts下hooks你的仓库:

基本模式如下:

1.确保Java和构建工具已被远程安装,比如使用一个pre_build hook(默认会安装Java和Maven,不会安装Gradle)。

2.使用一个build hook去构建你的jar(使用Maven或Gradle),比如:

  1. #!/bin/bash
  2. cd $OPENSHIFT_REPO_DIR
  3. mvn package -s .openshift/settings.xml -DskipTests=true

3.添加一个调用java -jar …start hook

  1. #!/bin/bash
  2. cd $OPENSHIFT_REPO_DIR
  3. nohup java -jar target/*.jar --server.port=${OPENSHIFT_DIY_PORT} --server.address=${OPENSHIFT_DIY_IP} &

4.使用一个stop hook

  1. #!/bin/bash
  2. source $OPENSHIFT_CARTRIDGE_SDK_BASH
  3. PID=$(ps -ef | grep java.*\.jar | grep -v grep | awk '{ print $2 }')
  4. if [ -z "$PID" ]
  5. then
  6. client_result "Application is already stopped"
  7. else
  8. kill $PID
  9. fi

5.将内嵌的服务绑定到平台提供的application.properties定义的环境变量,比如:

  1. spring.datasource.url: jdbc:mysql://${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/${OPENSHIFT_APP_NAME}
  2. spring.datasource.username: ${OPENSHIFT_MYSQL_DB_USERNAME}
  3. spring.datasource.password: ${OPENSHIFT_MYSQL_DB_PASSWORD}

在Openshift的网站上有一篇running Gradle in Openshift博客,如果想使用gradle构建运行的应用可以参考它。