1K Views
April 13, 24
スライド概要
WPFを Azure PipelineとBlobで CDしたい Yu Mitsuba
先月まで JTC な客先で 社内ツールを WPF で作ってて、 簡単に社内配布しつつ、 アップデートも自動化したい。
Web なら Azure Pipeline で WebApps にテンプレのまま CI/CD 繋げればいいだけ…. 同じようにできないんかな?
pro le • H.N. :蜜葉 優 [@mitsuba yu] • フリーランス / silkyfeel Organizer • Microsoft MVP for Developer Technologies • Designer / Developer / Scrum Master / Photographer • 最近、認定スクラムマスター取りました。 • Keynoteの表紙はいつも自分で撮影 fi • http://c-mitsuba.hatenablog.com
例えばこんなオペレーション 5 / 25
環境と要件 • ソース管理はAzure Repos。 • CIはAzure Pipeline。 • 最新版の公開アップロードは自動化しつつ、 • WPF 起動時にアップデートをチェックして、最新版があった らインストールしたい。 6/ 25
自動更新:ClickOnce • ClickOnce でインストーラーを作れば OK • 指定したパスに対して、最新版があるかどうかチェックして くれる。 • そのパスに今回は Blob URL を指定する。 • Visual Studio の「発行」からポチポチすればインストーラー 作れる! • msixとかビジネス向けMicrosoft Storeに目を背けながら…. 7 / 25
8 / 25
9 / 25
10 / 25
11 / 25
環境と要件 • ソース管理はAzure Repos。 • CIはAzure Pipeline。 • 最新版の公開アップロードは自動化しつつ、 • WPF 起動時にアップデートをチェックして、最新版があった らインストールしたい。 -> OK! ホスティング先はBlobに設定 12 / 25
ClickOnceをCI/CDしたい • 普通にビルドするとタダのリリースビルドになってしまう。 • 「ClickOncePro le.pubxml」の「発行」をビルドとして Pipeline でキック! • さっきのビルド結果をBlobにプッシュしたい。 fi 13 / 25
14 / 14 25
15 / 25
16 / 25
17 / 17 25
- task: VSBuild@1 displayName: 'Publish' inputs: solution: '$(solution)' platform: '$(buildPlatform)' configuration: '$(buildConfiguration)' msbuildArgsを設定 - task: VSBuild@1 displayName: 'Publish' inputs: solution: '$(solution)' platform: '$(buildPlatform)' configuration: '$(buildConfiguration)' msbuildArgs: '-t:publish -p:PublishProfile=ClickOnceProfile.pubxml -p:PublishDir="$(Build.ArtifactStagingDirectory)" -p:ApplicationRevision=$(Build.BuildId)’ 18 / 18 25
ArtifactをBlobにプッシュ - task: AzureFileCopy@6 inputs: SourcePath: '$(Build.ArtifactStagingDirectory)/*' azureSubscription: 'PoC' Destination: 'AzureBlob' storage: 'mitsubapoc' ContainerName: 'apps' 19 / 25
サービスプリンシパルの設定 • ストレージアカウントのIAMに 「ストレージBLOBデータ共同作成者」ロールを サービスプリンシパルに追加(Pipelineからの権限付与) 20 / 20 25
全体図 21 / 21 25
ClickOnceをCI/CDしたい • 普通にビルドするとタダのリリースビルドになってしまう。 • 「ClickOncePro le.pubxml」の「発行」をビルドとして Pipeline でキック! • さっきのビルド結果をBlobにプッシュしたい。 -> OK!このPipelineでイケるはず! fi 22 / 25
みてみる。 いいかんじに動いてたらパチパチください。 23 / 25
まとめと、やったこと。 • ClickOnceをPipelineからmsbuildで発行した。 • ビルド結果はBlobにプッシュ。 -> Azure Pipelineで実装。 • 公開にはBlob URLを公開。 • Blobで 「特定のIPからのみアクセス許可」 すれば、 ファイアウォールで外部からはアクセス不可(安心 • サービスプリンシパルの設定だけは忘れずに。 -> Azure Blobで実装 24 / 25
• 便利にセキュアにホストしたいし、アプリの手動アップデー トなんてめんどい。 • ユーザーごとに実行バージョン違うなんてトラブルは 回避したい! • 開発プロセスの整備からアプリ公開、ユーザー体験まで 実装できるCI/CD, DevOpsは正義! • その辺りの詳しいセッションは、 この後の @kkamegawa にパスします! 25 / 25