1. 程式人生 > >如何在openshift上diy部署spring-boot並在本地用eclipse開發

如何在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原作者是,因為我在開始嘗試的時候發現它的配置中的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 <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