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