kkamegawa's weblog

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

Azure DevOps 2018/12/4の更新

この記事はAzure DevOpsアドベントカレンダー12日目の記事と兼用です。

qiita.com

Azure DevOps Sprint 144リリースノートの翻訳を行いました。オリジナルはこちらから読んでください。

docs.microsoft.com

今回の目玉はAzure Boards as a Serviceですかね。ということでAzure Boardsを単独で使えるようになりました(もしくは既存のアカウントから独自に切り出して公開)。GitHub issueのほうが手軽にできて楽だという人は別に無理に使う必要はないんですが、issueになれていない人(といってもGitHub中心でやってた人はそうでもないと思うけど)、とか、個別の登録済みクエリでさくっと見たいとかいう人はまぁいいんじゃないかなと思います。

ほかにもGitHubとの連携がずいぶん増えました。GitHubリリースへのタスク(marketplaceには前からありました)とか、VS CodeやWebでのYAML支援(これは正直めっちゃうれしい)、あとはAzure DevOpsのサービス正常性ポータルが独立しました。

Regionとはいっても、USでは少なくともNorthとSouthの二つあるはずなのですが、まとめてUS Regionとなっているようです。

PythonのパッケージもArtifactsに入りました。使っている人にはうれしいかなと思います。

ではまた三週間後…といっても、USはクリスマス休暇に入るはずなので、おそらくSprint 145をスキップして、146とまとめて来年の更新になるんじゃないかなと思います。

Translate to Japanese to Azure DevOps release note ...

Azure DevOpsのセキュリティ設定

これはAzure DevOpsアドベントカレンダー3日目の記事です。

qiita.com

Azure DevOpsで複雑だと言われる点の一つがセキュリティ周りの設定です。東京と大阪で来年このネタでしゃべるつもりですが、チラ見せみたいな形でご紹介します。

jazug.connpass.com

jazug.connpass.com

大前提

会社組織であればAzure DevOpsはAzure ADベースで動かしましょう。特にOffice 365を使っていればグループ管理が格段に楽です。

ただ、グループの反映はオンプレミスADと違って、1時間くらいかかるようなので、リアルタイム反映は期待しないほうがいいようです。

Organization

f:id:kkamegawa:20181203204821p:plain

ユーザー追加設定です。まずはここに登録しないと始まりません。Azure ADベースで運用しているのであれば、Azure ADのグループごとに追加していったほうが楽です。数人であれば、ちまちま手作業でもいいでしょう。

会社であれば、REST APIを使って管理するのもいいと思います。

f:id:kkamegawa:20181203204831p:plain

Azure DevOps のOrganization(dev.azure.com/Organization)全体の設定です。全プロジェクトに関わるので慎重にしてください。一名では何かの時に不安なので、複数登録しておくことをお勧めします。

f:id:kkamegawa:20181203204837p:plain

アプリケーションからの接続方法を許可する設定です。Alternative AuthenticationはSSHやAzure AD認証がなかった頃、MSアカウントでの認証ができないような環境向けに用意されていた脆弱な方法です。現在はSSHやAzure AD認証(デバイスなど)ができるようになっているので、オフにすることを推奨します。

パブリックプロジェクトはプロジェクト単位で外部に公開できる機能です。組織では使うことはないかもしれないので、最初はオフにしておくといいでしょう。

仮に公開する場合でも、公開は「プロジェクト」単位です。Gitのリポジトリごとに公開できないので、注意してください。

Gitブランチ

f:id:kkamegawa:20181203204750p:plain

Gitのブランチごとにセキュリティの設定ができます。特徴的なのはbypass policies〜ですね。特定の条件に一致した場合、ポリシーをスルーできます。

ブランチポリシー

セキュリティとは少し違いますが、類似なので解説します。

Azure DevOpsではGitブランチごとにレビュワー設定、ビルドを通すという設定ができます。全部のブランチに設定すると大変なので、master, dev, releaseなどの重要なブランチにのみ設定してください。

f:id:kkamegawa:20181203205056p:plain

最小限のレビュワー、作業項目のリンクを必須にする、マージ戦略を強制するといった設定です。

f:id:kkamegawa:20181203205049p:plain

