次の方法で共有


環境内の Linux VM にデプロイする

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

このクイックスタートでは、environment 内の複数の Linux 仮想マシン (VM) リソースにデプロイするための Azure DevOps パイプラインを設定する方法について説明します。 これらの手順は、Web デプロイ パッケージを発行するすべてのアプリに対して使用できます。

前提条件

サンプル コードをフォークする

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

新しいユーザーである場合は、GitHub でこのリポジトリをフォークしてください。

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

Linux VM を使用して環境を作成する

vm をリソースとして environments 内に追加し マルチ VM デプロイの対象にすることができます。 環境のデプロイ履歴は、VM からコミットへの追跡可能性を提供します。

VM リソースを追加する

  1. Azure DevOps プロジェクトで、[パイプライン]>[環境] の順に選択し、[環境を作成] または [新規環境] の順に選択します。

  2. 最初の New 環境 画面で、 Name と省略可能な Description を追加します。

  3. Resourceで、仮想マシンを選択し、次へ選択

  4. 次の 新しい環境 画面で、[ システムの動作で Linux を選択します。

  5. Linux 登録スクリプトをコピーします。 このスクリプトは、環境に追加されたすべての Linux VM で同じです。

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

    Note

    サインインしているユーザーの個人用アクセス トークン (PAT) はスクリプトに事前に挿入され、3 時間後に期限切れになります。

  6. Close を選択し、新しい環境が作成されることに注意してください。

  7. 環境に登録する各ターゲット VM でコピーしたスクリプトを実行します。

    Note

    VM に既に別のエージェントが実行されている場合は、環境に登録する agent の一意の名前を指定します。

VM が登録されると、環境の Resources タブにリソースとして表示されます。

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

PAT の有効期限が切れた場合など、リソースを作成するためにスクリプトをもう一度コピーするには、環境のページで リソースの追加 を選択します。

タグを追加および管理する

タグは、デプロイのために環境内の特定の VM セットをターゲットにする方法です。 使用できるタグの数に制限はありません。 タグはそれぞれ 256 文字に制限されています。

対話型登録スクリプトで、または UI を使用して VM のタグを追加したり、タグを削除したりできます。その場合は、VM リソースに対して その他のアクション を選択します。 このクイック スタートでは、環境内の各 VM に異なるタグを割り当てます。

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

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

Web アプリを発行する継続的インテグレーション (CI) ビルド パイプラインと、Linux サーバー上でローカルに実行するデプロイ スクリプトが必要です。 使用するランタイムに基づいて CI ビルド パイプラインを設定します。

重要

GitHub の手順中に、GitHub サービス接続の作成を求められる、サインインするために Github にリダイレクトされる、Azure Pipeline をインストールするように求められる場合があります。 画面上の指示に従って、プロセスを完了します。 詳細については、「Github リポジトリへのアクセス」を参照してください。

  1. Azure DevOps プロジェクトで、 Pipelines>Create Pipeline を選択し、ソース コードの場所として GitHub を選択します。
  2. リポジトリの選択画面で、フォークしたサンプル リポジトリを選択します。
  3. [パイプラインの構成] 画面で、[スタート パイプライン] を選択します。 Azure Pipelines では、パイプラインに対して azure-pipelines.yml という YAML ファイルが生成されます。
  4. 保存して実行の横にあるドロップダウン キャレットを選択し、保存を選択し、もう一度保存を選択します。 このファイルは、フォークされた GitHub リポジトリに保存されます。

コードを編集する

Edit を選択し、azure-pipelines.yml ファイルの内容を次のコードに置き換えます。 この YAML には、今後の手順で追加します。

次のコードは、npm を使用してNode.js プロジェクトをビルドします。

    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 アプリをビルドする」の手順を確認してください。

パイプラインを実行する

Validate と保存を選択し、保存を選択し、Run を選択して、もう一度 Run を選択します。

パイプラインの実行後、ジョブが正常に実行されたことと、公開された成果物が表示されることを確認します。

Linux VM へのデプロイ

  1. パイプラインを編集して、次の デプロイ ジョブを追加します<environment name>は、前に作成した環境の名前に置き換えます。 各 VM に対して定義した <VM tag> を指定して、環境から特定の VM を選択してデプロイを受け取ります。

    jobs:  
    - deployment: VMDeploy
      displayName: Web deploy
      environment:
        name:  <environment name>
        resourceType: VirtualMachine
        tags: <VM tag> # Update value for VMs to deploy to
      strategy:
    

    詳細については、完全な jobs.deployment 定義を参照してください。

    environment キーワードとデプロイ ジョブの対象となるリソースの詳細については、jobs.deployment.environment 定義を参照してください。

  2. 展開strategyとしてrunOnceまたはrollingを指定します。

    • runOnce は最も単純なデプロイ戦略です。 preDeploy deployrouteTraffic、およびpostRouteTrafficライフサイクル フックはそれぞれ 1 回実行されます。 その後、 on: success または on: failure が実行されます。

      次のコードは、 runOnceのデプロイ ジョブを示しています。

      jobs:
      - deployment: VMDeploy
        displayName: Web deploy
        environment:
          name: <environment name>
          resourceType: VirtualMachine
          tags: <VM tag>
        strategy:
          runOnce:
            deploy:
              steps:
              - script: echo my first deployment
      
    • 次のコードは、Java パイプラインを使用した rolling デプロイ戦略の YAML スニペットを示しています。 各イテレーションで最大 5 つのターゲットを更新できます。 maxParallel パラメーターは、並列にデプロイできるターゲットの数を指定します。

      maxParallel選択では、デプロイ先のターゲットを除き、いつでも使用可能な状態を維持する必要があるターゲットの絶対数または割合が考慮され、デプロイ中の成功と失敗の条件が決定されます。

      jobs: 
      - deployment: VMDeploy
        displayName: web
        environment:
          name: <environment name>
          resourceType: VirtualMachine
          tags: <VM tag>
        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 を作成して登録した環境に対してデプロイ履歴が記録されます。

環境内のパイプラインの追跡可能性にアクセスする

環境 展開 ビューでは、コミットと作業項目の完全な追跡可能性と、環境のクロスパイプラインデプロイ履歴が提供されます。

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