【CI/CD】UI5プロジェクトのパイプラインを構築するまで　～環境構築編～

##きっかけ
UI5プロジェクトではGitを使ってバージョンを管理しますが、たとえば「デプロイはmasterブランチから」というようなルールがあったときに間違えずに運用できるのだろうか？という疑問がありました。
Gitについて学ぶ中で「特定のブランチにプッシュされたらデプロイする」流れを自動化できそうだということがわかり、CI/CDの具体的な実現方法を調べ始めました。

##Project Piperについて
SAPのCI/CDについて調べていくと、Project Piperというものがあることを知りました。Jenkinsを使ってCI/CDパイプラインを作るのを手助けしてくれるツールの集合体のようです。Project Piperでは以下のものを提供しています。
[Project "Piper" User Documentation](https://sap.github.io/jenkins-library/)より

- Ready-madeなCDパイプラインのセット
- パイプラインのステップで使えるライブラリ
- LinuxとGitHub Actionのためのコマンドラインユーティリティ
- CI/CD環境を構築するためのDockerイメージのセット

「Piperを使ってCI/CD環境を構築してみよう」というのが最初の考えでした。

##その前に・・・
JenkinsもDockerもLinuxも触ったことがなかったので、DockerとJenkinsについて学ぶところからスタートしました。

①DockerとLinux
[[Udemy] Linuxコマンドから始めるDocker　～　BE A FIRST PENGUIN AND GROW AS WHALE](https://www.udemy.com/course/linuxdocker-be-a-first-penguin-and-grow-as-whale/)
Linuxの基礎から解説してくれたので助かりました。VirtualBoxの使い方もわかってよかったです。

②Jenkins
[[Udemy] Learn DevOps: CI/CD with Jenkins using Pipelines and Docker](https://www.udemy.com/course/learn-devops-ci-cd-with-jenkins-using-pipelines-and-docker/)
色々なテクニックを紹介してくれましたが、上級者向けのようで私には難しかったです。
基本的な使い方は[Jenkins User Documentation ](https://www.jenkins.io/doc/)で学びました。

##環境構築
###①Linux環境を用意
Ubuntu: 18.04 （EC2を利用）
最初はWindowsマシン上のVirtualBoxにUbuntuをインストールしていましたが、メモリが足りなかったためEC2に変更しました。

###②Dockerのインストール
以下の手順を参考に、Dockerをインストールします。
https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository

###③Cx Serverのインストール
Cx ServerはJenkinsの起動、停止やライフサイクル管理を行ってくれるツールです。
Piperを利用するにあたりCx Serverをインストールすることが推奨されているので、以下の手順を参考にインストールします。
https://github.com/SAP/devops-docker-cx-server/blob/master/docs/operations/cx-server-operations-guide.md

###④Jenkinsの初期設定
以下のコマンドでJenkinsを起動します。

```
./cx-server start
```

以下を参考に、adminのパスワードを変更します。
https://github.com/SAP/devops-docker-cx-server/blob/master/cx-server-companion/life-cycle-scripts/CX-SERVER-SECURITY.md

##Getting Startedをやってみるが、うまくいかず
以下のページを参考に、Getting Startedプロジェクトをやってみました。
https://sap.github.io/jenkins-library/guidedtour/

prepareステージは正常終了しましたが、buildがいつまでたっても終わりません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/a61d43f9-34de-e4cd-ed60-09b257ec8feb.png)

最終的に、ディスクスペースが足りないというエラーになってしまいました。（ボリュームを30G→60Gに増やしても変わらず）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/0e38c92b-f057-0a72-1915-13d26777b863.png)

調べてみると、buildで作成されたと思われるdata.zipというファイルのサイズが21Gにもなっていました。以下のissueから、モジュールのpathをルート(.)にしていると無限ループになってしまうらしいことがわかりました。
https://github.com/SAP/cloud-mta-build-tool/issues/696

```
_schema-version: 2.1.0
ID: com.sap.piper.node.hello.world
version: 1.0.0
description: A Hello World sample application
provider: SAP Sample generator
modules:
  - name: piper.node.hello.world
    type: nodejs
    path: .
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/3ba42637-e80c-922a-2fa9-96b7c5217f9b.png)

##結論：Cloudアプリはわからない
Getting Startedの例がMTAアプリだったのですが、MTAの開発手法というものを私はそもそもよく知りません。よくわからないものをパイプラインにしても理解できないので、Getting Startedはここで諦めました。

##次回：UI5のパイプラインを構築してみる
もともとやりたかったのがUI5のパイプラインなので、そちらを進めることにしました。Piperにも[FioriアプリケーションをビルドしてABAPシステムにデプロイするシナリオ](https://sap.github.io/jenkins-library/scenarios/upload-to-transportrequest/Readme/)が用意されているのですが、私にはまだ難解に思えました。そこで、自分が理解できるレベルから始めようということで、まずはPiperを使わずにSAPUI5アプリのパイプラインを作ってみることにしました。

これがまた結構大変だったのですが、学びも多かったので次回の記事に書きたいと思います。

##参考
**SAP Help Portal**

- [Continuous Integration and Delivery Introduction Guide](https://help.sap.com/viewer/ee5a61247061455ab232c19179fe4c3b/Cloud/en-US/7fc38a80cda446ef856c01f748dbede8.html)：CI/CDについての基本的な説明
- [Continuous Integration and Delivery Best Practices Guide](https://help.sap.com/viewer/3324745951b44b578bd65221d2ff8f9a/Cloud/en-US)：開発物の種類ごとにCI/CDにするための具体的な手順を説明

**Blog**

- [CI / CD for SAPUI5 on ABAP with GitLab](https://blogs.sap.com/2018/08/01/ci-cd-for-sapui5-on-abap-with-gitlab/)
- [Upgrade your CI/CD to the new UI5 Tooling](https://blogs.sap.com/2019/09/10/upgrade-your-cicd-to-the-new-ui5-tooling/)