昨天折腾了一天在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