コミット前にビルドが通るかどうかのチェックするビルド定義を指定します。Require approval from external servicesでは例えば、マージ前にセキュリティやコンプライアンスチェックを行うようなサービスを呼び出す、未解決のworkitemがあるかどうかを判定する独自サービスとの連携行います。

こういうのはAzure FunctionsやAWS Lambdaを使うといいですね。

プロジェクトセキュリティ

Project Settingsのページから実施します。

f:id:kkamegawa:20181203204805p:plain

プロジェクトの基本的なセキュリティ設定です。以前作られたプロジェクトではBuild Administratorに入っていないとビルド定義が作れなかった(外部サービスからも同様)のですが、最近の変更で変わりました。古いプロジェクトは明示的に変更する必要があります。

Azure Pipelines

ビルドとリリースにもセキュリティ設定があります。どちらもだいたい同じです。それぞれの定義の三点リーダ(…)をクリックすると出てくるSecurityから呼び出せます。

f:id:kkamegawa:20181203211014p:plain

f:id:kkamegawa:20181203211020p:plain

内容はどちらもだいたい同じで、セットするかどうかだけですね。

ブログでは簡単にまとめましたが、セッションではもうちょっとシナリオベースでお話しようかなと思っています。

OSS向けのAzure Pipelinesについて

これはAzure DevOpsアドベントカレンダー二日目の記事です。

qiita.com

別件で調べていたらサクラエディタのissueにAzure Pipelines を調査するというものがあったので、ネタにさせていただきます。実は自分ではOSS向けのAzure Pipelines使ってないので、間違っていたら教えてください。

ライセンス

オープンソースプロジェクトでは10並列、ビルド時間無制限のAzure Pipelinesが使えます。

Azure DevOpsの料金

典型的な例ではGitHubにすでにレポジトリを持っている人たちが使う、ということが考えられます。GitHubのMarketPlaceから追加してください。

始め方

docs.microsoft.com

GitHubの場合はこちらにファーストステップガイドが載っています。現在Azure PipelinesにサインアップするにはMSアカウントが認証用に必要になっています。もしも学生であれば、Microsoft Imagineの担当者にも相談してみてください。

AppVeyorなどでやっていた方はともかく、今までCIをやっていなかった方はGUIでの初期構築がいいと思います。その場合に注意すべき点はいくつかありますので、紹介します。

絶対パスをやめる

特に昔からのソースを保持している人にやっている人がいるんですが、特定のパスじゃないとビルドできないソースはこの手のCIサービスが使えません。Visual Studioを使っている場合、プロジェクトファイル内に絶対パスを書いていたらVisual Studioが用意しているマクロ($(SolutionDir)等)に移行しましょう。

あと、C/C++プロジェクトで多いですが、昔の伝統でincludeやlib環境変数を使って絶対パスに依存している例があります。もしくはプロジェクトファイルに移行していたとしても、絶対パスでincludeファイルを指定している例を結構見ます。

対策としては、Boostのような有名ライブラリであればNuGetに移行することです。そうすればincludeやlibはNuGetパッケージが解決してくれるので、この手の問題から解放されます。マイナーなライブラリの場合、自分で作るしかないですが…。

www.nuget.org

ビルド環境の注意点

環境が初期化される

CIサービスなので、ビルド環境は毎回初期化されます。したがって、docker pullやNuGetパッケージは毎回リストアですので、ローカルでやるよりも時間がかかります。また、Windows環境は2コアCPUのサーバーなので、ローカルでいいマシンを使っている場合、より差が出ます。

LinuxやWindowsではそもそも2コアサーバーですが、macOSのエージェントは実機で動いているようなので、性能が十分に出る可能性があります。.NET CoreやJavaScript、Java等プラットフォームに依存しないビルドだったらmacOSのほうが早いのかもしれません(未確認)。

ビルドマシンの制限

Azure Pipelinesのストレージは10GBなので、ゲームなどで大きなコンテンツをビルドしようとすると、容量が足りなくなるかもしれません。

docs.microsoft.com

管理者権限がないので、管理者として実行しないと動かないようなツールは使えません。

コンパイラー環境

そのほか、新しい環境は入っていますが、古い環境で使用者が少ないとなくなっていきます。例えばXcodeの8.0-8.3.2は2018/11いっぱいで使えなくなります。

