kkamegawa's weblog

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

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のログなどで見る

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

Azure DevOps Server 2019 RC1インストール

Team Foundation Server改め、Azure DevOps Server 2019のRC1が公開されました。

azure.microsoft.com

定期的に公開されるモデルになっており、今回はクラウドサービスのAzure DevOpsのSprint 141か142あたりまでの内容が入っているようです。

今回はUIが刷新されており、クラウドサービスのように切り替えはできないようなので、慣れていく必要がありますね。

Azure DevOps Server 2019ではWindows Server 2019とAzure SQL Databaseをサポートしています。Azure等で試すときSQL Server入れるのややめんどくさかったのですが、そういう面から解放されそうです。

docs.microsoft.com

f:id:kkamegawa:20181122053143p:plain

インストールを始めます。TFSと違って青基調の画面になっています。内容は大体TFS2018と同じ内容なので、迷わないと思います。

f:id:kkamegawa:20181122053138p:plain

次へをクリック。

f:id:kkamegawa:20181122053135p:plain

今回はアップグレードなので、「既存のデータベースがあります」を選択。これ以降、一部英語がありますが、次のリリースまでには直るそうです。

f:id:kkamegawa:20181122053256p:plain

運用環境のアップグレードです。本番環境を更新する前には別のインスタンスでテストアップグレードを試してみましょう。

f:id:kkamegawa:20181122053132p:plain

TFS2018からのアップグレードです。

f:id:kkamegawa:20181122053253p:plain

Azure DevOps Serverのサービスアカウントを指定します。

f:id:kkamegawa:20181122053250p:plain

Webサイトの設定です。ここではNTLMで指定していますが、本来はKerberosが推奨です。

f:id:kkamegawa:20181122053247p:plain

検索設定です。Elastic Searchを使うので事前にJavaランタイムが必要です。

f:id:kkamegawa:20181122053244p:plain

レポートを構成します。SQL Serverのレポートを使っていますが、SQL Server 2017で使う場合は事前にSQL Server Reporting Serviceを構成しておく必要があります。将来的にAzure DevOpsと同等のAnalytics Servicesへの移行が発表されているので、検討しておいてください。

f:id:kkamegawa:20181122053358p:plain

Reporting Servicesのインスタンスを指定します。

f:id:kkamegawa:20181122053355p:plain

使用するデータベースインスタンスです。

f:id:kkamegawa:20181122053352p:plain

同様にAnalytics Servicesのインスタンス(通常同じ)を指定します。

f:id:kkamegawa:20181122053349p:plain

Reporting Services読み取り用のアカウントを指定します。低い権限のユーザーアカウントを指定します。

f:id:kkamegawa:20181122053429p:plain

適合性チェックを実施します。引っかかるところといえばこのくらいでしょうか(実はよく引っかかる)。

  • Javaランタイムが入ってない
  • ディスクの空き容量
  • 何らかの理由でReporting Servicesが止まってる
  • 古いXAMLビルドが動いている(登録していると警告が出ますが続行可能)

f:id:kkamegawa:20181122053426p:plain

構成を実行して

f:id:kkamegawa:20181122053423p:plain

アップグレードです。古いバージョンから累積的に実施するので、ジャンプアップが長い、データベースのサイズによっては時間がかかります。古い添付ファイルやテスト結果を削除しておくのがいいでしょう。

f:id:kkamegawa:20181122053141p:plain

終わりました。再起動がかかります。

f:id:kkamegawa:20181122065855p:plain

こんな感じになります。日本語になっていること以外はクラウドサービスと変わらないですね。