ちぐログ

メモ書きです

Azure DevOps Server の REST API エラーでハマった

Azure DevOps Server (オンプレの方) が必要になったので、REST APIの検証していたのですが、
叩く API によって、エラーが返ってくるので悩んでいました。

エラーになる API と 実行結果

例えば、エラーになる REST API はこちらです。 docs.microsoft.com

API の結果がこちら。

{"$id":"1","innerException":null,"message":"searchPlatformConnectionString","typeName":"System.ArgumentException, mscorlib","typeKey":"ArgumentException","errorCode":0,"eventId":0}

こちらの REST API はエラーになりません。 docs.microsoft.com

原因

管理コンソールで検索サービスの構成がされていなかったのが原因でした。 f:id:chiguniiita:20200502052017p:plain

画像は構成済ですがエラーが出る場合は、ここが未構成状態になっています。
エラーになる API は クエリを POST していたので、クエリを使うものがエラーの対象となる可能性が高いです。(未検証)

検索サービスを使わずに運用回避

やりたいことは作業項目を特定の条件で取得することだったので、事前に Boards のクエリで作成しておいて、REST API で叩くことにしました。 docs.microsoft.com

まとめ

大半の人は、Azure DevOps Services(クラウドの方)を使うと思うので、このエラーには遭遇しないと思いますが、誰かの助けになれば・・・

TFVC のラベル名をファイルのバージョンに埋め込んで、Nuget リリースまでする

Git 全盛の時代、TFVC を使っており、かつラベル運用をしているなんて珍しいかもしれませんが、
必要になりそうだったので、作ってみました。

Azure DevOps Service 使ってます。


やったこと

ラベル名を指定して、Build -> Nuget リリース を行う際に以下を実行。

  • 製品バージョンにはラベル名を埋め込む
  • ファイルバージョンは自動インクリメント方式 *1 を自前で設定(同一のビルドジョブはすべて同じとしたい)
  • Nuget バージョン に加工して反映する


例えば、以下のようになります。

内容 設定値
ラベル名 1.0.Lib.20200131
製品バージョン 1.0.0+1.0.Lib.20200131
ファイルバージョン 1.0.7355.22838
Nuget バージョン 1.0.20200131

ラベル名は任意の文字列を設定できます。
製品・Nugetバージョンは決められたバージョン記法があるため、ラベル名と同様にして Patch バージョン部分に文字を入れることができません。
ラベル名もそれらに合わせたらよいのですが、今回はあえてラベル名に文字を入れてます。


Build 設定

詳細な設定手順は省略します。設定後の Yaml ファイルは以下です。
TFVC の場合は Yaml を直接インポートできない?ので、UI からポチポチやっていきます。

TFVCのラベル名をファイルのバージョンに埋め込んで、Nugetリリースまでする

ポイントは、中盤当たりにある PowerShell です。
ソース取得からビルド前までに csproj ファイルを書き換えています。
加工すれば、csproj ファイルで設定できる他の情報も書き換え可能です。

余談ですが、PowerShellC# のコード書けるの便利ですね!


Release 設定

Yaml ファイルは以下です。Nuget に Push しているだけですが載せておきます。

TFVCのラベル名をファイルのバージョンに埋め込んで、Nugetリリースまでする(Release)


あと、Release 側のトリガー設定をするのをよく忘れるので、画面ショットを貼っておきます。

f:id:chiguniiita:20200131222241p:plain


実行

Build 画面よりキューを入れます。 ラベルを指定する場合は、Source version に L + ラベル名で設定します。

f:id:chiguniiita:20200131222806p:plain


実行中の画面にラベル名が表示されます。

f:id:chiguniiita:20200131222920p:plain


Nuget の Push まで成功すると、Artifacts 画面から指定した Nuget バージョンで作成されているのが確認できます。

f:id:chiguniiita:20200131223112p:plain

Nuget 参照する

適当にプロジェクトを作って、Nuget 参照してみます。
右上のパッケージソースを変更するのを忘れないようにします。(事前設定が必要)

f:id:chiguniiita:20200131231615p:plain


落ちてきた DLL のプロパティを見ると、設定されているのが確認できました。

f:id:chiguniiita:20200131231850p:plain f:id:chiguniiita:20200131232253p:plain

*1:よくやるコレ⇒ [assembly: AssemblyFileVersion("1.0.*")]