チュートリアル: Jenkins と Azure DevOps Services を使用して Linux 仮想マシンにデプロイする

継続的インテグレーション (CI) と継続的デプロイ (CD) は、コードをビルド、リリース、デプロイできるパイプラインを形成します。 Azure DevOps Services には、Azure へのデプロイ用に完全に機能する CI/CD 自動化ツールの完全なセットが用意されています。 Jenkins は、CI/CD オートメーションも提供する、一般的なサードパーティの CI/CD サーバー ベースのツールです。 Azure DevOps Services と Jenkins を一緒に使用して、クラウド アプリまたはサービスを提供する方法をカスタマイズできます。

このチュートリアルでは、Jenkins を使用して Node.js Web アプリを構築します。 その後、Azure DevOps を使用してデプロイします

Linux 仮想マシン (VM) を含む デプロイ グループ に接続します。 次の方法を学びます:

  • サンプル アプリを取得します。
  • Jenkins プラグインを構成します。
  • Node.js用に Jenkins Freestyle プロジェクトを構成します。
  • Azure DevOps Services 統合用に Jenkins を構成します。
  • Jenkins サービス エンドポイントを作成します。
  • Azure 仮想マシンのデプロイ グループを作成します。
  • Azure Pipelines リリース パイプラインを作成します。
  • 手動および CI によってトリガーされるデプロイを実行します。

[前提条件]

サンプル アプリを入手する

Git リポジトリに格納されたデプロイするアプリが必要です。 このチュートリアルでは、 GitHub から入手できるこのサンプル アプリを使用することをお勧めします。 このチュートリアルには、Node.js とアプリケーションのインストールに使用されるサンプル スクリプトが含まれています。 独自のリポジトリを操作する場合は、同様のサンプルを構成する必要があります。

このアプリのフォークを作成し、このチュートリアルの後の手順で使用する場所 (URL) を書き留めます。 詳細については、「 リポジトリをフォークする」を参照してください。

注

アプリは Yeoman を通じて構築されました。 Express、bower、grunt を使用します。 また、依存関係としていくつかの npm パッケージがあります。 このサンプルには、Nginx を設定してアプリをデプロイするスクリプトも含まれています。 仮想マシン上で実行されます。 具体的には、次のスクリプトを実行します。

  1. Node、Nginx、PM2 をインストールします。
  2. Nginx と PM2 を構成します。
  3. Node アプリを起動します。

Jenkins プラグインを構成する

まず、 NodeJS と VS Team Services の継続的配置という 2 つの Jenkins プラグインを構成する必要があります。

  1. Jenkins アカウントを開き、[ Jenkins の管理] を選択します。
  2. [ Jenkins の管理 ] ページで、[ プラグインの管理] を選択します。
  3. 一覧をフィルター処理して NodeJS プラグインを見つけ、[ 再起動せずにインストール ] オプションを選択します。 NodeJS プラグインを Jenkins に追加する
  4. 一覧をフィルター処理して VS Team Services の継続的配置 プラグインを見つけ、[ 再起動せずにインストール ] オプションを選択します。
  5. Jenkins ダッシュボードに戻り、[ Jenkins の管理] を選択します。
  6. [ グローバル ツールの構成] を選択します。 NodeJS を見つけて、NodeJS インストールを選択します。
  7. [ 自動的にインストール ] オプションを選択し、[ 名前] の 値を入力します。
  8. 保存 を選択します。

Node.js 用に Jenkins Freestyle プロジェクトを構成する

  1. [ 新しい項目] を選択します。 項目名を入力します。
  2. フリースタイル プロジェクトを選択します。 [OK] を選択.
  3. [ ソース コード管理 ] タブで、 Git を選択し、リポジトリとアプリ コードを含むブランチの詳細を入力します。
    ビルドにリポジトリを追加する
  4. [ Build Triggers ]\(ビルド トリガー\) タブで[ Poll SCM ]\(SCM のポーリング\) を選択し、Git リポジトリをポーリングして変更を 3 分ごとにポーリングするスケジュール H/03 * * * * を入力します。
  5. [ ビルド環境 ] タブで、[ ノードの指定] & [npm bin/ folder PATH ] を選択し、[ NodeJS Installation]\(NodeJS インストール \) の値を選択します。 npmrc ファイルは、システムの既定値を使用するように設定したままにします。
  6. [ ビルド ] タブで [ シェルの実行 ] を選択し、コマンド npm install を入力して、すべての依存関係が確実に更新されるようにします。

