kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

OSS向けのAzure Pipelinesについて

これはAzure DevOpsアドベントカレンダー二日目の記事です。

qiita.com

別件で調べていたらサクラエディタのissueにAzure Pipelines を調査するというものがあったので、ネタにさせていただきます。実は自分ではOSS向けのAzure Pipelines使ってないので、間違っていたら教えてください。

ライセンス

オープンソースプロジェクトでは10並列、ビルド時間無制限のAzure Pipelinesが使えます。

Azure DevOpsの料金

典型的な例ではGitHubにすでにレポジトリを持っている人たちが使う、ということが考えられます。GitHubのMarketPlaceから追加してください。

始め方

docs.microsoft.com

GitHubの場合はこちらにファーストステップガイドが載っています。現在Azure PipelinesにサインアップするにはMSアカウントが認証用に必要になっています。もしも学生であれば、Microsoft Imagineの担当者にも相談してみてください。

AppVeyorなどでやっていた方はともかく、今までCIをやっていなかった方はGUIでの初期構築がいいと思います。その場合に注意すべき点はいくつかありますので、紹介します。

絶対パスをやめる

特に昔からのソースを保持している人にやっている人がいるんですが、特定のパスじゃないとビルドできないソースはこの手のCIサービスが使えません。Visual Studioを使っている場合、プロジェクトファイル内に絶対パスを書いていたらVisual Studioが用意しているマクロ($(SolutionDir)等)に移行しましょう。

あと、C/C++プロジェクトで多いですが、昔の伝統でincludeやlib環境変数を使って絶対パスに依存している例があります。もしくはプロジェクトファイルに移行していたとしても、絶対パスでincludeファイルを指定している例を結構見ます。

対策としては、Boostのような有名ライブラリであればNuGetに移行することです。そうすればincludeやlibはNuGetパッケージが解決してくれるので、この手の問題から解放されます。マイナーなライブラリの場合、自分で作るしかないですが…。

www.nuget.org

ビルド環境の注意点

環境が初期化される

CIサービスなので、ビルド環境は毎回初期化されます。したがって、docker pullやNuGetパッケージは毎回リストアですので、ローカルでやるよりも時間がかかります。また、Windows環境は2コアCPUのサーバーなので、ローカルでいいマシンを使っている場合、より差が出ます。

LinuxやWindowsではそもそも2コアサーバーですが、macOSのエージェントは実機で動いているようなので、性能が十分に出る可能性があります。.NET CoreやJavaScript、Java等プラットフォームに依存しないビルドだったらmacOSのほうが早いのかもしれません(未確認)。

ビルドマシンの制限

Azure Pipelinesのストレージは10GBなので、ゲームなどで大きなコンテンツをビルドしようとすると、容量が足りなくなるかもしれません。

docs.microsoft.com

管理者権限がないので、管理者として実行しないと動かないようなツールは使えません。

コンパイラー環境

そのほか、新しい環境は入っていますが、古い環境で使用者が少ないとなくなっていきます。例えばXcodeの8.0-8.3.2は2018/11いっぱいで使えなくなります。

Xcode 8.0-8.3.2 deprecation on Azure Pipelines hosted agents – Microsoft DevOps Blog

古いものを外部に維持してもらおう、ということはできず、むしろ積極的に切り替えていく必要があるため、古い環境こそ自分で維持する必要があります。かといって、新しすぎるものはロールアウトの都合上、少し遅れます。Azure DevOpsが3週間ごとにリリースされており、ビルドエージェントもそれに合わせて更新されていくので、新しいコンパイラーなどは少し待ってください。

英語OS

AppVeyorなどのCIを使っている方であればすでに対処しているかもしれませんが、ビルドマシンは日本語OSではありません。したがって、SHIFT-JISで保存しているファイルをビルドするとき、0x5c(表、ソ等)が文字列中に入っていると、コンパイラがエラーを起こします。

kkamegawa.hatenablog.jp

こちらに書いたのでみてください。

ビルド上限

6時間までです。

Azure DevOpsでの格納ポリシー

Pipelinesのみを使う場合であればビルドした結果を一時的にAzure DevOps内部に保持できます。これはCIであるPipelinesのビルドと、CDであるReleaseが分離されているため、一時的な受け渡し場所として使います。時間経過とともに消えますが、直近の一つの成功ビルドは残っています。成功して、問題なければGitHubのReleaseにPublishするなどしてください。