0% Complete

概要

CI/CDとは

CI/CDは、継続的インテグレーション/継続的デリバリー (または継続的デプロイメント) を略した言葉で、新しいコードのインテグレーションを頻繁に行うカルチャーやプロセスを表しています。デプロイメントの頻度が増えていくのに伴って、従来型のソフトウェア開発やデリバリーの方法は急速に廃れつつあります。 

DevOps以前は、ほとんどの企業がソフトウェアの導入や出荷を、月ごと、四半期ごと、半年ごと、場合によっては1年ごとのリリースで行っていました。DevOpsの時代には、毎週、毎日、場合によっては1日に複数回デプロイメントを行うことが当たり前になりました (アジャイル時代とも呼ばれます)。CI/CDは、開発者にとって新しいコードのインテグレーションを頻繁に行うことに伴う問題を解消するためのソリューションになっています。

このレッスンを受講する前に 🖊

以下のレッスンを修了していると、ここでの学習効果が一層高まります。

学習目標 🧠

このレッスンを修了すると、以下の知識や技能が身につきます。

  • CI/CDパイプライン内での自動テストの重要性を理解する
  • mablで利用できるさまざまなCI/CDインテグレーションオプションについて理解する
  • CI/CDパイプラインでの設定および使用方法

これが重要である理由❓

  • テストを自動化することで継続的デリバリーが可能になり、ソフトウェアの品質とセキュリティを確保し、本番稼働させるコードの収益性を高めることができます。
  • CI/CDパイプラインにより、新しい製品機能の市場投入を大幅に迅速化し、顧客満足度を向上させ、開発への負担を軽減できます。
  • CI/CDパイプラインによる全体的なデリバリー速度の大幅な向上によって、組織の競争力が向上します。
  • 自動化によってチームメンバーが本来の業務に専念できるようになるため、優れた最終製品を生み出すことができます。

使用方法💻

デプロイメント時のテスト 

デプロイメントプロセスにmablテストを統合すると、CI/CDパイプライン内でコードがホスティング環境にデプロイされた時点ですぐに複数のブラウザーでエンドツーエンドのエクスペリエンスをテストできます。

すべてのmablテストは複数の環境に対して実行できるようになっているため、プル/マージリクエストをテストするための一時的なプレビュー環境、永続的なステージング環境、さらには本番環境など、複数の環境で同じテストを簡単に実行できます。

mablをCI/CDパイプラインに統合して、デプロイ時にテストを実行するには、使いやすい順に以下のいずれかのオプションを使用します。

  • 既存のCI/CDの統合: GitHub Actions、Bamboo、Jenkinsなどの統合が可能です。
  • mabl CLI: Node.jsパッケージのインストールと実行が可能なあらゆるCIツールと統合できます。
  • mabl API: mabl CLIを使用できない場合や、より詳細な制御が必要なCIツールと統合できます。

既存のCI/CDの統合

デプロイ時にテストを実行する場合、mablでは、ネイティブのプラグインや便利なcurlコマンドビルダーなどのさまざまな方法を利用して、自動化されたエンドツーエンドのテストを既存のCI/CDパイプラインに統合できます。

注: 以下のインテグレーションを使用する場合は、トリガーとしてデプロイメントイベントを使用するようにプランを設定する必要があります。

Jenkinsインテグレーションプラグイン

mablのJenkinsインテグレーションプラグインを使用すると、特定の環境またはアプリケーションプランを自動的にトリガーし、既存のJenkinsセットアップでビルドステージとして実行できます。詳細はこちらをご覧ください。

Bambooインテグレーションプラグイン

mablのBambooインテグレーションプラグインを使用すると、特定の環境またはアプリケーションプランを自動的にトリガーし、現在のBambooパイプラインのビルドステージとして実行できます。詳細はこちらをご覧ください。

Microsoft Azure DevOpsインテグレーション (VSTS)

mablでは、Azure DevOps内のビルドパイプラインとリリースパイプラインにmablテストを直接統合できます。Azure DevOps内でmablパイプラインタスクを使用すると、特定の環境またはアプリケーションプランを自動的にトリガーし、ビルドタスクとして実行できます。詳細はこちらをご覧ください。

GitHubインテグレーション

mablは、mabl GitHubアプリケーションとmabl Actionを介してGitHubと統合されます。こうすることで、GitHub Actions 2.0、GitHub Issueの自動作成、GitHubのデータフィルタリングをmabl内でフルに活用できます。詳細はこちらをご覧ください。

GitLabインテグレーション

