はじめに
これはPowerShellとVisual Studio Team Servicesの8日目のアドベントカレンダーです。
昔のVSTS/TFSでは.NETのオブジェクトベースのコマンドで管理していましたが、REST APIもだんだん実装されてきました。PowerShellでももちろん使えます。やってみましょう。
ちなみにコマンドもPythonベースのクロスプラットフォームのvsts-cliが提供され始めました。
ソース
Invoke VSTS Build definition by Build Name.
難しいことはほとんどありません。REST APIはこちらに載っています。現在はAPI version 2.0を使ってください。
注意点として、PAT(Personal Access Token)をつかってください。
上記のスクリプトを実行すると、指定したビルド定義名のビルドが実行されます。
VSTSのREST APIでは名前では管理されておらず、IDで管理されています。名前はしばしば変わるから仕方ないですね。
なので、スクリプト中で登録済みのビルド定義の一覧を取得して、IDを逆引きしています。
機密性を上げる
ただ、これはスクリプトの中にPATを直接書いています。ローカルで使うだけのスクリプトであればまだしも、みんなが共通で使うものとしてはいけていません。
そこで、Azure Key VaultにPATを格納して、実行時はそちらを参照するようにしたいとします。
一応VSTSのvariableのシークレット指定をすれば2048ビットで暗号化されるとのことなので、お手軽にやるならこちらでもいいでしょう。一度シークレット登録すると、もう登録した人にも値は見えません。
こんな感じでちょっと直します。
空のビルド定義からPowerShell実行タスクを登録します。
VariablesのVariable GroupからLink Variable Groupをクリックします。LibraryにあるVariablesのAddをクリック。
Key Vaultを作ったAzureサブスクリプションとKey Vaultの名前を選択します。
使いたいVaultを選択します。
Linkをクリックします。
ビルド定義のVariablesにKeyVaultの値が関連付けられました。ビルドごとにKey Vaultを参照して秘密の値を取得します。
これでめでたしめでたし…ならいいのですが、実はまだちょっと動いていません。あとで直します。たぶん環境変数では参照できないんじゃないかと思っています。
さいごに
PowerShellのREST API久しぶりで色々忘れていました。特にJSON作るところとか、便利なんですが…最近はVS CodeのREST APIクライアント拡張機能があるので、エディタで書くだけでREST発行できて便利なんですよねw。
この辺の自動化でやりたいことがあるのですがそれはまた後日紹介します。
Release昨日のほうは紹介できませんでしたが、たぶんほぼ変わらないはずです。