kkamegawa's weblog

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

Azure DevOps 2022/1/19の更新

2022年最初のAzure DevOpsリリースノートの翻訳を行いました。オリジナルはこちらからご覧ください。

docs.microsoft.com

年始だからということもあるのか、Microsoft hostedエージェントのlatestがwindows-2019からwindows-2022に変更されます。3月までかけてゆっくり更新していくそうなので、ビルドごとに違うエージェントにあたるのかもしれません。

最大の違いは入っているVisual Studioが2022か2019かということです。大体大丈夫なのですが、.NET Frameworkとか若干入っているものが違います。

  • .NET Framework 4.6.1とか4.5.1とかのEOLになったもの
  • .NET Core 2.1.x
  • Visual Studio 2010ランタイム

私もDeveloper Daysの収録するとき最初windows-2022のイメージ使おうとしてビルドでこけたのであれ?と思って調べたら.NET Framework 4.6.1 TargetingPackがwindows-2022に入っていないことに気付いたという…。なので、今後しばらくは「何もしてないのにビルドが壊れた」ということが起きやすいので、明示的にwindows-2019を指定するようにしましょう。

Pipelineフォルダーのリネームに「その配下に一つ以上権限があるパイプラインが含まれること」という条件が追加されました。たぶんほとんど大丈夫だと思いますが気を付けてください。ではまた三週間後。

Translate to Japanese to Azure DevOps release not…

作れてはいけない人がAzure DevOps organizationを作れてしまう

Azure ADで運用しているAzure DevOps organizationを作ろうとしてちょっとはまってしまいました。前提条件

  1. Azure AD B2Bでテナントにゲスト参加している
  2. そのテナント内にあるAzure Subscriptionの所有者権限を持っている(つまり自由にAzureリソースが作れる)

本来であればAzure DevOps Adminロールを持っていないと作れないはずですが、なぜかB2Bユーザーでもorganizationが作れてしまいます。そしてB2Bユーザーはデフォルトでorganizationへの参加ができません(詰んだ)。

docs.microsoft.com

所有者が退職してIDが無効になったなどの場合であれば、Azure DevOps Adminロールを割り当てれば強制的に新しい所有者にできるのですが、今回の場合、IDそのものは有効なのでできません。もちろんゲストテナントからB2Bユーザーを追い出せばこの方法でもいいのですが、すでに結構なリソースを作っていたので…。

docs.microsoft.com

結局Azureサポートに依頼して、所有者をB2Bユーザーからテナントのユーザーに変更してもらって無事にアクセスできました。完全に新規のorganizationであってもAzureサポートでは削除できないといわれました。

developercommunity.visualstudio.com

※ Azure DevOps Adminロール持ってない人が作成できるのバグじゃないかなぁ(そのために作ったはずなんだけど)ということで、報告。

2021年振り返り

早いですね。今年も引きこもり状態でしたが、皆様いかがお過ごしでしょうか。

お仕事

あまり書けませんが、会社内ではいろいろAzure関係で相談いただくことが多くなりました。仕方ないとはいえ、専門ではないインフラとかMicrosoft 365関係の話が多くて、かなり困りながらやってます。この辺もうちょっとサクッとやってもらえる仲間が欲しい。

自分で手を動かすことも引き続きやっていますが、がっつりプログラムではないなー悲しい。

コミュニティ

tfsug.connpass.com

TFSUGのほうは少なかったのですが、IgniteとかBuildの時はちょこっとコミュニティとしてお手伝いしてました。オンラインになって距離と時間の制約が少なくなったのはいいことでもあり悪いことでもありですね。

devblog.connpass.com

一方金曜夜に隔週でやっているラジオはゆるゆると続いてやっています。次は1/7なので、またよろしゅうに。突発でゲストに出てくれる方も募集しています。主催の三人の知り合いで、MSのdevblogs.microsoft.comの話をしても大丈夫な方であればウェルカムです。

お買い物

こまごまとしたものは買っていますが、今年はとうとう(?)YAMAHAのRTX830買って泣きながらコンフィグ設定しました。

iPhoneもいつも通り2年ごとの買い替えでした。なので、来年は買わない予定。

Fitbit Ionicのベルトがゆるくなって固定できなくなったので(Fitbitの持病)、本体は大丈夫だったのにSenseを買う羽目になりました。これ急いでいたから気づいていなかったのですが、私の用途ではChargeで全然問題なかった。

ちょうどFitbitからアンケートが来たのでベルトと充電器の互換性がない話はボロカスに書いておきました。

サーバーが一台壊れたのでついでにNASにしてみました。2.5Gbpsのハブも買ってメインマシンが2.5Gbpsになったときの準備万端です。メインマシンは悩んでいますが、たぶんIntel Gen12のCore i7で作ることになりそうな予感がします。

来年に向けて

時間の使い方が下手だなぁと相変わらず思ってしまいます。この年になっても成長しない…そこをほんとに何とか改善します。では皆さんよいお年を。

merge文で単一のテーブルにレコードがあれば更新、なければ追加する

docs.microsoft.com

T-SQLでのmergeするときのサンプルは複数のテーブルを使ったものばかり出てくるので、単一テーブルで「レコードがあれば更新、なければ追加」する際の自分用のメモ。ProductテーブルのIDはユニークなキーとなっているとします。

create table Product(
  ID int not null,
  Name nvarchar(128),
  Price Decimal(10,2),
  RegisterDate Date
)

merge Product as P
using (select 123 as [ID], 'Apple' as Name, 100.00 as Price, '2021/12/26' as RegisterDate) as s
on p.ID = s.ID
when matched then 
  update set p.Price = 200, 
  p.RegisterDate = CAST( GETDATE() AS Date ) 
when not matched then 
  insert values (123, 'Apple', 100.00, '2021/12/26');