如何在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:23


Version-Release number of selected component (if applicable):
rhc-1.34.2

How reproducible:
Always

Steps to Reproduce:
1. Install ruby and rubygems on a RHEL-6.6 system
2. Install rhc using `gem install rhc`
3. Run any rhc command

Additional info:

# uname -r
2.6.32-504.8.1.el6.x86_64

# rpm -qa | grep ruby
ruby-1.8.7.374-3.el6_6.x86_64
rubygems-1.8.24-6.el6op.noarch
ruby-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  diy-0.1
This command creates an application boot using DIY cartridge and clones the repository to bootdirectory.

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

rhc cartridge add  -app 

现在进入你的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

你可能感兴趣的:(openshift)