Xcode 8.0-8.3.2 deprecation on Azure Pipelines hosted agents – Microsoft DevOps Blog

古いものを外部に維持してもらおう、ということはできず、むしろ積極的に切り替えていく必要があるため、古い環境こそ自分で維持する必要があります。かといって、新しすぎるものはロールアウトの都合上、少し遅れます。Azure DevOpsが3週間ごとにリリースされており、ビルドエージェントもそれに合わせて更新されていくので、新しいコンパイラーなどは少し待ってください。

英語OS

AppVeyorなどのCIを使っている方であればすでに対処しているかもしれませんが、ビルドマシンは日本語OSではありません。したがって、SHIFT-JISで保存しているファイルをビルドするとき、0x5c(表、ソ等)が文字列中に入っていると、コンパイラがエラーを起こします。

kkamegawa.hatenablog.jp

こちらに書いたのでみてください。

ビルド上限

6時間までです。

Azure DevOpsでの格納ポリシー

Pipelinesのみを使う場合であればビルドした結果を一時的にAzure DevOps内部に保持できます。これはCIであるPipelinesのビルドと、CDであるReleaseが分離されているため、一時的な受け渡し場所として使います。時間経過とともに消えますが、直近の一つの成功ビルドは残っています。成功して、問題なければGitHubのReleaseにPublishするなどしてください。

Azure DevOps(クラウド)とAzure DevOps Server 2019(オンプレミス)の比較

QiitaのAzure DevOps アドベントカレンダー1日目の記事です。結局参加者少ない…。連続は難しいですが、ちょいちょいなんか書いてみます。

qiita.com

最初は軽めに…Azure DevOpsとブランド変更された旧Visual Studio Team Servicesですが、オンプレミスもAzure DevOps Serverとなりました。現在2019のRCが公開されています。

大きな機能としては大体同じなのですが、ちょいちょい差があります。いわゆる非機能要件的なものが多いですが、わかる範囲でまとめてみました。

※:突っ込みいただいて訂正…逆だった(恥)

クラウド オンプレミス
名前 Azure DevOps Azure DevOpsサーバー
ローカライズ ほぼなし あり
英語版Azure DevOps Serverでも日本語ブラウザからアクセスすればローカライズされたコンテンツが表示されます
機能更新 ほぼ三週間に一度 四半期に一度程度
価格 いろいろあり 5人までは無料のExpress版あり
有償版への切り替えもOK
バックアップなどの保守 すべてMicrosoft OS, SQL Server, Azure DevOps
すべて自前
Boardsの違い 全機能あり 全機能あり
検索にはJavaランタイムが必要
Boardsのカスタマイズ プロセステンプレートを継承して簡単に項目追加可能 プロセステンプレートを一から作成する
照合順序 英語 インストール時任意に選択可能
ただし補助文字(SC照合順序)は非サポート
Repos 基本的に無制限 SQL Serverの容量に依存
検索にはJavaランタイムが必要
Artifacts 現在上限なし SQL Serverの容量に依存
Test Plans Visual Studio Enterprise サブスクリプション ユーザーには含まれる
その他は別料金
←同じ
負荷テスト あり なし
Pipelines Microsoft提供
Linux
Windows
macOS
自前(Self-host)管理
自前管理のみ
Preview Feature
プレビュー機能の有効化
あり
(ユーザー/組織ごとに切り替え)
原則なし
(一部過渡的な機能はできることもある)
認証 Azure AD
MSアカウント
PAT
SSH
別名認証
Active Directory
OSローカルアカウント
PAT
SSH
別名認証
サポート 最新版のみ(随時更新) バージョン毎に10年
ただし、依存するOSやSQL Serverのサポート期限を超えることはできない(はず)
稼働場所 現在7リージョンで稼働
稼働状況
USの中でも2箇所で動いているなど、Azureリージョンと対応するともっと多い
オンプレミス環境
クラウドのIaaSなど
パブリックプロジェクト あり なし
レポート機能 ウィジェットによるグラフ表示
Power BI(プレビュー)
SQL Server Reporting Servcices
ウィジェットによるグラフ表示
Power BI(プレビュー)
アクセス履歴 Organization SettingsのUsageから IISのログなどで見る

ほかに漏れているところがあれば。