Azure DevOps Services 統合用に Jenkins を構成する

注

次の手順で使用する個人用アクセス トークン (PAT) に、Azure DevOps Services の リリース (読み取り、書き込み、実行、管理) アクセス許可が含まれていることを確認します。

  1. Azure DevOps Services 組織に PAT をまだ作成していない場合は作成します。 Jenkins では、Azure DevOps Services 組織にアクセスするためにこの情報が必要です。 このセクションでは、今後の手順のトークン情報を必ず格納してください。

    トークンを生成する方法については、「 Azure DevOps Services の個人用アクセス トークンを作成する方法」を参照してください。

  2. [ ビルド後のアクション] タブで 、[ ビルド後のアクションの追加] を選択します。 [ 成果物のアーカイブ] を選択します。

  3. [アーカイブするファイル] に「**/*」と入力して、すべてのファイルを含めます。

  4. 別のアクションを作成するには、[ ビルド後のアクションの追加] を選択します。

  5. TFS/Team Services で [リリースのトリガー] を選択します。 https://{your-organization-name}.visualstudio.com など、Azure DevOps Services 組織の URI を入力します。

  6. プロジェクト名を入力します。

  7. リリース パイプラインの名前を選択します。 (このリリース パイプラインは、後で Azure DevOps Services で作成します)。

  8. Azure DevOps Services または Azure DevOps Server 環境に接続するための資格情報を選択します。

    • Azure DevOps Services を使用している場合は、 Username を空白のままにします。
    • オンプレミス バージョンの Azure DevOps Server を使用している場合は、ユーザー名とパスワードを入力します。
      ビルド後の Jenkins アクションの構成
  9. Jenkins プロジェクトを保存します。

Jenkins サービス エンドポイントを作成する

サービス エンドポイントを使用すると、Azure DevOps Services から Jenkins に接続できます。

  1. Azure DevOps Services の [サービス ] ページを開き、[ 新しいサービス エンドポイント] の一覧を開き、[ Jenkins] を選択します。 Jenkins エンドポイントを追加する
  2. 接続名を入力します。
  3. Jenkins サーバーの URL を入力し、[ 信頼されていない SSL 証明書を受け入れる ] オプションを選択します。 URL の例は http://{YourJenkinsURL}.westcentralus.cloudapp.azure.com です。
  4. Jenkins アカウントのユーザー名とパスワードを入力します。
  5. [ 接続の確認 ] を選択して、情報が正しいことを確認します。
  6. [ OK] を 選択してサービス エンドポイントを作成します。

Azure 仮想マシンのデプロイ グループを作成する

リリース パイプラインを仮想マシンにデプロイできるように、Azure DevOps Services エージェントを登録するにはデプロイ グループ が必要です。 デプロイ グループを使用すると、デプロイするターゲット マシンの論理グループを簡単に定義し、各マシンに必要なエージェントをインストールできます。

注

次の手順では、必ず前提条件をインストールし、 sudo 特権でスクリプトを実行しないでください。

  1. [ビルドとリリース] ハブの [リリース] タブを開き、[デプロイ グループ] を開き、[+ 新規] を選択します。
  2. 展開グループの名前と、省略可能な説明を入力します。 次に、[ 作成] を選択します。
  3. デプロイ ターゲット仮想マシンのオペレーティング システムを選択します。 たとえば、 Ubuntu 16.04 以降を選択します。
  4. [認証用にスクリプト内の個人用アクセス トークンを使用する] を選択します。
  5. [システムの前提条件] リンクを選択します。 オペレーティング システムの前提条件をインストールします。
  6. [ スクリプトをクリップボードにコピー] を選択してスクリプトをコピーします。
  7. デプロイ ターゲットの仮想マシンにログインし、スクリプトを実行します。 sudo 特権でスクリプトを実行しないでください。
  8. インストール後、展開グループ タグの入力を求められます。 既定値を受け入れます。
  9. Azure DevOps Services で、[デプロイ グループ] の [ターゲット] で新しく登録された仮想マシンを確認します。

Azure Pipelines リリース パイプラインを作成する

リリース パイプラインは、Azure Pipelines がアプリのデプロイに使用するプロセスを指定します。 この例では、シェル スクリプトを実行します。

Azure Pipelines でリリース パイプラインを作成するには:

  1. ビルド & リリース ハブの [リリース] タブを開き、[リリース パイプラインの作成] を選択します。
  2. 空のプロセスから開始することを選択して、空のテンプレートを選択します。
  3. [成果物] セクションで、[+ 成果物の追加] を選択し、[ソースの種類] に [Jenkins] を選択します。 Jenkins サービス エンドポイント接続を選択します。 次に、Jenkins ソース ジョブを選択し、[ 追加] を選択します。
  4. 環境 1 の横にある省略記号を選択します。 [ デプロイ グループ フェーズの追加] を選択します。
  5. デプロイ グループを選択します。
  6. +を選択して、展開グループ フェーズにタスクを追加します。
  7. シェル スクリプト タスクを選択し、[追加] を選択します。 シェル スクリプト タスクは、Node.js をインストールしてアプリを起動するために、各サーバーでスクリプトを実行するための構成を提供します。
  8. [スクリプト パス] に「$(System.DefaultWorkingDirectory)/Fabrikam-Node/deployscript.sh」と入力します。
  9. [ 詳細設定] を選択し、[ 作業ディレクトリの指定] を有効にします。
  10. 作業ディレクトリに「$(System.DefaultWorkingDirectory)/Fabrikam-Node」と入力します。
  11. リリース パイプラインの名前を、Jenkins のビルドの [ ビルド後のアクション] タブで指定した名前に編集します。 Jenkins では、ソース成果物が更新されたときにこの名前で新しいリリースをトリガーできる必要があります。
  12. [ 保存] を選択し、[ OK] を 選択してリリース パイプラインを保存します。

手動および CI によってトリガーされるデプロイを実行する

  1. [ + リリース ] を選択し、[ リリースの作成] を選択します。
  2. 強調表示されたドロップダウン リストで完了したビルドを選択し、[キュー] を選択 します。
  3. ポップアップ メッセージでリリース リンクを選択します。 たとえば、" Release Release-1 has been created" (リリース リリース 1 が作成されました) などです。
  4. [ ログ ] タブを開いて、リリース コンソールの出力を確認します。
  5. ブラウザーで、デプロイ グループに追加したいずれかのサーバーの URL を開きます。 たとえば、「 http://{your-server-ip-address}」と入力します。
  6. ソース Git リポジトリに移動し、ファイル app/views/index.jade の h1 見出しの内容を変更し、テキストを変更します。
  7. 変更をコミットします。
  8. 数分後、Azure DevOps の [リリース] ページに新しい リリース が作成されます。 リリースを開いて、デプロイが行われているのを確認します。 おめでとうございます!

Jenkins プラグインのトラブルシューティング

Jenkins プラグインでバグが発生した場合は、特定のコンポーネントについて Jenkins JIRA に問題を報告してください。

次のステップ

このチュートリアルでは、ビルド用の Jenkins とリリース用の Azure DevOps Services を使用して、Azure へのアプリのデプロイを自動化しました。 以下の方法を学習しました。

  • Jenkins でアプリをビルドします。
  • Azure DevOps Services 統合用に Jenkins を構成します。
  • Azure 仮想マシンのデプロイ グループを作成します。
  • VM を構成し、アプリをデプロイする Azure Pipeline を作成します。

ビルドとリリースの両方の手順で Azure Pipelines を使用する方法については、 これを参照してください。

VM にデプロイする YAML ベースの CI/CD パイプラインを作成する方法については、次のチュートリアルに進んでください。