C/C++でもCI/CDしたい!
CI/CD
CI/CD(継続的インテグレーションと継続的デリバリー)とは、ソフトウェア開発の作業単位を小さくし、頻繁に統合・ビルド・テストをして常にリリースできる状態に保つことです。開発の無駄を省き、ユーザーに価値を届けることを大切にする、いまどきの開発のあるべき姿です。
しかしながら、現在のKAGURA開発ではこれが実践できているとは言い難い状態です。自動ビルドの仕組みがないため、リリースのための準備に時間がかかったり、人的ミスが起こるリスクがあったりして、時間とリソースに無駄が生じてしまいます。
KAGURAにCI/CDを取り入れるのは、簡単ではありません。 開発言語がC++であるため、
- 今流行りの言語やフレームワークに比べて情報が少ない
- OS・プラットフォームごとにバイナリの互換性がない
- ビルドに時間がかかる
という問題があります。近年、CI/CDがトレンドになっても、KAGURAには関係ないことだと思っていました。
しかし、この先もKAGURAを進化させていくために、CI/CDを導入したい!
C++でもモダンな開発スタイルを手に入れるんだ!!
と意気込んでいる今日この頃。
まずは自動ビルド
KAGURAのビルドに必要な条件は以下のようなものです。
これを満たす自動ビルド環境をできるだけ簡単に構築する方法を探しています。
Azure DevOpsを使ってみる
Azure DevOpsでプロジェクトを作る
適当に名前をつけて、プロジェクトを作ります。
gitリポジトリの作成
Azure Reposはプライベートなgitを無制限に作れます。
これまた適当な名前でgitリポジトリを作ります。
パイプラインの作成
Azure Pipelinesは、ビルドなどのタスクを自動で実行してくれるものです。今回の話のメインです。
ビルドするコードの場所を指定します。
先ほど作ったAzure Reposを選択します。さすが、GitHubにも対応してます。
testリポジトリを選択します。
パイプラインのテンプレートを選択します。ここでは、minimalなパイプラインである「Starter pipeline」を選択してみます。
azure-pipeline.ymlが表示されました。どうやらこれが、パイプラインの設定ファイルのようです。
# azure-pipeline.yml(一部) steps: - script: echo Hello, world! displayName: 'Run a one-line script'
azure-pipeline.ymlでは、steps
に実行したいタスクを順に記述します。そのうちの一つ、script
は任意のコマンドをコマンドライン(シェル)で実行するタスクです。
「Save and run」ボタンを押して確かめてみましょう。
パイプラインが実行され、ログが表示されます。
確かに、サーバー上でechoコマンドが実行されています。
CMakeを使ってみる
早速、僕の大好きなCMakeが使えるのかどうか試してみます。
# azure-pipeline.yml(追加) - script: cmake --version
とりあえず、コマンドライン上でcmake
コマンド(バージョンを表示)を叩いてみます。
「Save and run」を実行。
おぉー、CMakeのバージョンが表示されました!
いや、ちょっと待て、喜ぶのはまだ早い。
# azure-pipeline.yml(一部) pool: vmImage: 'Ubuntu-16.04'
vmImage
に書いてある通り、これはUbuntuの環境で実行したものです。僕がやりたいのはWindowsおよびMacでビルドをすること。
Windows(Visual Studio)環境を使ってみる
こちらのページに書いてある通り、ビルドを実行する環境を選ぶことができます。
# azure-pipeline.yml(変更) pool: vmImage: 'vs2017-win2016'
'vs2017-win2016'
、つまりWindows Saver 2016にVisual Studio 2017がインストールされた環境を使ってみます。
「Save and run」を実行。
おぉ!バージョンが少し違いますが、CMakeコマンドを実行できました!
macOS(Xcode)環境を使ってみる
# azure-pipeline.yml(変更) pool: vmImage: 'macOS-10.13'
「Save and run」を実行。
おぉぉぉぉぉ!ちゃんとCMakeが入ってる!
まとめ
- Azure Pipelinesはgitリポジトリと連携して自動ビルドできる
- パイプラインの設定は、azure-pipelines.ymlを編集する
- WindowsおよびMac環境でCMakeを使うことができる
僕はCI/CD初心者ですが、Azure Pipelinesはとても分かりやすかったです。ここまで試してみて、つまづくことはほとんどありませんでした。
それに、Microsoftが用意したWindows環境にCMakeがデフォルトで入っていたり、macOSの環境がクラウドで使えたりするのって、凄くないですか?いつの間にそんな時代になっていたんですか???
KAGURAの開発で使えるかどうかはまだ分かりませんが、Azure DevOpsすごい。
次は実際にC++のビルドができるのか試してみたいと思います。
補足
azure-pipelines.ymlの詳しい仕様はこちら YAML schema - Azure Pipelines | Microsoft Docs
今回はとりあえず、コマンドラインでcmakeコマンドを実行したけど、CMake用のタスクがあるみたい。 CMake build and release task - Azure Pipelines | Microsoft Docs