mablでは、GitLabのパイプラインイメージを利用して、テスト実行をトリガーするだけでなく、テスト結果のサマリーの確認やマージリクエストでのテスト結果のレビューを行うことができます。詳細はこちらをご覧ください。

Octopus Deployインテグレーション

Octopus DeployプロセスでRun mabl testsステップテンプレートを利用して、アプリケーション、環境、またはプランのラベル設定に基づいてプランの実行を自動的にトリガーできます。詳細はこちらをご覧ください。

CircleCIインテグレーション

CircleCIパイプラインにtrigger-tests Orbを追加し、幅広いオプションに基づいてプランの実行を自動的にトリガーできます。詳細はこちらをご覧ください。

その他のインテグレーション

組み込みのcurlコマンドビルダーを使用して、他のほとんどのCI/CDソリューションとmablを容易に統合できます。この方法での統合の詳細はこちらをご覧ください。

mabl CLI  

CI/CDパイプライン内にmabl CLIを統合する場合は、mabl CLIコマンドを使って直接実行するか、mabl-cliノードパッケージをプロジェクトの依存関係として使用し、Jestなどのテストフレームワークを使ってmablテストを定義することができます。

注:  

  • CLIのインストールの基本事項と使用方法を説明したmabl自動テストCLIのレッスンの内容を確認しておいてください。
  • mabl Runnerを入手しておいてください。mabl Runnerは、mabl Early Access Programで一部のお客様にご提供しています。

コマンドラインでのテストの実行

  • mabl CLIを使用すると、mabl Runnerを使ってCI/CD環境内でテストを実行することができます。
  • 以下は、CLIを使用してmablテストを実行する場合のCI構成の例です。

# install the CLI

npm install @mablhq/mabl-cli

# authenticate with Command Line Interface API key

mabl auth activate-key KEY_VALUE

# install wait-on to wait for the app to start

npm install wait-on

# start the web app AND wait until it loads

npm start & wait-on http://localhost:3000

# run a single mabl test

mabl tests run --id TEST_ID --environment-id ENVIRONMENT_ID --credentials CREDS_ID --headless

# run a set of tests by a label

mabl tests run --labels COOL_FEATURE_ONE --environment-id ENV_ID --headless

コードでのテストの実行

  • mabl-cliノードパッケージを使用して、エンドツーエンドのテストを好みのテストフレームワークでローカルに実行することができます。このmabl-cliパッケージでは、MablTestRunnerがインポート可能なオブジェクトとして公開され、これを使ってJestなどのJavaScriptテストフレームワーク内からmablテストを起動して実行することができます。
  • mablのテストをコードで定義することで、package.jsonファイルに必要なテストを実行するnpmコマンドを作成することができます。テストを実行するには、他のテストと一緒にバンドルするか、package.jsonファイルにテスト用の特定のスクリプトを作成します。
  1. mabl-cliをプロジェクトのdev依存関係としてインストールします。
    npm install --save-dev @mablhq/mabl-cli
  2. 次のコマンドとCLIキーを使用して認証します。
    mabl auth activate-key KEY_VALUE
  3. 以下のスクリプトをpackage.jsonファイルに追加すると、Jestを使ってmablテストファイルが呼び出されます。

“scripts”: {

    ...

    "mabl:test": "jest mablTests.test.ts",

    ….

}

import {createMablTestRunner, TestRunConfig} from '@mablhq/mabl-cli';

jest.setTimeout(180000);

const CICD_BRANCH_NAME = process.env.CI_BRANCH;

const runConfig: TestRunConfig = {

  credentialsId: 'CREDS_ID',

  environmentId: 'ENVIRONMENT_ID',

  workspaceId: 'WORKSPACE_ID',

  url: 'http://localhost:3000',

  branchName: CICD_BRANCH_NAME ?? 'master',

  headless: true, // toggle to watch tests locally

};

describe('Super important mabl tests', () => {

  it('This needs to always work', async () => {

    const mablTestRunner = await createMablTestRunner({

      testId: 'TEST_ID',

      ...runConfig,

    });

    const result = await mablTestRunner.run();

    expect(result.success).toEqual(true);

  });

});

  1. 次に、CI環境内で次のコマンドを実行して、mablテストを開始できます。これは、開発者がmabl CLIを使ってローカルでmablテストを実行するための便利なコマンドでもあります。

npm run mabl:test

注: 必要に応じて、JavaScriptテストフレームワークページで詳細をご確認ください。

まとめ 🗒

復習

ここで学習した内容

  • CI/CDパイプライン内での自動テストの重要性
  • mablをCI/CDパイプラインに統合する各種インテグレーションオプション
  • CI/CDパイプライン内で自動テストをトリガーする方法