Bambooで製品パッチを自動で作るようにした話

よりスマートに、スピードのある製品提供を

kicchan
WingArc1st Inc.
Feb 21, 2020

--

はじめまして。ウイングアーク1stのエンジニアをやっている kicchanです。普段はバックエンドのエンジニアをやっています。

あるとき私に「パッチ作成」の仕事が回ってきました。
このパッチ作成は手動で行われていましたので、CI/CDツール「Bamboo」を利用して自動で作るようにしました。今回はこの話をしたいと思います。

photo by kicchan

CI/CDツール導入の敷居が高そうと感じている方にはそのハードルが下がったり、触ったことがない方には雰囲気をつかんだりのきっかけになれば嬉しいです。

自動化前と後

「パッチ作成」の作業の流れを確認したところ、このようになっていました。

photo by kicchan
  • Bambooの利用はありましたが、バックエンドのビルドとUnitテストのみの実施にとどまっていました。
    その際の成果物は利用されていませんでした
  • 製品のパッチ作成は、WindowsとLinuxの2つの環境を使い、手作業でおこなっていました

これをみて、もっと自動化できるのではないか?とおもい、Bambooを使って製品のパッチ作成を自動化しました。
最終的にはこのようになりました。

photo by kicchan
  • プルリクエストのマージをきっかけに、自動でパッチまで作成します。
  • Windows マシンがなくなりました。
  • 手作業がなくなりました。

すっきりしましたね!

私がこの自動化をしたときには、次の2つのルールを設定しました。

  1. すこしずつ変えていく
  2. インとアウトは変えない

これには理由があります。自動化は 開発作業を進めながら取り組んでいたので、いつでも着手できて、いつでもやめなければならなかったことと、インやアウトに変更を加えることで開発者や検証者に負担をかけることがないようにするためです。

Bambooの設定について

さて、これから実際にBambooの設定について順に見ていきます。
大きく3つのパートに分かれています。

フロントエンドのビルド・テスト
フロントエンド のビルドはこのようになっています。チェックアウトして grunt します。よくある手順です。フロントエンドは2系統に分かれていたため、それぞれで行っています。

photo by kicchan

バックエンドのビルド・テスト
バックエンド のビルドはこのようになっています。チェックアウトしてmvnします。フロントエンドのリソースは マルチプロジェクト外となっているので、先にコピーしています。

photo by kicchan

ここまで見ていただくと、開発している時のビルドの手順と同じだと、気付いていただけるのではないでしょうか。
つまりBambooの設定も、開発環境で実行している手順をそのままなぞらえているだけなのです。そう思うと利用するのは簡単におもえてきませんか?

成果物の転送とパッチ作成
最後にビルドでできあがった成果物を、LinuxマシンへSCP(SFTP)で送り込みます。送り込んだあとは、Linuxマシンでパッケージングしています。

photo by kicchan

自動化のメリット

自動化についてのメリットはたくさんありますが、私が考える自動化のメリットは3つあります。

  1. パッチを作る時間をほかのことに充てられる
  2. つねに最新のパッチを利用できる
  3. ビルドのノウハウが口伝ではなく、設定ベースになる

初めの2つもうれしいのですが、私は3番目のメリットが一番大きいと考えています。物量作戦では解決できない、ビルド職人の秘伝のレシピをだれでも理解できるようになるのですから。

うまくいっていないこと

これまでの話だけ見るとうまくいったように見えるのですが、課題もまだまだあります。
インストーラー形式の提供は手作業だったり、一部のリソースの配置も自動になっていなかったり、CI/CDツールが提供している便利な機能を使いこなせていなかったり、などです。

これらの課題は少しずつカイゼンしていき、よりスマートに、スピードのある製品提供をしていきたいです。

最後に

私たちウイングアークのBambooを利用した、製品のパッチ作成について、具体的な設定と、そのメリットを説明させていただきました。
これをきっかけに、CI/CDツールを使ってみたいと思っていただければ嬉しいです。

--

--

kicchan
WingArc1st Inc.

エンジニア。QA、Webのバックエンド、CI/CDのインフラ構築などをやっています。Certified ScrumMaster/ 2nd class Qualified Certified Electrician