緊急退避：見かけたjarファイルをOpenShift にデプロイする

『アプリケーションをOpenShiftで動かす』事について、より理解を深めていかなくてはと課題を感じている今日この頃。
勉強して分かったことを記事にして共有したいなと思い準備していたのですが、想像していた以上に奥が深かったことに気がついきました。

深く踏み込むにも、OpenShiftへのアプリケーションのデプロイって、色々な内部処理がされていて、それがはたしてアプリケーション実行環境やフレームワークの機能なのか、OpenShiftが提供する機能なのか、そのどちらによって、実現されているのかがとらえきれず、今回は、ちゃんとした事はかけないと挫けました（汗）

もともとは、javaのソースコードの状態から、OpenShiftへコンテナをローンチするプロセスをしっかり理解したかったのですが、、、
興味のポイントとしては、java言語で書かれたコードの場合、javaのコンパイルが必要となるので、コンテナをビルドをする前に、javaのコード達はどういう状態になってなくてはならないのか。加えて、コンテナ化するために、どういったファイルや設定を用意しなくてはならないのかというのが気になっていました。

きっと、javaで書かれたコードがコンテナになるまでの流れを理解すると、構築の過程でコンパイルをはさむ他の言語に対しても、コンテナ化するためのステップとして、その全容がとらえられるだろうという期待です。この点を少しずつ深めていきたいなと。

で、結局、今回は『分からないことが分かった！』で終われないので、内容をかなり簡素化しまして、OpenShiftにアプリケーションをデプロイする操作について紹介したいと思います。

## OpenShiftへのコンテナのデプロイ方法

OpenShift は、色々なデプロイ手段が提供されています。
それぞれ、稼働させたいコンテナの元の状態に応じて様々なアプローチがとれます。（それが故に、分かりにくい気がしています。）

OpenShift のWebコンソールから、アプリケーションの追加をたどると、コンテナをデプロイする場合のオプションを確認することができます。（画面は、Version 4.11)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311140/2347d15e-446e-76a0-1ebc-78d668e374ce.png)

OpenShiftが提供するアプリケーションのコンテナ化の詳細は[こちら](https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.11/html/building_applications/_creating-applications#odc-creating-applications-using-developer-perspective)で確認できます。

## 今回は、jarファイルからコンテナをデプロイ
今回は、作業端末（手元のPC）上にあるjarファイルを元としてコンテナをビルドして、デプロイするという操作の流れを紹介します。

### 環境について
作業端末：Fedora OS 36
java環境: OpenJDK 17.0.5
サンプルアプリ：spring-petclinic-2.7.3.jar([github上にあるもの](https://github.com/spring-projects/spring-petclinic)をREADME.mdの内容に従いコンパイルして生成)
OpenShiftバージョン：4.11.8

#### コンパイルの操作は素直にできたので割愛します。

### .jarファイルを指定してコンテナをビルド＆デプロイ

#### プロジェクトの作成
まず、アプリケーションを稼働させるプロジェクトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311140/20e0f003-7765-9ebf-73fc-1a4863f3e357.png)

### "JARファイルのアップロード" オプションを使用したアプリケーションの追加
OpenShiftのDeveloperビュー（パースペクティブ）にて、"+追加"を選択し、アプリケーション作成のオプション一覧を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311140/e868ecf5-0384-dbe6-0dd9-fc78d3d1daa8.png)

画面中央再下段にある、"JARファイルのアップロード”を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311140/0dcee63b-01e0-8d94-63b4-f51f8346dfb4.png)

アプリケーションの構成に必要な情報を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311140/da60105f-962d-aa6e-c325-4ba96b3dc894.png)

#### 今回入力した値
##### JARセクション
| 項目 | 値 |
|:-:|:-:|
| JARファイル |　PC上のjarファイルを選択  |
|  オプションの引数 | null ( defalt )  |
|  ランタイムアイコン | java ( defalt )  |
|  ビルダーイメージのバージョン | openjdk-17-ubi8 ( defalt )  |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311140/3b7acf3b-8fdb-952d-b2f0-3db5f82fb316.png)

##### 一般セクション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311140/6dca8b73-d1f0-0852-bdc4-f1bbe90b9015.png)

| 項目 | 値 |
|:-:|:-:|
|  アプリケーション名 | spring-petclinic-app  |
|  名前 |  spring-petclinic |

##### リソースセクション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311140/030d01e3-7991-5dc6-560c-7b60f6d84ca1.png)

| 項目 | 値 |
|:-:|:-:|
|  生成するリソースのタイプ | デプロイメント（defalt)  |
##### 詳細オプションセクション
| 項目 | 値 |
|:-:|:-:|
|  ターゲットポート | 8080（defalt)  |
|  routeを作成します。 | チェックをオン（defalt)  |
 
その他、「詳細なルーティングオプションを表示する」や、「ヘルスチェック」、「ビルド設定」、「デプロイメント」、「スケーリング」、「リソース制御」の詳細なオプションについては、今回は指定を行わず、デフォルトのまま作成します。


### デプロイ処理が完了するまで待ち

アプリケーションの作成処理が開始されると、画面が切り替わります。この時、裏側ではコンテナのビルドが行われています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311140/05f32eda-03ba-ab9e-c00e-9d405e976d97.png)

デプロイが完了し、実行状態（Status == RUN)となると、次の画面の用な表示に変わります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311140/7f216022-0ee5-ab05-4555-0037837420eb.png)

この操作では、deployに付帯する、様々なリソースも作成されました。（下画面の右側の情報）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311140/d112df4c-8b8c-f5d2-a98d-f45f719336bd.png)

### APLへアクセス
リソースタブのルートのリンク（または、Dukeアイコン右上の□矢印マーク）から、アプリケーションのアクセスページを開くことが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311140/fe8f0208-f046-7cfa-00be-0ea5b7e99770.png)

無事に、アプリケーションの画面が表示されました。

### 感想
当たり前といえば、当たり前のような気持ちしかありませんが、ここで紹介した操作内容のように、.jarファイル（コンパイル済みのjavaプログラム）を無事にデプロイできました。
また、Web-consoleのウィザードを用いた操作で完結したので、Deployに伴って作成される様々なリソースについて特に意識を向けなくても容易に目的のことを達成できました。
これは、取っ掛かりとしてはありがたい限りです。

今回、作成されたリソースとマニフェストファイルを細かく追いかけて、gitopsを目指す場合のマニフェストのセットも抽出したいなと思います。