Dotfuscator を DevOps ビルドパイプラインに統合する(Azure Pipelines 編)
Dotfuscator は最新の .NET アプリケーションに対応するように設計されていますが、 最新の開発手法やツールを使ったシステム開発との連携は、ライセンス上の問題があり困難でした。しかし、最近の Dotfuscator の大幅なメジャーアップグレードでフローティングライセンスサポートが追加されたことにより、Azure や AWS などの CI/CD パイプラインに組み込むことが可能になりました。
今回は Azure DevOps の一つである Azure Pipelines ビルドプロセスに Dotfuscator を統合する方法を説明します。
*目次*
- 前提条件
- Dotfuscator の NuGet パッケージをホストする
- Dotfuscator をプロジェクトファイルに統合する
- ビルドの一部として Dotfuscator をインストールする
- ビルド変数を構成する
- 環境変数と MSBuild のプロパティを設定する
- パイプラインを実行して確認する
- まとめ
1. 前提条件
このブログでは、既に Azure Pipelines に統合された .NET プロジェクトが存在することを前提としています。
2. Dotfuscator の NuGet パッケージをホストする
Dotfuscator は Windows インストーラーパッケージ(.msi)か、NuGet パッケージを使用してインストールすることができます。NuGet パッケージは、macOS および Linux 環境で Dotfuscator を実行できます。それに加えて、動的にプロビジョニングされたビルドエージェントでも使用できるため、クラウドサービスで利用する場合は NuGet を利用します。
今回は、NuGet パッケージを Azure Artifacts のプライベートフィードにホストします。
https://docs.microsoft.com/ja-jp/azure/devops/artifacts/overview?view=azure-devops
※NuGet パッケージを公的にアクセス可能な場所にホストしてはいけませんのでご注意ください。
まず、エージーテックの Web サイトのダウンロードページから Dotfuscator NuGet パッケージをダウンロードし、ホストされているフィードに公開します。パッケージを正常にプッシュすると、パッケージのリストに表示されます。
3. Dotfuscator をプロジェクトファイルに統合する
マニュアルの「アプリケーションのプロジェクトファイルへの統合」に従い Dotfuscator をプロジェクトファイルに統合します。
https://www.preemptive.com/dotfuscator/pro/userguide/ja/getting_started_protect.html
サンプルでは、.NET Framework プロジェクトを利用しています。編集したプロジェクトファイルの Dotfuscator を統合している箇所を抜粋します。
<プロジェクト名>.csproj
<!-- Dotfuscatorのビルドプロパティを設定します --> <PropertyGroup> <!-- インポートするDotfuscatorMSBuildターゲットの場所を設定します --> <!-- MSBuildを呼び出すときにオーバーライドできます --> <DotfuscatorMSBuildDir Condition="'$(DotfuscatorMSBuildDir)' == ''">$(MSBuildExtensionsPath)¥PreEmptive¥Dotfuscator¥6</DotfuscatorMSBuildDir> <!-- デフォルトのDotfuscator構成ファイル(DotfuscatorConfig.xml)を生成します --> <!-- ファイルが最初のローカルビルドによって生成された後、これをfalseに設定します --> <DotfuscatorGenerateConfigFileIfMissing>true</DotfuscatorGenerateConfigFileIfMissing> <!-- リリースビルドでDotfuscatorを有効にする --> <DotfuscatorEnabled Condition="'$(Configuration)' == 'Release'">true</DotfuscatorEnabled> </PropertyGroup> <!-- DotfuscatorMSBuildターゲットを最後にインポートします --> <Import Project="$(DotfuscatorMSBuildDir)¥PreEmptive.Dotfuscator.Common.targets" /> |
4. ビルドの一部として Dotfuscator をインストールする
Dotfuscator NuGet パッケージを、'restore' またはビルド手順の前にインストールする必要があります。これは、'custom' の NuGet コマンドで実行できます。
azure-pipelines.yml
task: NuGetCommand@2 inputs: command: 'custom' arguments: 'install PreEmptive.Protection.Dotfuscator.Pro -OutputDirectory $(Agent.TempDirectory) -PreRelease -x -Source https://pkgs.dev.azure.com/[AzDO Org]/ [AzDO Project]/_packaging/[AzDO Feed]/nuget/v3/index.json' |
[AzDO Org] [AzDO Project] [AzDO Feed] に各自フィードの情報を入力します。
5. ビルド変数を構成する
Dotfuscator_License という変数を定義し、その値に Dotfuscator ライセンスキーを設定します。
6. 環境変数と MSBuild のプロパティを設定する
Dotfuscator を Azure ビルドエージェントの一時ディレクトリにインストールしますが、.Net プロジェクトファイルは別の場所で Dotfuscator ターゲットファイルを探しているため、NuGet と MSBuild にどこにあるかを伝える必要があります。
NuGet の restore 中に、NuGet は環境変数 NUGET_RESTORE_MSBUILD_ARGS を使用して追加の引数を定義できます。 次のように env タグを使用するように NuGet の restore 呼び出しを更新します。
azure-pipelines.yml
- task: NuGetCommand@2 inputs: command: 'restore' restoreSolution: '**/*.sln' env: { "NUGET_RESTORE_MSBUILD_ARGS": '/p:DotfuscatorMSBuildDir="$(Agent.TempDirectory)¥PreEmptive.Protection.Dotfuscator.Pro¥tools¥msbuilddir"' } |
MSBuild の呼び出しも同様に更新して、DotfuscatorMSBuildDir を定義し、上記で定義した変数 Dotfuscator_License を使用して Dotfuscator ライセンスキーを渡す必要があります。
azure-pipelines.yml
- task: VSBuild@1 inputs: solution: '$(solution)' msbuildArgs: '/p:DotfuscatorMSBuildDir="$(Agent.TempDirectory)/PreEmptive.Protection.Dotfuscator.Pro/tools/msbuilddir" /p:DotfuscatorLicense="$(Dotfuscator_License)"' platform: '$(buildPlatform)' configuration: '$(buildConfiguration)' |
7. パイプラインを実行して確認する
上記の設定が完了し、パイプラインを実行すると Dotfuscator がアプリケーションを保護していることを確認できます。パイプラインのトリガー(サンプルでは該当の master ブランチがプッシュされたとき)を実行してみます。以下、ビルドログを抜粋しています。
NuGet パッケージをテンポラリフォルダにインストールされています。
Dotfuscator を使ってビルドしています。
Dotfuscator NuGet パッケージを使用する方法の詳細については、Dotfuscator ドキュメントの該当するセクションを必ずお読みください。
https://www.preemptive.com/dotfuscator/pro/userguide/ja/installation_nuget.html
8. まとめ
クラウドの普及も後押しし、これから DevOps はさらに広がると考えています。弊社が提供している難読化ツールは各 DevOps サービスと統合ができますので、検討されている方はお問い合わせフォームよりご連絡ください。
また、評価版のご利用を希望されるお客様は、以下の URL よりお申し込みください。
https://www.agtech.co.jp/preemptive/dotfuscator/trial/