演習 - Azure DevOps 環境を設定する
このセクションでは、Azure DevOps 組織がこのモジュールの残りを完了する準備が整っていることを確認します。 また、後でデプロイする Azure App Service 環境も作成します。
これらの目標を達成するには、次の手順を実行します。
- ユーザーを追加して、Azure DevOps が Azure サブスクリプションに接続できることを確認します。
- このモジュール用の Azure DevOps プロジェクトを設定します。
- Azure Boards 上で、このモジュールの作業項目を [実行中] 列に移動します。
- 変更をパイプラインにプッシュできるように、ローカルでプロジェクトが設定されていることを確認します。
- Azure Cloud Shell で Azure CLI を使用して Azure App Service 環境を作成します。
- App Service 環境の名前を定義するパイプライン変数を作成します。
- Azure Pipelines が Azure サブスクリプションに安全にアクセスできるようにするサービス接続を作成します。
Azure DevOps にユーザーを追加する
このモジュールを完了するには、独自の Azure サブスクリプションが必要です。 Azure の使用は無料で開始できます。
Azure DevOps を使用するために Azure サブスクリプションは必要ありませんが、ここでは Azure DevOps を使用して、Azure サブスクリプションに存在する Azure リソースにデプロイします。 プロセスを簡略化するには、同じ Microsoft アカウントを使用して、Azure サブスクリプションと Azure DevOps 組織の両方にサインインします。
別の Microsoft アカウントを使用して Azure と Azure DevOps にサインインする場合は、Azure へのサインインに使用する Microsoft アカウントで DevOps 組織にユーザーを追加します。 詳細については、「 組織またはプロジェクトにユーザーを追加する」を参照してください。 ユーザーを追加するときに、 基本 アクセス レベルを選択します。
次に、Azure DevOps からサインアウトしてサインインします。 Azure サブスクリプションへのサインインに使用する Microsoft アカウントを使用します。
Azure DevOps プロジェクトを取得する
ここでは、このモジュールの残りの部分を完了するように Azure DevOps 組織が設定されていることを確認します。 これを行うには、Azure DevOps でプロジェクトを作成するテンプレートを実行します。
このラーニング パスのモジュールは段階的なプロセスになっています。 Tailspin Web チームの DevOps 導入作業を見ていきます。 学習目的で、各モジュールには独自の Azure DevOps プロジェクトがあります。
テンプレートの実行
Azure DevOps 組織を設定するテンプレートを実行します。
Visual Studio または選択した IDE で ADOGenerator プロジェクトを取得して実行します。
テンプレートの一覧からテンプレート番号を入力するように求められたら、「Azure Pipelines を使用してマルチステージ パイプラインを作成する」に「30」と入力し、Enter キーを押します。
認証方法を選択します。 個人用アクセス トークン (PAT) を設定して使用することも、デバイス ログインを使用することもできます。
注
PAT を設定する場合は、必ず必要なスコープを承認 してください。 このモジュールではフル アクセスを使用できますが、実際の状況では、必要なスコープのみを付与する必要があります。
Azure DevOps 組織名を入力し、 Enter キーを押します。
メッセージが表示されたら、Azure DevOps PAT を入力し、 Enter キーを押します。
Space Game - web - Multistage などのプロジェクト名を入力し、Enter キーを押します。
プロジェクトが作成されたら、ブラウザー (
https://dev.azure.com/<your-organization-name>/
) で Azure DevOps 組織に移動し、プロジェクトを選択します。
リポジトリのフォーク
まだ作成していない場合は、 mslearn-tailspin-spacegame-web-deploy リポジトリのフォークを作成します。
GitHub で、 mslearn-tailspin-spacegame-web-deploy リポジトリに移動します。
画面の右上にある [フォーク ] を選択します。
所有者として GitHub アカウントを選択し、[フォークの作成] を選択します。
重要
このモジュールでは、[ Azure DevOps 環境のクリーンアップ ] ページに重要なクリーンアップ手順が含まれています。 クリーンアップによって、無料のビルド時間の浪費を抑えることができます。 このモジュールを完了していない場合でも、必ずクリーンアップ手順に従ってください。
プロジェクトの可視性を設定する
最初は、GitHub 上の Space Game リポジトリのフォークはパブリックに設定され、Azure DevOps テンプレートによって作成されたプロジェクトはプライベートに設定されます。 GitHub 上のパブリック リポジトリには誰でもアクセスできますが、プライベート リポジトリには自分のほかに共有することを選択したユーザーのみがアクセスできます。 同様に、Azure DevOps では、パブリック プロジェクトでは認証されていないユーザーに読み取り専用アクセスを提供しますが、プライベート プロジェクトではユーザーがサービスにアクセスするにはアクセス権の付与と認証が必要です。
現時点では、このモジュールにおいてこれらの設定を変更する必要はありません。 ただし、個人のプロジェクトでは、他のユーザーに付与する可視性とアクセス権を決定する必要があります。 たとえば、プロジェクトがオープンソースの場合は、GitHub リポジトリと Azure DevOps プロジェクトの両方をパブリックにすることを選択できます。 プロジェクトが独自のものである場合は、GitHub リポジトリと Azure DevOps プロジェクトの両方をプライベートにするのが一般的です。
後で、プロジェクトに最適なオプションを決定する際に、次のリソースが役立つ場合があります。
作業項目を [実行中] に移動する
ここでは、Azure Boards で作業項目を自分に割り当てます。 また、作業項目を [実行 中] 状態に移動します。 実際には、あなたとチームは、各 スプリント または作業イテレーションの開始時に作業項目を作成します。
この作業の割り当てにより、作業のチェックリストが提供されます。 他のチーム メンバーは、作業内容と残りの作業量を把握できます。 作業項目は、チームが一度に多くの作業を引き受けないように、進行中の作業 (WIP) の制限を適用するのにも役立ちます。
現在のスプリントのためにチームが次の重要な問題に決定したことを思い出してください。
注
Azure DevOps 組織内では、作業項目に順番に番号が付けられます。 プロジェクトでは、各作業項目の番号が、ここに表示されているものと一致しない可能性があります。
ここでは、最初の項目 「 マルチステージ パイプラインの作成」を [ 実行 ] 列に移動します。 次に、作業項目に自分自身を割り当てます。 マルチステージ パイプラインの作成は 、 Space Game Web サイトのデプロイの各ステージの定義に関連します。
作業項目を設定するには、次のようにします。
Azure DevOps から Boards に移動します。 次に、メニューから [ ボード] を選択します。
[ マルチステージ パイプラインの作成 ] カードで、下矢印を選択します。 次に、作業項目を自分に割り当てます。
作業項目を [ To Do ] 列から [ 実行 ] 列に移動します。
このモジュールの最後に、タスクの完了後にカードを [完了] 列に移動します。
プロジェクトをローカルで設定する
ここでは、Visual Studio Code で Space Game プロジェクトを読み込み、Git を構成し、リポジトリをローカルに複製して、スターター コードをダウンロードできるようにアップストリーム リモートを設定します。
注
mslearn-tailspin-spacegame-web-deploy プロジェクトを既にローカルに設定している場合は、次のセクションに進むことができます。
統合ターミナルを開く
Visual Studio Code には統合ターミナルが付属しています。 ここでは、ファイルを編集し、コマンド ラインから作業します。
Visual Studio Code を起動します。
[View] メニューで、[Terminal] を選択します。
ドロップダウン リストで、 Git Bash を選択します。 使用する別の Unix シェルに慣れている場合は、代わりにそのシェルを選択します。
ターミナル ウィンドウでは、システムにインストールされている任意のシェルを選択できます。 たとえば、Git Bash、PowerShell、または別のシェルを選択できます。
ここでは、Git for Windows の一部である Git Bash を使用します。これにより、Git コマンドを簡単に実行できます。
注
Windows で、Git Bash がオプションとして表示されない場合は、Git がインストール済みであることを確認してから、Visual Studio Code を再起動してください。
cd
コマンドを実行して、作業するディレクトリに移動します。 必要に応じて、ホーム ディレクトリ (~
) または別のディレクトリを選択します。cd ~
Git の構成
Git と GitHub を初めて使用する場合は、最初にいくつかのコマンドを実行して ID を Git に関連付け、GitHub で認証します。 詳細については、「Git の セットアップ」を参照してください。
少なくとも、次の手順を完了する必要があります。 統合ターミナルからコマンドを実行します。
- ユーザー名を設定します。
- コミット メール アドレスを設定します。
- GitHub パスワードをキャッシュします。
注
GitHub で既に 2 要素認証を使用している場合は、 個人用アクセス トークンを作成します。 メッセージが表示されたら、パスワードの代わりにトークンを使用します。
アクセス トークンは、パスワードと同様に扱います。 安全な場所に保管してください。
Visual Studio Code でプロジェクトを設定する
Azure DevOps を使用したアプリケーションのビルド ラーニング パスでは、Git リポジトリをフォークして複製しました。 リポジトリには、 Space Game Web サイトのソース コードが含まれています。 フォークは Azure DevOps のプロジェクトに接続されているため、GitHub に変更をプッシュするとビルドが実行されます。
重要
このラーニング パスでは、別の Git リポジトリ mslearn-tailspin-spacegame-web-deploy に切り替えます。 テンプレートを実行して Azure DevOps プロジェクトを設定すると、プロセスによってリポジトリが自動的にフォークされます。
このパートでは、パイプライン構成を変更して構築できるように、フォークをローカルに複製します。
フォークをローカルにクローンする
ご自分の GitHub アカウントに Space Game Web プロジェクトのコピーが作成されています。 次に、コンピューターにコピーをダウンロード ("クローン") して作業できるようにします。
クローンは、フォークと同様にリポジトリのコピーです。 リポジトリを複製するときに、変更を加え、それらが期待どおりに動作することを確認してから、それらの変更を GitHub にアップロードできます。 また、他の認証済みユーザーがリポジトリの GitHub コピーに加えた変更とローカル コピーを同期することもできます。
Space Game Web プロジェクトをコンピューターにクローンするには、次のようにします。
GitHub の Space Game Web プロジェクト (mslearn-tailspin-spacegame-web-deploy) のフォークに移動します。
[コード] を選択します。 次に、[HTTPS] タブで、URL を自分のクリップボードにコピーできるように表示されている URL の横のボタンを選択します。
Visual Studio Code で、ターミナル ウィンドウに移動します。
ターミナルで、作業するディレクトリに移動します。 必要に応じて、ホーム ディレクトリ (
~
) または別のディレクトリを選択します。cd ~
git clone
コマンドを実行します。 ここに表示されている URL をクリップボードの内容に置き換えます。git clone https://github.com/your-name/mslearn-tailspin-spacegame-web-deploy.git
mslearn-tailspin-spacegame-web-deploy
ディレクトリに移動します。 これはリポジトリのルート ディレクトリです。cd mslearn-tailspin-spacegame-web-deploy
アップストリーム リモートを設定する
"リモート" とは、チーム メンバーが (GitHub のリポジトリのように) 共同作業する Git リポジトリです。 ここでは、リモートを一覧表示し、最新のサンプル コードを取得できるように、Microsoft のリポジトリのコピーを指すリモートを追加します。
次の
git remote
コマンドを実行して、自分のリモートを一覧表示します。git remote -v
リポジトリに対してフェッチ (ダウンロード) とプッシュ (アップロード) の両方のアクセスがあることがわかります。
origin https://github.com/username/mslearn-tailspin-spacegame-web-deploy.git (fetch) origin https://github.com/username/mslearn-tailspin-spacegame-web-deploy.git (push)
origin により、GitHub 上のリポジトリが明示されています。 別のリポジトリからコードをフォークすると、多くの場合、元のリモート (フォーク元のリモート) に アップストリームという名前が付けられます。
次の
git remote add
コマンドを実行して、Microsoft リポジトリを指す「upstream」という名前のリモートを作成します。git remote add upstream https://github.com/MicrosoftDocs/mslearn-tailspin-spacegame-web-deploy.git
git remote
をもう一度実行して、変更を確認します。git remote -v
フェッチ (ダウンロード) アクセスと、リポジトリへのプッシュ (アップロード) アクセスの両方が引き続き存在することがわかります。 Microsoft リポジトリへのフェッチ アクセス権も取得しました。
origin https://github.com/username/mslearn-tailspin-spacegame-web-deploy.git (fetch) origin https://github.com/username/mslearn-tailspin-spacegame-web-deploy.git (push) upstream https://github.com/MicrosoftDocs/mslearn-tailspin-spacegame-web-deploy.git (fetch)
エクスプローラーでプロジェクトを開く
Visual Studio Code のターミナル ウィンドウは、Space Game Web プロジェクトのルート ディレクトリを指し示しています。 その構造を表示し、ファイルを操作するには、ファイル エクスプローラーから、ここでプロジェクトを開きます。
プロジェクトを開く最も簡単な方法は、現在のディレクトリで Visual Studio Code を再度開くことです。 これを行うには、統合ターミナルから次のコマンドを実行します。
code -r .
エクスプローラーでディレクトリとファイル ツリーを確認します。
統合ターミナルをもう一度開きます。 ターミナルでのユーザーの場所は Web プロジェクトのルートになります。
code
コマンドが失敗した場合は、ご使用のシステム PATH に Visual Studio Code を追加する必要があります。 これを行うには、次の手順を実行します。
- Visual Studio Code で、[F1] を選択するか、[表示]>[コマンド パレット] を選択して、コマンド パレットにアクセスします。
- コマンド パレットで、「シェル コマンド:PATH 内に 'code' コマンドをインストールします」と入力します。
- 前の手順を繰り返して、ファイル エクスプローラーでプロジェクトを開きます。
これで、Space Game のソース コードと Azure Pipelines 構成をローカル開発環境から操作できるように設定されました。
Azure App Service 環境を作成する
ここでは、パイプライン ステージを定義する環境を作成します。 ステージごとに 1 つの App Service インスタンス ( 開発、 テスト、 ステージング) を作成します。
Azure Pipelines を使用したリリース パイプラインの作成では、Azure portal を使用して App Service を起動しました。 ポータルは、Azure で何が利用できるかを調べるか、基本的なタスクを実行する優れた方法ですが、App Service などのコンポーネントを立ち上げるのは面倒な場合があります。
このモジュールでは、Azure CLI を使用して 3 つの App Service インスタンスを起動します。 Azure CLI には、ターミナルまたは Visual Studio Code からアクセスできます。 ここでは、Azure Cloud Shell から Azure CLI にアクセスします。 このブラウザーベースのシェル エクスペリエンスは、クラウドでホストされています。 Cloud Shell では、Azure CLI は Azure サブスクリプションで使用するように構成されています。
重要
このモジュールの演習を完了するには、独自の Azure サブスクリプションが必要です。
Azure portal を使用して Cloud Shell を起動する
Azure Portal にアクセスしてサインインします。
メニューから Cloud Shell を選択します。 メッセージが表示されたら、 Bash エクスペリエンスを選択します。
注
Cloud Shell では、Cloud Shell で作成したファイルを保持するために Azure ストレージ リソースが必要です。 Cloud Shell を初めて開くと、リソース グループ、ストレージ アカウント、および Azure Files 共有を作成するように求められます。 この設定は、以降のすべての Cloud Shell セッションで自動的に使用されます。
Azure リージョンを選択する
リージョンは、地理的な場所内の 1 つ以上の Azure データセンターです。 リージョンの例としては、米国東部、米国西部、北ヨーロッパがあります。 App Service インスタンスを含むすべての Azure リソースには、リージョンが割り当てられます。
コマンドの実行を容易にするには、まず既定のリージョンを選択します。 既定のリージョンを指定した後、別のリージョンを指定しない限り、後のコマンドでそのリージョンが使用されます。
Cloud Shell から、Azure サブスクリプションから使用可能なリージョンを一覧表示するには、次の
az account list-locations
コマンドを実行します。az account list-locations \ --query "[].{Name: name, DisplayName: displayName}" \ --output table
出力の
Name
列から、近くのリージョンを選択します。 たとえば、eastasia
またはwestus2
を選択します。az configure
を実行して、既定のリージョンを設定します。<REGION>
を選択したリージョンの名前に置き換えます。az configure --defaults ___location=<REGION>
この例では、既定のリージョンとして
westus2
を設定します。az configure --defaults ___location=westus2
App Service インスタンスを作成する
ここでは、デプロイ先の 3 つのステージ ( 開発、 テスト、 ステージング) の App Service インスタンスを作成します。 従うプロセスの簡単な概要を次に示します。
Web アプリのドメイン名を一意にする乱数を生成します。
この手順は学習目的です。 実際には、アプリまたはサービスの名前と一致するドメイン名を選択します。
すべての App Service インスタンスを含むリソース グループを作成します。
学習目的で、ここでは、すべての App Service インスタンスを含む 1 つのリソース グループを作成します。 実際には、各インスタンスのライフ サイクルをより適切に制御できるように、App Service インスタンスごとに個別のリソース グループを作成できます。
アプリサービスプランを作成する。
App Service プランでは、Web アプリの CPU、メモリ、ストレージ リソースを定義します。 ここでは、 B1 Basic プランを使用します。 このプランは、トラフィック要件が低いアプリを対象としています。 Standard プランと Premium プランは、運用環境のワークロード用です。 これらのプランは、専用の仮想マシン インスタンスで実行されます。
開発、テスト、ステージングの各環境に対して、App Service インスタンスを作成します。
各環境のホスト名を取得します。
各環境が実行されていること、およびホーム ページにアクセス可能であることを確認します。
注
学習目的で、ここでは既定のネットワーク設定を使用します。 これらの設定により、インターネットからサイトにアクセスできるようになります。 実際には、インターネットルーティング不可能なネットワークに Web サイトを配置し、自分とチームだけがアクセスできる Azure 仮想ネットワークを構成できます。 後で、ユーザーが Web サイトを使用できるようにネットワークを再構成できます。
App Service インスタンスを作成するには、次の手順に従います。
Cloud Shell から、Web アプリのドメイン名を一意にする乱数を生成します。
webappsuffix=$RANDOM
tailspin-space-game-rg という名前のリソース グループを作成するには、次の
az group create
コマンドを実行します。az group create --name tailspin-space-game-rg
tailspin-space-game-asp という名前の App Service プランを作成するには、次の
az appservice plan create
コマンドを実行します。az appservice plan create \ --name tailspin-space-game-asp \ --resource-group tailspin-space-game-rg \ --sku B1 \ --is-linux
--sku
引数では、B1 プランを指定しています。 このプランは、Basic サービス レベルで実行されます。--is-linux
引数では、Linux ワーカーを使用するよう指定しています。重要
Azure サブスクリプションで B1 SKU を使用できない場合は、S1 (Standard) などの 別のプランを選択します。
環境 (開発、 テスト、 ステージング) ごとに 1 つずつ、3 つの App Service インスタンスを作成するには、次の
az webapp create
コマンドを実行します。az webapp create \ --name tailspin-space-game-web-dev-$webappsuffix \ --resource-group tailspin-space-game-rg \ --plan tailspin-space-game-asp \ --runtime "DOTNETCORE|8.0" az webapp create \ --name tailspin-space-game-web-test-$webappsuffix \ --resource-group tailspin-space-game-rg \ --plan tailspin-space-game-asp \ --runtime "DOTNETCORE|8.0" az webapp create \ --name tailspin-space-game-web-staging-$webappsuffix \ --resource-group tailspin-space-game-rg \ --plan tailspin-space-game-asp \ --runtime "DOTNETCORE|8.0"
学習目的で、ここで各 App Service インスタンスに同じ App Service プラン B1 Basic を適用します。 実際には、予想されるワークロードに一致するプランを割り当てます。
たとえば、 開発 ステージと テスト ステージにマップされる環境では、チームのみが環境にアクセスする必要があるため、B1 Basic が適切な場合があります。
ステージング環境の場合は、運用環境に一致するプランを選択します。 このプランでは、CPU、メモリ、ストレージのリソースが増える可能性があります。 このプランでは、運用環境に似た環境で、ロード テストなどのパフォーマンス テストを実行できます。 サイトへのライブ トラフィックに影響を与えずにテストを実行できます。
各 App Service インスタンスのホスト名と状態を一覧表示するには、次の
az webapp list
コマンドを実行します。az webapp list \ --resource-group tailspin-space-game-rg \ --query "[].{hostName: defaultHostName, state: state}" \ --output table
実行中の各サービスのホスト名をメモします。 これらのホスト名は、作業を確認するときに後で必要になります。 次に例を示します。
HostName State ------------------------------------------------------- ------- tailspin-space-game-web-dev-21017.azurewebsites.net Running tailspin-space-game-web-test-21017.azurewebsites.net Running tailspin-space-game-web-staging-21017.azurewebsites.net Running
オプションの手順として、1 つ以上のホスト名に移動します。 実行されていること、および既定のホーム ページが表示されることを確認します。
表示される内容は次のとおりです。
重要
このモジュールの「Azure DevOps 環境をクリーンアップする」ページには、重要なクリーンアップ手順が含まれています。 クリーンアップは、このモジュールを完了した後に Azure リソースに対して課金されないようにするのに役立ちます。 このモジュールを最後まで実行しなかったとしても、クリーンアップ手順は必ず行ってください。
Azure Pipelines でパイプライン変数を作成する
Azure Pipelines を使用したリリース パイプラインの作成で、App Service に Web アプリの名前を格納する変数をパイプラインに追加しました。 ここで同じ操作を行います。 ただし、今回は、パイプラインの Dev、 Test、または Staging ステージに対応する App Service インスタンスごとに 1 つの変数を追加します。
これらの名前はパイプライン構成でハードコーディングできますが、変数として定義すると、構成の再利用性が高くなります。 さらに、App Service インスタンスの名前が変更された場合は、構成を変更せずに変数を更新し、パイプラインをトリガーできます。
変数を追加するには:
Azure DevOps で、 Space Game - Web - Multistage プロジェクトに移動します。
[パイプライン] で [ライブラリ] を選択します。
[+ Variable group] を選択します。
[ プロパティ] で、変数グループ名として 「Release 」と入力します。
[Variables] で、[+ Add] を選択します。
変数の名前として、「 WebAppNameDev」と入力します。 値には、開発 環境に 対応する App Service インスタンスの名前 ( tailspin-space-game-web-dev-1234 など) を入力します。
前の 2 つの手順をもう 2 回繰り返して、 テスト 環境と ステージング 環境の変数を作成します。 以下に例を示します。
変数名 値の例 WebAppNameTest tailspin-space-game-web-test-1234 WebAppNameStaging tailspin-space-game-web-staging-1234 各例の値は、実際の環境に対応する App Service インスタンスに置き換えてください。
重要
ホスト名ではなく、App Service インスタンスの名前を設定します。 この例では、tailspin-space-game-web-dev-1234 を入力し、tailspin-space-game-web-dev-1234.azurewebsites.net は入力しません。
ページの上部にある [ 保存] を選択して、パイプラインに変数を保存します。
変数グループは次のようになります。
開発環境とテスト環境を作成する
Azure Pipelines を使用したリリース パイプラインの作成で、 開発環境 用の環境を作成しました。 ここでは、 開発環境 と テスト 環境の両方に対してプロセスを繰り返します。 後で、より多くの条件を含む ステージング 環境を設定します。
開発環境とテスト環境を作成するには:
Azure Pipelines で、[ 環境] を選択します。
開発環境を作成するには:
- [環境の作成] を選択します。
- [ 名前] に「 dev」と入力します。
- 残りのフィールドは既定値のままにします。
- [作成]を選択します。
テスト環境を作成するには:
- [環境] ページに戻ります。
- [ 新しい環境] を選択します。
- [ 名前] に「 test」と入力します。
- [作成]を選択します。
サービス接続を作成する
ここでは、Azure Pipelines が Azure サブスクリプションにアクセスできるようにするサービス接続を作成します。 Azure Pipelines では、このサービス接続を使用して、Web サイトを App Service にデプロイします。 前のモジュールで同様のサービス接続を作成しました。
重要
同じ Microsoft アカウントで Azure portal と Azure DevOps の両方にサインインしていることを確認します。
Azure DevOps で、 Space Game - Web - Multistage プロジェクトに移動します。
ページの左下隅にある [ プロジェクトの設定] を選択します。
[パイプライン] で、[サービス接続] を選択します。
[ サービス接続の作成] を選択し、[ Azure Resource Manager] を選択し、[ 次へ] を選択します。
ページの先頭で、[ アプリの登録 (自動)] を選択します。 次に、[ 次へ] を選択します。
次のフィールドに入力してください。
フィールド 価値 スコープのレベル 予約 サブスクリプション お使いの Azure サブスクリプション リソース グループ テイルスピン・スペース・ゲーム・RG サービス接続名 Resource Manager - Tailspin - Space Game プロセス中に、Microsoft アカウントにサインインするように求められる場合があります。
[ すべてのパイプラインにアクセス許可を付与する] を選択していることを確認します。
[保存] を選択します。
Azure サブスクリプションに接続できることを確認するために、Azure DevOps はテスト接続を実行します。 Azure DevOps が接続できない場合は、2 回目にサインインする機会があります。