演習 - Azure DevOps 環境を設定する

完了

このセクションでは、Azure DevOps 組織を設定し、デプロイする Azure App Service 環境を作成する方法について説明します。

次の方法について学習します。

  • Azure DevOps プロジェクトを設定します。
  • Azure Boards を使用して作業項目を管理します。
  • Azure App Service 環境を作成します。
  • Azure Pipelines でパイプライン変数を作成します。
  • Azure サブスクリプションで認証するためのサービス接続を作成します。

Azure DevOps にユーザーを追加する

このモジュールを完了するには、独自の Azure サブスクリプションが必要です。 Azure の使用は無料で開始できます。

Azure DevOps を操作するために Azure サブスクリプションは必要ありませんが、このモジュールでは Azure DevOps を使用して Azure リソースにデプロイします。 プロセスを簡略化するには、同じ Microsoft アカウントを使用して Azure と Azure DevOps の両方にサインインします。

別の Microsoft アカウントを使用して Azure と Azure DevOps にサインインする場合は、Azure へのサインインに使用する Microsoft アカウントの下に 、Basic アクセス レベルのユーザーを DevOps 組織に追加します。 詳細については、「 組織またはプロジェクトにユーザーを追加 する」を参照してください。

次に、Azure DevOps からサインアウトし、Azure サブスクリプションへのサインインに使用したのと同じアカウントを使用してサインインし直します。

Azure DevOps プロジェクトを取得する

ここでは、このモジュールの残りの部分を完了するために、Azure DevOps 組織が確実に設定されるようにします。 これを行うには、Azure DevOps でプロジェクトを作成するテンプレートを実行します。

このラーニング パスのモジュールは段階的なプロセスになっています。 Tailspin Web チームの DevOps 導入作業を見ていきます。 学習目的で、各モジュールには独自の Azure DevOps プロジェクトがあります。

テンプレートの実行

