当前位置: 代码迷 >> Eclipse >> 怎么在openshift上diy部署spring-boot并在本地用eclipse开发
  详细解决方案

怎么在openshift上diy部署spring-boot并在本地用eclipse开发

热度:100   发布时间:2016-04-23 00:05:33.0
如何在openshift上diy部署spring-boot并在本地用eclipse开发

昨天折腾了一天在openshift上diy支持spring-boot的环境,于是想终结一下也是给需要的朋友一个参考。


这篇文章中主要适用在openshift上部署了application后,在本地用eclipse继续开发的case,如果已经有一个现成的proj,只是需要部署上去的话,请参考本人的git 上的代码(https://github.com/RxCAI/openshift-diy-spring-boot-sample)这个sample原作者是kolorobot ,因为我在开始尝试的时候发现它的配置中的maven mirror无法下载造成了部署错误,所以修改commit了他的代码。


下面进入正题:

一 如何在openshift上DIY一个支持spring-boot的环境


为什么要DIY?最重要的原因在于,目前openshift上现成的模版maven的版本太低,而spring-boot要求Maven 3.2+ or Gradle 1.12+。 所以要想部署spring-boot project到openshift上去,就一定要DIY。另外,现成的模版JDK还停留在7,所以如果需要8,也需要DIY。说完了why,接下来就是how了 ->


首先当然是安装openshift的rhc The OpenShift Client tools, known as rhc。

具体步骤参考: https://developers.openshift.com/en/managing-client-tools.html

它的环境要求是Ruby 1.8.7 or + 以及 git

本人的系统是mac os x 10.8.5系统自带ruby 1.8.7及 git 1.8.5.2。

确认环境符合要求后,用命令行安装rhc

sudo gem install rhc

如果有问题的话官方建议run

sudo gem update 就是更新一下它的依赖库什么的。

但是,事情从来不是那么顺利,所以童话故事都是骗人的。。。

我遇到了和这位老兄一模一样的问题 https://bugzilla.redhat.com/show_bug.cgi?format=multiple&id=1190896 虽然他是Linux的都是我的问题和他的几乎一模一样。

Description of problem:After installing rhc using `gem install rhc` on a RHEL 6.6 system, the following error is seen when running 'rhc setup':# rhc setup/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require': /usr/lib/ruby/gems/1.8/gems/commander-4.3.0/lib/commander/user_interaction.rb:236: syntax error, unexpected '.', expecting kEND (SyntaxError)        .compact         ^/usr/lib/ruby/gems/1.8/gems/commander-4.3.0/lib/commander/user_interaction.rb:462: odd number list for Hash          title: @title,                ^/usr/lib/ruby/gems/1.8/gems/commander-4.3.0/lib/commander/user_interaction.rb:462: syntax error, unexpected ':', expecting '}'          title: @title,                ^/usr/lib/ruby/gems/1.8/gems/commander-4.3.0/lib/commander/user_interaction.rb:463: syntax error, unexpected ':', expecting '='          percent_complete: percent_complete,                           ^/usr/lib/ruby/gems/1.8/gems/commander-4.3.0/lib/commander/user_interaction.rb:464: syntax error, unexpected ':', expecting '='          progress_bar: progress_bar,                       ^/usr/lib/ruby/gems/1.8/gems/commander-4.3.0/lib/commander/user_interaction.rb:465: syntax error, unexpected ':', expecting '='          step: @step,               ^/usr/lib/ruby/gems/1.8/gems/commander-4.3.0/lib/commander/user_interaction.rb:466: syntax error, unexpected ':', expecting '='          steps_remaining: steps_remaining,                          ^/usr/lib/ruby/gems/1.8/gems/commander-4.3.0/lib/commander/user_interaction.rb:467: syntax error, unexpected ':', expecting '='          total_steps: @total_steps,                      ^/usr/lib/ruby/gems/1.8/gems/commander-4.3.0/lib/commander/user_interaction.rb:468: syntax error, unexpected ':', expecting '='          time_elapsed: '%0.2fs' % time_elapsed,                       ^/usr/lib/ruby/gems/1.8/gems/commander-4.3.0/lib/commander/user_interaction.rb:468: syntax error, unexpected ',', expecting kEND/usr/lib/ruby/gems/1.8/gems/commander-4.3.0/lib/commander/user_interaction.rb:470: syntax error, unexpected '}', expecting kEND        }.merge! @tokens         ^	from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'	from /usr/lib/ruby/gems/1.8/gems/commander-4.3.0/lib/commander.rb:27	from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'	from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'	from /usr/lib/ruby/gems/1.8/gems/rhc-1.34.2/lib/rhc.rb:30	from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'	from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'	from /usr/lib/ruby/gems/1.8/gems/rhc-1.34.2/lib/rhc/cli.rb:1	from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'	from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'	from /usr/lib/ruby/gems/1.8/gems/rhc-1.34.2/bin/rhc:18	from /usr/bin/rhc:23:in `load'	from /usr/bin/rhc:23Version-Release number of selected component (if applicable):rhc-1.34.2How reproducible:AlwaysSteps to Reproduce:1. Install ruby and rubygems on a RHEL-6.6 system2. Install rhc using `gem install rhc`3. Run any rhc commandAdditional info:# uname -r2.6.32-504.8.1.el6.x86_64# rpm -qa | grep rubyruby-1.8.7.374-3.el6_6.x86_64rubygems-1.8.24-6.el6op.noarchruby-libs-1.8.7.374-3.el6_6.x86_64# gem list*** LOCAL GEMS ***archive-tar-minitar (0.5.2)commander (4.3.0)highline (1.6.21)httpclient (2.6.0.1)net-scp (1.2.1)net-ssh (2.9.2)net-ssh-gateway (1.2.0)net-ssh-multi (1.2.0)open4 (1.3.4)rhc (1.34.2)Downgrading the 'commander' gem to 4.2.0 resolves the issue:  # gem install commander -v 4.2.0

这位老兄提交的bug时间是2015 02 09也就是几天前,试图安装的也是最新的rhc,和我试图安装的版本一直。而且从他的description来看,他也是1.8的ruby,猜测他的环境也和我类似。于是就是搜索解决方案的过程了,在stakoverflow上面看到几个有点类似的问题,一一尝试后,比如highline版本,比如net-ssh版本等等,所有我能找到的都告失败。


于是我想,是不是可能因为最新版本rhc和doc之间存在时间差,可能最新的rhc已经不支持ruby 1.8.7了,但是doc还没更新?基于这样的怀疑,我更新了本不愿更新的ruby。所幸结果良好,后面的安装就是行云流水了。我不确定是否是因为最新版本的rhc已经不支持ruby 1.8.7了,但我只能说it works for me, try to update ruby。只是猜测,我也给那哥们留了言,看看会不会有回复。


安装好rhc后,就是配置你的rhc,运行 rhc setup 配置好你的各种东西,比如openssl相关的,这里就是傻瓜式操作了。

配置好rhc后才是真正要进入主题。


二 在你的openshift DIY的环境中创建一个application

rhc app create <app_name> diy-0.1
This command creates an application boot using DIY cartridge and clones the repository to bootdirectory.

然后比如那些加数据库啊这些操作,你可以在web console中后面再加都很方便,不一定需要你马上在rhc中加入,如果有需要 

rhc cartridge add <support_db_version> -app <app_name>

现在进入你的application目录,删除以下文件/文件夹

git rm -rf .openshift README.md diy misc

Commit the changes:

git commit -am "Removed template application source code"

接下来就到了关键的地方了:

首先从我的git仓中(https://github.com/RxCAI/openshift-diy-spring-boot-sample)下载 .openshift/action_hooks文件夹 及 settings.xml文件 到你本地application的git仓中,然后git add这两个文档,再git commit --all,最后

The basic template is ready to be pushed:

git push

注意push可能会耗点时间,不清楚国内的速度,但是本人在欧洲公共的城市wifi,大概需要一分钟左右。至此,你的最基本的DIY环境Maven 3.5 + JDK 8已经配置完毕,你也已经创建了一个简单的application on your Openshift. 下面要做的就是如何集成到你的Eclipse中,让你能在本地继续开发,继而远程push到你的openshift server中。


三 在本地Eclipse集成OpenShift开发环境,continue on your work

集成本地环境的第一步是在你的Eclipse中装好OpenShift插件。在你的Eclipse market中搜索jboss tools,然后只需要安装openshift tools。

安装好插件后,new一个openshift project, 配置好openssl的东西后,选择 Use my existing OpenShift application 选择你之前用rhc create的application

然后后面的配置中还需要注意的是,在你选择本地的git仓的时候,记得选择之前rhc create application时产生的那个仓

至此,你在OpenShift上面DIY的JDK 8 + Maven 3.5的环境完满完成,并且你可以在本地Eclipse中继续开发你的project,通过git来控制版本并push发布到server上。

后续关于本地Eclipse中配置的问题及Spring-boot的开发,欢迎交流,I am new to OpenShift & Spring-boot either :)


最后,如果需要创建用gradle管理的project,请参考 https://github.com/RxCAI/openshift-diy-spring-boot-gradle


顺祝新春愉快,缅怀国内美食...


By RxCAI


14/02/2015

  相关解决方案