Linux 仮想マシンにデプロイする

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

1 つの環境仮想マシン リソースを使用するマルチ仮想マシンのデプロイ用に Azure DevOps パイプラインを設定する方法について説明します。

Web 展開パッケージを発行するアプリについては、この記事の手順を使用します。

前提条件

サンプル コードを取得する

デプロイするアプリが GitHub に既にある場合は、そのコード用のパイプラインを作成できます。

新しいユーザーの場合は、GitHub でこのリポジトリをフォークします。

https://github.com/MicrosoftDocs/pipelines-javascript

仮想マシンを使用して環境を作成する

仮想マシンを環境内のリソースとして追加し、マルチ VM デプロイの対象にすることができます。 デプロイ履歴ビューでは、VM からコミットまで追跡できます。

  1. Azure DevOps 組織にサインインし、プロジェクトに移動します。

  2. [パイプライン] ページに移動し、[環境]>[環境の作成] の順に選択します。

  3. 環境の [名前] (必須) と、 [説明] を指定します。

  4. 環境に追加する [リソース] として [仮想マシン] を選択し、[次へ] を選択します。

  5. [オペレーティング システム] で [Linux] を選択し、登録スクリプトをコピーします。

  6. 環境に登録されている各ターゲット VM で登録スクリプトを実行します。

    注意

    • サインインしているユーザーの個人用アクセス トークン (PAT) は、スクリプトに事前に挿入され、3 時間後に期限切れになります。
    • お使いの VM でエージェントが既に実行されている場合は、環境に登録するために一意の名前を指定します。
  7. VM が登録されると、[リソース] の下に環境リソースとして表示されるようになります。

    VM 作成のスクリーンショット。

  8. VM をさらに追加するには、もう一度スクリプトをコピーします。 [リソースの追加] を選択し、[仮想マシン] を選択します。 このスクリプトは、同じ環境に追加するすべての VM で同じです。

    各マシンは Azure Pipelines と対話して、アプリのデプロイを調整します。

    VM リソース ビューのスクリーンショット。

  9. VM のタグを追加または削除できます。 [リソース] の各 VM リソースの末尾にあるドットを選択します。

    タグは、環境がデプロイ ジョブで使用されている場合に、デプロイを特定の VM に制限します。 各タグで使用できる文字数は最大で 256 文字です。 作成できるタグの数に制限はありません。

    タグ ビューのスクリーンショット。


CI ビルド パイプラインを定義する

Web アプリを発行する CI ビルド パイプラインが必要です。 Ubuntu サーバーのローカルで実行できるデプロイ スクリプトも必要です。 使用するランタイムに基づいて、CI ビルド パイプラインを設定します。

  1. Azure DevOps 組織にサインインし、プロジェクトに移動します。

  2. プロジェクトで [パイプライン] ページに移動し、アクションを選択して新しいパイプラインを作成します。

  3. ソース コードの場所として [GitHub] を選択します。

    サインインするために GitHub にリダイレクトされる場合があります。 その場合は、GitHub の資格情報を入力します。

  4. リポジトリの一覧が表示されたら、使用するサンプル アプリのリポジトリを選択します。

  5. Azure Pipelines によってリポジトリが分析され、適切なパイプライン テンプレートが推奨されます。

    starter テンプレートを選択し、npm で一般的な Node.js プロジェクトをビルドする次の YAML スニペットをコピーします。 この YAML は、後続の手順で追加します。

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    stages:
    - stage: Build
      displayName: Build stage
      jobs:  
      - job: Build
        displayName: Build
        steps:
        - task: UseNode@1
          inputs:
            version: '16.x'
          displayName: 'Install Node.js'
        - script: |
            npm install
            npm run build --if-present
            npm run test --if-present
          displayName: 'npm install, build and test'
        - task: ArchiveFiles@2
          displayName: 'Archive files'
          inputs:
            rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
            includeRootFolder: false
            archiveType: zip
            archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
            replaceExistingArchive: true
        - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
          artifact: drop
    

    詳細については、gulp での Node.js アプリのビルドに関するページでビルドを作成するための手順を確認してください。

    • [保存して実行]>[メイン ブランチに直接コミット]>[保存して実行] の順に選択します。

      新しい実行が開始されます。 実行が完了するのを待ちます。

Linux VM にデプロイするための CD 手順を定義する

  1. 前の手順で作成した環境と VM リソースを参照するように、パイプラインを編集し、デプロイ ジョブを追加します。 仮想マシンのタグを参照するように tags を更新します。

    jobs:  
    - deployment: VMDeploy
      displayName: Web deploy
      environment:
        name:  <environment name>
        resourceType: VirtualMachine
        tags: web1 # Update or remove value to match your tag
      strategy:
    

environment キーワードとデプロイ ジョブの対象となるリソースの詳細については、YAML スキーマに関するページを参照してください。

  1. 環境内の各 VM に対して定義したタグを指定することにより、デプロイを受け取る特定の VM セットを環境から選択できます。

    詳細については、デプロイ ジョブの完全な YAML スキーマに関するページを参照してください。

  2. runOnce または rolling をデプロイ戦略として指定します。

    runOnce は最も単純なデプロイ戦略です。 すべてのライフサイクル フック (つまりpreDeploydeployrouteTraffic、および postRouteTraffic) は、1 回実行されます。 その後、on:success または on:failure が実行されます。

    runOnce のデプロイ ジョブに関する次の例を参照してください。

    jobs:
    - deployment: VMDeploy
      displayName: Web deploy
      environment:
        name: <environment name>
        resourceType: VirtualMachine
      strategy:
        runOnce:
          deploy:
            steps:
            - script: echo my first deployment
    
  3. Java パイプラインを使用したローリング戦略については、次の YAML スニペットの例を参照してください。 各イテレーションで取得されるターゲットを最大 5 つ更新できます。 maxParallel によって、同時にデプロイできるターゲットの数が決まります。 選択するときは、デプロイされているターゲットを除いて、常に使用可能な状態にしておく必要があるターゲットの絶対数または割合を考慮します。 それはまた、デプロイの間に成功と失敗の条件を判断するためにも使用されます。

    jobs: 
    - deployment: VMDeploy
      displayName: web
      environment:
        name: <environment name>
        resourceType: VirtualMachine
      strategy:
          rolling:
            maxParallel: 2  #for percentages, mention as x%
            preDeploy:
              steps:
              - download: current
                artifact: drop
              - script: echo initialize, cleanup, backup, install certs
            deploy:
              steps:
              - task: Bash@3
                inputs:
                  targetType: 'inline'
                  script: |
                    # Modify deployment script based on the app type
                    echo "Starting deployment script run"
                    sudo java -jar '$(Pipeline.Workspace)/drop/**/target/*.jar'
            routeTraffic:
              steps:
              - script: echo routing traffic
            postRouteTraffic:
              steps:
              - script: echo health check post-route traffic
            on:
              failure:
                steps:
                - script: echo Restore from backup! This is on failure
              success:
                steps:
                - script: echo Notify! This is on success
    

    このジョブを実行するたびに、VM を作成して登録した <environment name> 環境に対してデプロイ履歴が記録されます。

環境内のパイプラインを追跡できるビュー

[デプロイ] ビューでは、コミットと作業項目の完全な追跡、および環境ごとのクロスパイプライン デプロイ履歴が提供されます。

[デプロイ] ビューのスクリーンショット。

次のステップ