Azure DevOps 組織を設定するテンプレートを実行します。

  1. Visual Studio または選択した IDE で ADOGenerator プロジェクトを取得して実行します。

  2. テンプレートの一覧からテンプレート番号を入力するように求められたら、「Azure Pipelines を使用して Docker コンテナーのデプロイを自動化する」に「39」と入力し、Enter キーを押します。

  3. 認証方法を選択します。 個人用アクセス トークン (PAT) を設定して使用することも、デバイス ログインを使用することもできます。

    PAT を設定する場合は、必ず必要なスコープを承認 してください。 このモジュールではフル アクセスを使用できますが、実際の状況では、必要なスコープのみを付与する必要があります。

  4. Azure DevOps 組織名を入力し、 Enter キーを押します。

  5. メッセージが表示されたら、Azure DevOps PAT を入力し、 Enter キーを押します。

  6. Space Game - Web - Docker などのプロジェクト名を入力し、Enter キーを押します

  7. プロジェクトが作成されたら、ブラウザー ( https://dev.azure.com/<your-organization-name>/) で Azure DevOps 組織に移動し、プロジェクトを選択します。

リポジトリのフォーク

まだ作成していない場合は、 mslearn-tailspin-spacegame-web-docker リポジトリのフォークを作成します。

  1. GitHub で、 mslearn-tailspin-spacegame-web-docker リポジトリに移動します。

  2. 画面の右上にある [フォーク ] を選択します。

  3. 所有者として GitHub アカウントを選択し、[フォークの作成] を選択します。

重要

このモジュールでは、[ Azure DevOps 環境のクリーンアップ ] ページに重要なクリーンアップ手順が含まれています。 クリーンアップによって、無料のビルド時間の浪費を抑えることができます。 クリーンアップ手順は、このモジュールを完了しなかった場合でも必ず行ってください。

プロジェクトの可視性を設定する

最初は、GitHub 上の Space Game リポジトリのフォークはパブリックに設定され、Azure DevOps テンプレートによって作成されたプロジェクトはプライベートに設定されます。 GitHub 上のパブリック リポジトリには誰でもアクセスできますが、プライベート リポジトリには自分のほかに共有することを選択したユーザーのみがアクセスできます。 同様に、Azure DevOps では、パブリック プロジェクトでは認証されていないユーザーに読み取り専用アクセスを提供しますが、プライベート プロジェクトではユーザーがサービスにアクセスするにはアクセス権の付与と認証が必要です。

現時点では、このモジュールにおいてこれらの設定を変更する必要はありません。 ただし、個人のプロジェクトでは、他のユーザーに付与する可視性とアクセス権を決定する必要があります。 たとえば、プロジェクトがオープンソースの場合は、GitHub リポジトリと Azure DevOps プロジェクトの両方をパブリックにすることを選択できます。 プロジェクトが独自のものである場合は、GitHub リポジトリと Azure DevOps プロジェクトの両方をプライベートにするのが一般的です。

後で、プロジェクトに最適なオプションを決定する際に、次のリソースが役立つ場合があります。

作業項目を [実行中] に移動する

ここでは、Azure Boards で作業項目を自分に割り当てます。 また、作業項目を [実行 中] 状態に移動します。 実際には、あなたとチームは、各 スプリントの開始時に作業項目を作成するか、作業イテレーションを作成します。

この作業の割り当てにより、作業のチェックリストが提供されます。 他のチーム メンバーは、作業内容と残りの作業量を把握できます。 作業項目は、チームが一度に多くの作業を引き受けないように、進行中の作業 (WIP) の制限を適用するのにも役立ちます。

ここでは、最初の項目である [ Docker を使用して Web サイトのコンテナー バージョンを作成する] を [ 実行 ] 列に移動し、作業項目に自分自身を割り当てます。

作業項目を設定するには、次のようにします。

  1. Azure DevOps から Boards に移動します。 次に、メニューから [ボード ] を選択します。

    [Boards] メニューの場所を示す Azure DevOps のスクリーンショット。

  2. Docker 作業項目を 使用して Web サイトのコンテナー バージョンを作成 するで、カードの下部にある下矢印を選択し、作業項目を自分に割り当てます。

    下矢印の場所を示す Azure Boards のスクリーンショット。

  3. 作業項目を [ To Do ] 列から [ 実行 ] 列に移動します。

    [実行中] 列にカードが示されている Azure Boards のスクリーンショット。

このモジュールの最後に、タスクの完了後にカードを [完了] 列に移動します。

Azure App Service 環境を作成する

Azure Pipelines を使用したリリース パイプラインの作成 モジュールでは、Azure portal を使用して App Service インスタンスを作成しました。 ポータルは Azure のオファリングを探索するための優れたツールですが、App Service などのコンポーネントの設定は煩雑になる可能性があります。

このモジュールでは、Azure CLI を使用して、App Service インスタンスのデプロイと実行に必要なリソースを起動します。 Azure CLI には、ターミナルまたは Visual Studio Code からアクセスできます。

重要

このモジュールの演習を完了するには、独自の Azure サブスクリプションが必要です。

Cloud Shell inn Azure portal を起動する

  1. Azure portal に移動し、サインインします。

  2. メニュー バーから Cloud Shell を選択し、 Bash エクスペリエンスを選択します。

    Cloud Shell メニュー項目の場所を示す Azure portal のスクリーンショット。

    Cloud Shell では、Cloud Shell で作成するすべてのファイルを保持する Azure ストレージ リソースが必要です。 ユーザーが Cloud Shell を初めて開くとき、リソース グループ、ストレージ アカウント、Azure Files 共有の作成を求められます。 この設定は、以降のすべての Cloud Shell セッションで自動的に使用されます。

Azure リージョンを選択する

リージョンは、特定の地理的な場所内にある 1 つ以上の Azure データセンターです。 リージョンの例としては、米国東部、米国西部、北ヨーロッパなどがあります。 App Service インスタンスなどの各 Azure リソースは、特定のリージョンに割り当てられます。

コマンドの実行プロセスを簡略化するには、まず既定のリージョンを選択します。 既定のリージョンを指定すると、別のリージョンが明示的に指定されていない限り、後続のコマンドでは既定でそのリージョンが使用されます。

  1. 次のコマンドを実行して、Azure サブスクリプションで使用可能なリージョンを一覧表示します。

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. 出力の [名前] 列から、自分の場所に近いリージョンを選択します。 たとえば、 eastasia または westus2 を選択できます。

  3. 次のコマンドを実行して、既定のリージョンを設定します。 プレースホルダーを、選択したリージョンの名前に置き換えます。

    az configure --defaults ___location=<REGION>
    

    次の使用例は 、westus2 を既定のリージョンとして設定します。

    az configure --defaults ___location=westus2
    

Bash 変数を作成する

このセクションでは、Bash 変数を作成して、セットアップ プロセスの利便性を高め、エラーを減らします。 共有テキスト文字列に変数を使用すると、誤った入力ミスを回避できます。

  1. Cloud Shell から、乱数を生成します。 これにより、次の手順で特定のサービスのグローバルに一意の名前を簡単に作成できるようになります。

    resourceSuffix=$RANDOM
    
  2. App Service Web アプリと Azure Container Registry のグローバルに一意の名前を作成します。 これらのコマンドで二重引用符を使用すると、インライン構文を使用して変数を補間するように Bash に求められます。

    webName="tailspin-space-game-web-${resourceSuffix}"
    registryName="tailspinspacegame${resourceSuffix}"
    
  3. リソース グループと App Service プランの名前を格納するために、さらに 2 つの Bash 変数を作成します。

    rgName='tailspin-space-game-rg'
    planName='tailspin-space-game-asp'
    

Azure リソースの作成

学習目的で、ここでは既定のネットワーク設定を使用します。 これらの設定により、インターネットからサイトにアクセスできるようになります。 実際には、インターネットルーティング可能ではなく、自分とチームだけがアクセスできるネットワークに Web サイトを配置する Azure 仮想ネットワークを構成できます。 後で、ユーザーが Web サイトを使用できるようにネットワークを再構成できます。

  1. 次の az group create コマンドを実行して、前に定義した名前を使用してリソース グループを作成します。

    az group create --name $rgName
    
  2. 次の az acr create コマンドを実行して、前に定義した名前を使用して Azure Container Registry を作成します。

    az acr create --name $registryName \
      --resource-group $rgName \
      --sku Standard \
      --admin-enabled true
    
  3. 次の az appservice plan create コマンドを実行して、前に定義した名前を使用して App Service プランを作成します。

    az appservice plan create \
      --name $planName \
      --resource-group $rgName \
      --sku B1 \
      --is-linux
    

    --sku 引数では、B1 プランを指定しています。 このプランは、Basic サービス レベルで実行されます。 --is-linux 引数では、Linux ワーカーを使用するよう指定しています。

    重要

    Azure サブスクリプションで B1 SKU を使用できない場合は、S1 (Standard) などの 別のプランを選択します。

  4. 次の az webapp create コマンドを実行して、App Service インスタンスを作成します。

    az webapp create \
      --name $webName \
      --resource-group $rgName \
      --plan $planName \
      --deployment-container-image-name $registryName.azurecr.io/web:latest
    
  5. 次の az webapp list コマンドを実行して、App Service インスタンスのホスト名と状態を一覧表示します。

    az webapp list \
      --resource-group $rgName \
      --query "[].{hostName: defaultHostName, state: state}" \
      --output table
    

    実行中のサービスのホスト名をメモします。 後で作業内容を確認するときに必要になります。 次に例を示します。

    HostName                                        State
    ----------------------------------------------  -------
    tailspin-space-game-web-4692.azurewebsites.net  Running
    
  6. 次の az acr list コマンドを実行して、Azure Container Registry インスタンスのログイン サーバーを一覧表示します。 このサーバー名は、後でパイプライン変数を作成するときに必要になります。

    az acr list \
      --resource-group $rgName \
      --query "[].{loginServer: loginServer}" \
      --output table
    

    ログイン サーバーをメモします。 後でパイプラインを構成するときに必要になります。 次に例を示します。

    LoginServer
    ---------------------------------
    tailspinspacegame4692.azurecr.io    
    

重要

このモジュールの [Azure DevOps 環境のクリーンアップ ] ページには、重要なクリーンアップ手順が含まれています。 クリーンアップは、このモジュールを完了した後に Azure リソースに対して課金されないようにするのに役立ちます。 このモジュールを最後まで実行しなかったとしても、クリーンアップ手順は必ず行ってください。

Azure Pipelines でパイプライン変数を作成する

Azure Pipelines を使用したリリース パイプラインの作成で、App Service に Web アプリの名前を格納する変数をパイプラインに追加しました。 ここで同じことを行います。 さらに、Azure Container Registry の名前を追加します。

これらの名前はパイプライン構成でハードコーディングできますが、変数として定義すると、構成の再利用性が高くなります。 さらに、インスタンス名が変更された場合は、構成を変更せずに変数を更新し、パイプラインをトリガーできます。

変数を追加するには:

  1. Azure DevOps で、 Space Game - Web - Docker プロジェクトに移動します。

  2. [パイプライン][ライブラリ] を選択します。

    [ライブラリ] メニュー オプションが表示されている Azure Pipelines のスクリーンショット。

  3. [ + 変数] グループを選択します

  4. [ プロパティ] で、変数グループ名として 「Release 」と入力します。

  5. [ 変数] で 、[ + 追加] を選択します。

  6. 変数の名前として、「 WebAppName」と入力します。 値には、上記で作成した App Service インスタンスの名前 ( tailspin-space-game-web-4692 など) を入力します。

    重要

    ホスト名ではなく、App Service インスタンスの名前を設定します。 この例では、tailspin-space-game-web-4692.azurewebsites.net ではなく tailspin-space-game-web-4692 を入力します。

  7. このプロセスを繰り返して、Azure Container Registry ログイン サーバーの値 (tailspinspacegame4692.azurecr.io など) を使用して RegistryName という名前の別の変数を追加します。

  8. [ パイプラインのアクセス許可] を選択し、 + 記号を選択してパイプラインを追加します。 mslearn-tailspin-spacegame-web-docker を選択して、変数グループにアクセスするためのアクセス許可をパイプラインに付与します。

  9. ページの上部にある [保存] を選択して変数を保存します。 変数グループは次のようになります。

    変数グループを示す Azure Pipeline のスクリーンショット。グループには 2 つの変数が含まれています。

必要なサービス接続を作成する

ここでは、Azure Pipelines が Azure サブスクリプションにアクセスできるようにするサービス接続を作成します。 Azure Pipelines では、このサービス接続を使用して、Web サイトを App Service にデプロイします。 前のモジュールで同様のサービス接続を作成しました。 また、Docker レジストリ接続を作成して、コンテナーを Azure Container Registry に発行します。

重要

同じ Microsoft アカウントで Azure portal と Azure DevOps の両方にサインインしていることを確認します。

  1. Azure DevOps で、 Space Game - Web - Docker プロジェクトに移動します。

  2. ページの下部にある [ プロジェクトの設定] を選択します。

  3. [パイプライン] で、[サービス接続] を選択します。

  4. [ 新しいサービス接続] を選択し、[ Azure Resource Manager] を選択してから、[ 次へ] を選択します。

  5. ページの上部付近に、 サービス プリンシパル (自動) があります次へ を選択します。

  6. 次のフィールドに入力してください。

    フィールド 価値
    スコープのレベル サブスクリプション
    サブスクリプション お使いの Azure サブスクリプション
    リソース グループ テイルスピン・スペース・ゲーム・RG
    サービス接続名 Resource Manager - Tailspin - Space Game

    プロセス中に、Microsoft アカウントにサインインするように求められる場合があります。

  7. [すべてのパイプラインにアクセス許可を付与する] が選択されていることを確認します。

  8. [保存] を選択します

    Azure DevOps は、テスト接続を実行して、Azure サブスクリプションに接続できることを確認します。 Azure DevOps が接続できない場合は、2 回目にサインインする機会があります。

  9. [ 新しいサービス接続] を選択し、[ Docker レジストリ] を選択してから、[ 次へ] を選択します。

  10. ページの上部にある [Azure Container Registry] を選択します。

  11. 次のフィールドに入力してください。

    フィールド 価値
    サブスクリプション お使いの Azure サブスクリプション
    Azure コンテナー レジストリ 前に作成したファイルを選択します
    サービス接続名 コンテナー レジストリ接続
  12. [すべてのパイプラインにアクセス許可を付与する] が選択されていることを確認します。

  13. 完了したら 、[保存] を選択します