Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Azure Pipelines でネイティブミドルウェアの CI しました

More than 1 year has passed since last update.

この記事はMicrosoft Azure Advent Calendar 2018 12/25 の記事です。
https://qiita.com/advent-calendar/2018/azure

はじめに

C++ と C# で構築されたミドルウェアを Azure Pipelines でビルドし、成果物をダウンロードするまでの流れを試してみます。

環境

個人開発しているゲームエンジンをビルドします。

カテゴリ 要素
リポジトリ https://github.com/lriki/Lumino
ビルド環境 Windows, macOS
ターゲット環境 Windows, macOS, iOS, Android, Web(Emscripten)
開発言語 C/C++, C#

以下、ビルドシステムの特徴です。

  • コマンドひとつでビルド、テスト、デプロイ(zipとインストーラの作成)が行える状態になっています。
  • ビルドスクリプトは C# で書かれており、リポジトリルートで "dotnet run" を実行します。
  • ほとんどの依存ライブラリ、ツール類はビルドスクリプト内でダウンロードを行います。
  • cmake など一部のツールはあらかじめインストールの必要があります。

注意点

  • 他の CI サービスは使ったことがないので「なぜ Azure Pipelines?」とかは触れません。
  • Azure PipeLines の設定は ビジュアルデザイナ で行います。YAML はまたこんど。
  • 今回は単にビルドするだけで、Pull Request にフックして自動ビルド実行とかはしないです。これもまたこんど。

Build Pipeline の作成

プロジェクトの作成

最初はまっさらなので、まずプロジェクトを作ります。

image.png

リポジトリの選択

GitHub を選びます。
初回は [Authorize using OAuth] をクリックして、自分の Github アカウントと Azure を連携させる必要があります。
image.png

認証したら、リポジトリと checkout してくるブランチを選択します。
image.png

テンプレートの選択

Pipeline を実行するための設定のひな型を選択します。

今回のターゲットは C++、C# の他にもビルドするものはたくさんあるのですが、まずはビルドの起点となる dotnet コマンドが使いたいので「ASP.NET core」を選んでおきます。(もしかしたら空テンプレートでも dotnet コマンドは入ってるかも)
image.png

選択すると、Build pipeline がひとつできます。
image.png

ビルド実行(テスト)

とりあえずデフォルト状態で実行して様子を見てみます。

[Save & queue] から実行できます。
image.png

ダイアログが出てきますが、そのまま [Save & queue] します。
image.png

画面上部に通知が出てきます。リンクをクリックするとビルドのページに移動します。
image.png

失敗してました。
image.png

ここからビルドできるようにいくつか設定を追加していきます。

Windows ビルド設定

Agent pool の変更

タスクリスト上部の [Pipeline] をクリックし、右の "Agent pool" から [Hosted VS2017] を選択します。
image.png

Test, Publish タスクの削除

今回のターゲットシステムでは、これらのタスクに相当する処理は "dotnet run" コマンドの中でまとめて行われるため、不要なので消しておきます。
タスクを右クリックして [Remove selected task(s)] です。
image.png

dotnet run コマンドの追加

任意のコマンドを実行するために「Command Line」タスクを追加します。
"Agent job 1" の右の + ボタンから追加します。
image.png

[Script] に実行するコマンドを書き込みます。
image.png

Chocolatey Tools の追加

本記事の執筆時点では、cmake や doxygen などのツールをインストールする Task は標準では用意されていないようでした。(この辺りの C++ サポートは少し弱い印象です。Go や Node はありますが・・・)
今回は Chocolatey でインストールしていきます。

Chocolatey は Marketplace から入手する必要がありました。"Add tasks" のビューで検索すると出てきます。
image.png

入手したら、"Chocolatey - Install Package" を追加します。
image.png

[Display name] と [Package] を指定していきます。
全部で 6 個のパッケージをインストールしました。
image.png

ビルド成果物を配布するための設定

成果物は Azure pipelines の環境変数で示されるフォルダにコピーしておく必要があります。
こうしておかないと永続的に保存できません。

"Copy Files" タスクを追加して、成果物ファイルを $(Build.ArtifactStagingDirectory) フォルダにコピーします。
今回はリポジトリルート下の build フォルダ内に生成される .zip と .msi を配布したいので、それぞれの Copy Files タスクを追加しています。
image.png

"Publish Artifact" タスクはデフォルトのままです。
成果物一式に "drop" という名前を付けて、ビルドのページからアクセスできるようにしてあります。
image.png

ここまでで設定は終了です。[Save & queue] からビルドを実行します。

ビルド成果物のダウンロード

ビルドが成功すると、ビルドのページの右上に [Artifacts] というボタンが表示されます。
ここからたどって、目的のファイルをダウンロードします。

image.png

image.png

macOS ビルド設定

ほとんどの設定は Build Pipeline の作成 及び Windows ビルド設定 と同様です。

新しい Build pipeline の追加

Pipeline のリストから、[New] > [New build pipeline] で追加します。
image.png
作成方法は先ほどの Build Pipeline の作成 と同様です。

Agent pool の変更

[Hosted macOS] を選択します。
image.png

Task の変更

Windows ではたくさんツールをインストールしましたが、macOS agent ではすでにインストールされていました。
そのため、念のためバージョンをビルドログに表示するだけにしてあります。
image.png
他のコマンドも Windows と同様です。

ちなみにタスク名が "Command Line" なところがいかにも Windows ぽいですが、macOS や Linux agent では bash で実行されます。

まとめ

C++ と C# で構築されたミドルウェアを Azure Pipelines でビルドし、成果物をダウンロードするまでの一連の流れを紹介しました。

CI サービスを利用するのは今回が初めてでしたが、意外とすんなり設定を終えることができました。

今回は単にビルドするだけでしたので、今後はもう少し CI ツールらしい運用も試してみようと思います。

lriki
ゲームとかゲームエンジンとかを作っています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away