GitHub
VisualStudio
AppVeyor

AppVeyorでWindows向けバイナリを作ってGitHub Releasesに公開

More than 1 year has passed since last update.

中学2年生のときに作ったスクリーンセーバーを公開しましたが、現在は手元にVisual Studioでビルドする環境がありません。CIでビルドしようと思い調べてみたら、AppVeyorという.NET向けのCIを見つけました。この記事はGitHubとAppVeyorを連携させて、GitHub Releasesにビルド済みファイルを添付する方法を紹介します。最終的なReleasesがこちら、ビルド結果がこちらになります。

AppVeyorとは

LinuxやOS X上の開発ではCircle CITravis CIなどLinuxが使われているCIが人気ですが、AppVeyorはWindows上で実行される.NET向けのCIです。もちろん今回のような.NETを使わないプロジェクトもビルドできます。AppVeyorにはビルドやテストだけでなく、デプロイする機能もあります。AppVeyorの用語をいくつか説明します。

Artifact
各ビルドで生成されたファイルにアクセスできる仕組みです。ビルド済みファイルをArtifactに設定すると、各ビルド終了後のバイナリを取得できます。
Deployment
ビルド済みファイルを外部に公開します。AppVeyorでは、Webサーバへの公開だけでなく、GitHub ReleasesやWebhookもDeploymentに含むそうです。
Environment
デプロイ先の設定をAppVeyorではEnvironmentと呼びます。EnvironmentにはGitHub ReleaseやFTPやAmaxon S3やAzureなどが設定できます。プロジェクトのSettingsにあるEnvironmentは、ビルド環境の設定なので別物です。

Artifactの設定

まずビルドで生成されるバイナリをArtifactに追加します。プロジェクトのSettingsからArtifactsを開きます。Path to artifactは、ビルド時に生成されるファイルへの相対パスを、Deployment nameは後で参照するので識別可能な名前を付けます。パス名はバッククオート(\)区切りなので注意を。

artifacts.png

再度ビルドを走らせると、各ビルド結果のArtifactsから、ビルド済みファイルへとアクセス可能となります。

generated_artifacts.png

ここまでの手順でビルド済みファイルが入手できるので、GitHub上でポチポチリリースノートを作れますが、せっかくなのでAppVeyorと連携して自動でReleases noteを作ってみましょう。

Environmentの設定

デプロイ先の情報をEnvironmentに追加します。まずはAppVeyorからGitHub Releasesを作成できるよう、GitHubのAccess Tokenを設定します。GitHubのPersonal Access Tokensを開いてGenerate new tokenをクリックします。Scopeには public_repo のみを設定します。設定が完了したらAccess Tokenが表示されるのでクリップボードにコピーします。

token.png

つぎにAppVeyorの画面上部メニューのEnvironmentsを開いてNew environmentを押します。GitHub authentication tokenにはAccess Token生成時に表示されたものを、Artifact(s) to deployには作成したArtifactの名前を入力します。

environment.png

デプロイ

以上でデプロイの準備が整いました。各プロジェクト画面のDeployments内にNew deploymentがあるので、クリックします。
そして作成したEnvironmentを選択してデプロイするビルドの右側にあるDeployをクリックするとデプロイが開始します。

deploy.png

またEnvironments内や各ビルド結果の上部にあるDeployボタンからもデプロイできます。

おわりに

AppVeyorは初めて触ったので手探り状態で設定しましたが、Build/Test/Deploymentの設定を別々にできるのは便利ですね。この記事ではデプロイするタイミングが手動でしたが、プロジェクトのSettingsのDeploymentを設定すると、自動でGitHub Releasesを作成されます。また今回はWeb画面から設定しましたが、設定ファイルを書きたい人は appveyor.yml を作成すれば良いと思います。