Anker PowerPort III 3-Port 65W Pod (USB PD 充電器 USB-A & USB-C 3ポート)【独自技術Anker GaN II採用 / PD対応 / PPS規格対応 / PSE技術基準適合 / 折りたたみ式プラグ】MacBook PD対応Windows PC iPad iPhone Galaxy Android スマートフォン ノートPC 各種 その他機器対応(ブラック)
¥5,990 (2025年5月3日 13:16 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)KTC MegPad 32型 4K UHD 移動式スマートモニター ( Android 13搭載 Google認証 10点タッチ Wi-Fi 6&Bluetooth 5.2 )(8GB RAM+128GB 大容量/リモコン付き/90w高速アダプター キャスター/デュアル6W*2/コードレス設計 /9500mAh内蔵バッテリー ) キッチン・リビング・寝室対応 A32Q7Pro
¥119,000 (2025年5月3日 13:16 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)
はじめに
Step CIのpluginを実装した際の覚書です。
Step CIでリグレッションテストを実装した際に、テストケース内で直接DBを操作する必要がありました。
しかし、Step CIではDB操作がサポートされていなかったためDB操作用のpluginを自作することにしました。
フォルダ構成(抜粋)
.
├── db-handler/
│ ├── index.js
│ └── package.json
├── stepci.js ・・・Step CIの実行ファイル
├── package.json
└── workflow.yaml
実装例
処理内容は公式ドキュメントにあるボイラープレートをベースに、要件に応じて必要なロジックを実装します。
db-handler/index.js
import * as mysql from 'mysql2/promise';
const { checkResult } = require('@stepci/runner/dist/matcher');
module.exports.default = async (input) => {
const connection = await mysql.createConnection({
host: HOST,
database: DATABASE,
user: USER,
password: PASSWORD,
});
let stepResult = {}; // Step CIが当該stepの実行結果として受け取るオブジェクト
stepResult.request = input.query;
try {
const [result] = await connection.execute(input.query);
stepResult.response = result;
// 実行結果のアサーション
if (input.check) {
stepResult.checks = {};
if (input.check.status) {
const is_success = result[input.action == 'update' ? 'changedRows' : 'affectedRows'] >= 1;
const given = is_success ? 'success' : 'failure';
stepResult.checks.status = checkResult(given, input.check.status);
}
}
return stepResult;
} catch (error) {
stepResult.response = error;
stepResult.checks = {
status: {
expected: input?.check?.status ?? null,
given: 'ERROR',
passed: false,
},
};
return stepResult;
}
};
テストケース内での使用
workflow.yaml
- name: テストデータ作成
plugin:
id: db-hundler
action: insert
query:
INSERT INTO users (name, email) VALUES ('test_user', 'test@example.com')
check:
status: inserted
ハマったポイント
実装時にハマった点としては以下の箇所です。
CommonJSで実装する
Step CI側の実装がCommonJSであり、自作したpluginをrequireで読み込んでいるのでそれに合わせてCommonJSで実装しmodule.exportsする必要があります。
db-handler/package.json
{
"name": "db-hundler",
"type": "commonjs",
"version": "1.0.0",
"main": "index.js"
}
dependencyへの追加
実装したpluginをyaml内で使用するには、ローカルパッケージとしてdb-handler
ディレクトリをプロジェクトの package.json に依存として追加しnpm install
を実行してnode_modules
に取り込む必要があります。
package.json
{
"dependencies": {
"db-hundler": "file:./db-hundler"
}
}
yamlのplugin.id
にはdependencies
に記載したキーを指定します。
おわりに
Step CIでDB操作を可能にする自作プラグインの実装方法のメモでした。
公式でサポートされていない機能でも、プラグインを活用すれば柔軟に拡張ができるので便利です。
自動テストでは、システム固有の前処理や検証が必要になる場面も少なくありません。
プラグインを積極的に活用し、より良いCI/CDの実現を目指していきたいです。
Views: 0