##きっかけ
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
- Continuous Integration and Delivery Introduction Guide:CI/CDについての基本的な説明
- Continuous Integration and Delivery Best Practices Guide:開発物の種類ごとにCI/CDにするための具体的な手順を説明
Blog