kkamegawa's weblog

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

Visual Studio Team Services CI/CDアドベントカレンダー:PowerShellでビルド実行(8日目)

はじめに

これはPowerShellとVisual Studio Team Servicesの8日目のアドベントカレンダーです。

qiita.com

qiita.com

昔のVSTS/TFSでは.NETのオブジェクトベースのコマンドで管理していましたが、REST APIもだんだん実装されてきました。PowerShellでももちろん使えます。やってみましょう。

ちなみにコマンドもPythonベースのクロスプラットフォームのvsts-cliが提供され始めました。

docs.microsoft.com

ソース

Invoke VSTS Build definition by Build Name.

難しいことはほとんどありません。REST APIはこちらに載っています。現在はAPI version 2.0を使ってください。

www.visualstudio.com

注意点として、PAT(Personal Access Token)をつかってください。

docs.microsoft.com

上記のスクリプトを実行すると、指定したビルド定義名のビルドが実行されます。

f:id:kkamegawa:20171208230522p:plain

VSTSのREST APIでは名前では管理されておらず、IDで管理されています。名前はしばしば変わるから仕方ないですね。

なので、スクリプト中で登録済みのビルド定義の一覧を取得して、IDを逆引きしています。

機密性を上げる

ただ、これはスクリプトの中にPATを直接書いています。ローカルで使うだけのスクリプトであればまだしも、みんなが共通で使うものとしてはいけていません。

そこで、Azure Key VaultにPATを格納して、実行時はそちらを参照するようにしたいとします。

docs.microsoft.com

一応VSTSのvariableのシークレット指定をすれば2048ビットで暗号化されるとのことなので、お手軽にやるならこちらでもいいでしょう。一度シークレット登録すると、もう登録した人にも値は見えません。

f:id:kkamegawa:20171208230527p:plain

こんな感じでちょっと直します。

f:id:kkamegawa:20171208230526p:plain

空のビルド定義からPowerShell実行タスクを登録します。

f:id:kkamegawa:20171208230528p:plain

VariablesのVariable GroupからLink Variable Groupをクリックします。LibraryにあるVariablesのAddをクリック。

Key Vaultを作ったAzureサブスクリプションとKey Vaultの名前を選択します。

f:id:kkamegawa:20171208230523p:plain

使いたいVaultを選択します。

f:id:kkamegawa:20171208230524p:plain

Linkをクリックします。

f:id:kkamegawa:20171208230525p:plain

ビルド定義のVariablesにKeyVaultの値が関連付けられました。ビルドごとにKey Vaultを参照して秘密の値を取得します。

これでめでたしめでたし…ならいいのですが、実はまだちょっと動いていません。あとで直します。たぶん環境変数では参照できないんじゃないかと思っています。

さいごに

PowerShellのREST API久しぶりで色々忘れていました。特にJSON作るところとか、便利なんですが…最近はVS CodeのREST APIクライアント拡張機能があるので、エディタで書くだけでREST発行できて便利なんですよねw。

この辺の自動化でやりたいことがあるのですがそれはまた後日紹介します。

Release昨日のほうは紹介できませんでしたが、たぶんほぼ変わらないはずです。