【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より

  • 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
Linuxの基礎から解説してくれたので助かりました。VirtualBoxの使い方もわかってよかったです。

②Jenkins
[Udemy] Learn DevOps: CI/CD with Jenkins using Pipelines and Docker
色々なテクニックを紹介してくれましたが、上級者向けのようで私には難しかったです。
基本的な使い方はJenkins User Documentation で学びました。

環境構築

①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がいつまでたっても終わりません。

最終的に、ディスクスペースが足りないというエラーになってしまいました。(ボリュームを30G→60Gに増やしても変わらず)

調べてみると、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: .

結論:Cloudアプリはわからない

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

次回:UI5のパイプラインを構築してみる

もともとやりたかったのがUI5のパイプラインなので、そちらを進めることにしました。PiperにもFioriアプリケーションをビルドしてABAPシステムにデプロイするシナリオが用意されているのですが、私にはまだ難解に思えました。そこで、自分が理解できるレベルから始めようということで、まずはPiperを使わずにSAPUI5アプリのパイプラインを作ってみることにしました。

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

参考

SAP Help Portal

Blog