wpfのCDをやってみた話

1K Views

April 13, 24

スライド概要

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

WPFを Azure PipelineとBlobで CDしたい Yu Mitsuba

2.

先月まで JTC な客先で 社内ツールを WPF で作ってて、 簡単に社内配布しつつ、 アップデートも自動化したい。

3.

Web なら Azure Pipeline で WebApps にテンプレのまま CI/CD 繋げればいいだけ…. 同じようにできないんかな?

4.

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.

例えばこんなオペレーション 5 / 25

6.

環境と要件 • ソース管理はAzure Repos。 • CIはAzure Pipeline。 • 最新版の公開アップロードは自動化しつつ、 • WPF 起動時にアップデートをチェックして、最新版があった らインストールしたい。 6/ 25

7.

自動更新:ClickOnce • ClickOnce でインストーラーを作れば OK • 指定したパスに対して、最新版があるかどうかチェックして くれる。 • そのパスに今回は Blob URL を指定する。 • Visual Studio の「発行」からポチポチすればインストーラー 作れる! • msixとかビジネス向けMicrosoft Storeに目を背けながら…. 7 / 25

8.

8 / 25

9.

9 / 25

10.

10 / 25

11.

11 / 25

12.

環境と要件 • ソース管理はAzure Repos。 • CIはAzure Pipeline。 • 最新版の公開アップロードは自動化しつつ、 • WPF 起動時にアップデートをチェックして、最新版があった らインストールしたい。 -> OK! ホスティング先はBlobに設定 12 / 25

13.

ClickOnceをCI/CDしたい • 普通にビルドするとタダのリリースビルドになってしまう。 • 「ClickOncePro le.pubxml」の「発行」をビルドとして Pipeline でキック! • さっきのビルド結果をBlobにプッシュしたい。 fi 13 / 25

14.

14 / 14 25

15.

15 / 25

16.

16 / 25

17.

17 / 17 25

18.

- 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

19.

ArtifactをBlobにプッシュ - task: AzureFileCopy@6 inputs: SourcePath: '$(Build.ArtifactStagingDirectory)/*' azureSubscription: 'PoC' Destination: 'AzureBlob' storage: 'mitsubapoc' ContainerName: 'apps' 19 / 25

20.

サービスプリンシパルの設定 • ストレージアカウントのIAMに 「ストレージBLOBデータ共同作成者」ロールを サービスプリンシパルに追加(Pipelineからの権限付与) 20 / 20 25

21.

全体図 21 / 21 25

22.

ClickOnceをCI/CDしたい • 普通にビルドするとタダのリリースビルドになってしまう。 • 「ClickOncePro le.pubxml」の「発行」をビルドとして Pipeline でキック! • さっきのビルド結果をBlobにプッシュしたい。 -> OK!このPipelineでイケるはず! fi 22 / 25

23.

みてみる。 いいかんじに動いてたらパチパチください。 23 / 25

24.

まとめと、やったこと。 • ClickOnceをPipelineからmsbuildで発行した。 • ビルド結果はBlobにプッシュ。 -> Azure Pipelineで実装。 • 公開にはBlob URLを公開。 • Blobで 「特定のIPからのみアクセス許可」 すれば、 ファイアウォールで外部からはアクセス不可(安心 • サービスプリンシパルの設定だけは忘れずに。 -> Azure Blobで実装 24 / 25

25.

• 便利にセキュアにホストしたいし、アプリの手動アップデー トなんてめんどい。 • ユーザーごとに実行バージョン違うなんてトラブルは 回避したい! • 開発プロセスの整備からアプリ公開、ユーザー体験まで 実装できるCI/CD, DevOpsは正義! • その辺りの詳しいセッションは、 この後の @kkamegawa にパスします! 25 / 25