ソフトウェア開発ライフサイクルデータ``テンプレート
ServiceNow DevOpsソフトウェア開発ライフサイクルデータ``テンプレート
- 収集を推奨する項目
- 追跡すべき主要アクティビティ
- ServiceNow DevOps向けの抽出ガイダンス
ソフトウェア開発ライフサイクル``アトリビュート
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ名 ActivityName | 発生した特定の開発`ライフサイクル``イベント`の名前(「Development Started」や「Code Review Performed」など)。 | ||
| 説明 この これらの その重要性 プロセス 取得元 これは通常、 例 開発開始コードコミット済み`QA` `テスト`完了本番環境へデプロイ | |||
| 開始時刻 EventTime | 特定の活動またはイベントが発生した日時を正確に示すタイムスタンプ。 | ||
| 説明 この
その重要性 この 取得元 通常、監査 例 2023-10-26T10:00:00Z2023-10-27T14:35:10Z2023-11-01T09:15:00Z | |||
| 開発項目 DevelopmentItem | `機能`、`バグ`、または`タスク`など、開発`ライフサイクル`を通じて進行する単一の作業単位のユニークな`識別子`。 | ||
| 説明 開発
その重要性 これは、関連するすべての開発 取得元 この 例 STRY0010015BUG0034092TASK0050118 | |||
| ソースシステム SourceSystem | データが抽出されたシステムを特定します。この場合はServiceNow DevOpsです。 | ||
| 説明 この 静的に見えるかもしれませんが、ソース その重要性 データのトレーサビリティを確保し、特に複数の開発ツールからデータを統合する場合に、データ整合性を維持するために不可欠です。 取得元 これは、データ抽出および変換プロセス中に加えられるべき静的な値です。 例 `ServiceNow DevOps` | |||
| 最終データ更新 LastDataUpdate | この`イベントログ`の`データ`がソース`システム`から最後に更新された日時を示す`タイムスタンプ`。 | ||
| 説明 この この その重要性
取得元 この 例 2023-11-15T08:00:00Z | |||
| 優先度 DevelopmentItemPriority | 開発`アイテム`に割り当てられた優先度レベル(「High」、「Medium」、「Low」など)。 | ||
| 説明 この
その重要性 異なる優先度レベルのプロセスをフィルタリングおよび比較できるため、高優先度項目がより迅速かつ効率的に処理されているかを確認するのに役立ちます。 取得元 これは 例 1 - Critical2 - High3 - Moderate4 - Low | |||
| 影響を受ける`モジュール`/`コンポーネント` ModuleComponentAffected | 開発`アイテム`が関連する特定の`ソフトウェア``モジュール`、`アプリケーション`、または`コンポーネント`。 | ||
| 説明 この
その重要性 分析をアプリケーションまたはコンポーネントでセグメント化できるため、システムの特定の箇所に特有のボトルネックや品質問題を特定するのに役立ちます。 取得元 これは多くの場合、カスタム 例 請求サービス`ユーザー`認証`UI`レポーティング`データベース`APIゲートウェイ | |||
| 手戻り IsRework | このアクティビティが、テスト後に開発に戻るなどの手戻りループの一部である場合にtrueとなるブール値フラグです。 | ||
| 説明 これは、プロセスが以前の この その重要性 この 取得元 この 例 truefalse | |||
| 担当グループ AssignmentGroup | `アクティビティ`時に開発`アイテム`を担当していた`チーム`または`グループ`。 | ||
| 説明 この 割り当て その重要性 どの 取得元 この情報は、「assignment_group」 例 プラットフォームエンジニアリングモバイル`アプリ`チーム品質保証DevOps | |||
| 担当開発者 AssignedDeveloper | `アクティビティ`時に開発`アイテム`に割り当てられた開発者または`ユーザー`の名前または`ID`。 | ||
| 説明 この この その重要性 これは、ワークロード分散、引き渡し効率、および 取得元 この情報は通常、 例 David Millerアナ・ウィリアムズジェームス・ブラウン | |||
| 開発項目サイクルタイム DevelopmentItemCycleTime | 開発`アイテム`の作成から最終的なクローズまたはデプロイメントまでの総経過時間。 | ||
| 説明 この これは その重要性 作業 取得元 これはソース 例 15日4時間3 days 12 hours32日8時間 | |||
| 開発項目ステータス DevelopmentItemState | `イベント`発生時の開発`アイテム`の`ステータス`または`ステート`(「Open」、「In Progress」、または「Closed」など)。 | ||
| 説明 この
その重要性 作業 取得元 これは 例 保留中進行中の作業`テスト`準備完了完了でクローズ済み | |||
| 開発項目タイプ DevelopmentItemType | 作業`アイテム`の分類(「Feature」、「Bug」、「Technical Debt」、または「Task」など)。 | ||
| 説明 この 作業 その重要性 機能やバグのように異なる種類の作業を区別し、それぞれ異なるプロセスパス、優先度、および想定される期間を持つ可能性があります。 取得元 これは、レコードのソース 例 機能バグタスクスパイク | |||
| コミットID CommitId | 開発作業に関連付けられたソースコード`コミット`のユニークな`識別子`。 | ||
| 説明 この
その重要性 プロセス 取得元 これは、 例 a1b2c3d4e5f6f0e9d8c7b6a59a8b7c6d5e4f | |||
| デプロイ状況 DeploymentStatus | デプロイ活動の結果を示し、通常は「成功」または「失敗」です。 | ||
| 説明 この この その重要性 デプロイ活動の成功を直接測定し、これはデプロイ失敗率の計算とリリース安定性の分析にとって極めて重要です。 取得元 この 例 成功失敗警告付きで完了 | |||
| 手戻り理由 ReworkReason | 開発項目がテスト後に手戻りを必要とした理由の分類または説明です。 | ||
| 説明
この情報は、「Rework and Rejection Flow Analysis」 その重要性 手戻りが発生する理由に関する定性的な 取得元 これは、 例 要件誤解釈`リグレッションバグ`パフォーマンステスト失敗`UI/UX`問題 | |||
| 終了日時 EventEndTime | `アクティビティ`が完了した正確な`タイムスタンプ`です。瞬間的な`イベント`の場合、これは`開始時間`と同じです。 | ||
| 説明 この
その重要性 活動処理時間を正確に計算できるため、作業時間と待機時間の違いを区別するのに役立ちます。 取得元 これは派生させる必要がある場合があります。次の 例 2023-10-26T18:05:00Z2023-10-28T11:20:15Z2023-11-02T10:00:00Z | |||
| 計画されたリリース`バージョン` PlannedReleaseVersion | 開発`アイテム`がデリバリーされる予定の`ターゲット``ソフトウェア`リリースまたは`バージョン`。 | ||
| 説明 この
その重要性 開発作業を特定のリリースと関連付け、スケジュール順守の分析や、プロセス遅延がリリーススケジュールに与える影響の分析を可能にします。 取得元 この情報は通常、「release」または「planned_release」 例 v3.4.12024年第1四半期リリース`プロジェクト` `フェニックス` `ゴーライブ` | |||
ソフトウェア開発ライフサイクル``アクティビティ
| アクティビティ | 説明 | ||
|---|---|---|---|
| `QA` `テスト`完了 | 品質保証`チーム`が開発`アイテム`の`テスト``アクティビティ`を正常に完了したことを示します。これは通常、`アイテム`の`ステート`が`テスト``フェーズ`から「Ready for UAT」または「Done」のような`ステータス`に遷移したときに推測されます。 | ||
| その重要性 この 取得元 テストステータス(例:「In QA」)からテスト後ステータス(例:「Ready for UAT」または「Resolved」)への状態変更の 取得 「テスト中」から後続のステータスへの変更のタイムスタンプに基づきます。 イベントタイプ inferred | |||
| `UAT`承認済み | ビジネスステークホルダーがユーザー受け入れテスト後に開発項目を正式に承認したことを示します。これは、「UAT中」から「リリース準備完了」または「承認済み」への移行など、ステータス変更から推論される重要なマイルストーンです。 | ||
| その重要性 これは、 取得元 UATの成功裏の完了を示す開発項目レコードのステータス遷移から推論されます。これは項目のアクティビティ履歴に記録されます。 取得 「UAT」から承認済みまたはリリース準備完了ステータスへの変更から推論されます。 イベントタイプ inferred | |||
| コードレビュー実施済み | この`アクティビティ`は、通常`プルリクエスト`または`マージリクエスト`に関連する`ピアコードレビュー`の完了を示します。この`イベント`は、`DevOps`統合を通じて明示的に`キャプチャ`するか、関連レコードの`ステータス`変更から推測できます。 | ||
| その重要性 これは重要な品質 取得元 ServiceNowのGit統合におけるPull Requestレコードの「Merged」または「Completed」イベントからキャプチャされるか、開発項目のステータスが「Code Review Complete」に変更されたことから推論されます。 取得 作業 イベントタイプ explicit | |||
| デプロイ失敗 | 開発項目を本番環境にデプロイする試みが失敗したことを示します。これは、CI/CDパイプラインが失敗を報告した際に、ServiceNow DevOpsによって明示的にキャプチャされます。 | ||
| その重要性 これは重要な失敗 取得元 Pipeline Execution 取得 本番デプロイメント イベントタイプ explicit | |||
| 本番環境へデプロイ | この`イベント`は、本番環境へのデプロイメントが正常に完了したことを示します。`CI/CD` `ツール`が正常な`パイプライン`完了を報告したときに、`ServiceNow DevOps`によって明示的に`キャプチャ`されます。 | ||
| その重要性 これは 取得元 Pipeline Execution 取得 本番デプロイメント イベントタイプ explicit | |||
| 開発開始 | この`アクティビティ`は、開発者が開発`アイテム`の`コーディング`または実装を積極的に開始する`ポイント`を示します。これは通常、`アイテム`の`ステータス`が「In Progress」、「Development」、または「Coding」に変更されたことから推測されます。 | ||
| その重要性 これは、付加価値のある構築 取得元 開発アイテムレコード(例: Story [rm_story])の「State」フィールドが「In Progress」またはそれに相当するステータスに更新された 取得 「進行中」または類似の値へのステータス変更のタイムスタンプに基づきます。 イベントタイプ inferred | |||
| 開発項目作成 | この`アクティビティ`は、`ServiceNow`内で`ストーリー`、`バグ`、`エピック`などの新しい開発`アイテム`が作成されたことを示します。この`イベント`は通常、`Story` [rm_story] `テーブル`のような関連`テーブル`に新しいレコードが挿入されたときに明示的に`キャプチャ`されます。 | ||
| その重要性 これは 取得元
取得 開発項目レコードの作成タイムスタンプからキャプチャされます。 イベントタイプ explicit | |||
| `QA` `テスト`開始 | 正式な品質保証`テスト``フェーズ`の開始を示します。これは、開発`アイテム`の`ステータス`が「In QA」、「Testing」、または「Ready for Test」のような値に変わったことから、ほとんどの場合推測されます。 | ||
| その重要性 この 取得元 開発アイテムレコード(例: Story, Defect)の「State」フィールドがQA固有のステータスに更新された 取得 「テスト中」またはそれに相当するステータスへの変更のタイムスタンプに基づきます。 イベントタイプ inferred | |||
| `UAT`開始 | ビジネス`ステークホルダー`が`機能`を検証する`ユーザー`受け入れ`テスト`の開始を表します。この`イベント`は、「UAT」、「In UAT」、または「User Acceptance Testing」への`ステータス`変更を推測することで`キャプチャ`されます。 | ||
| その重要性 この 取得元 開発項目レコードのステータス遷移から推論されます。これは、UATの明確なステータスを含む顧客のステートモデルに依存します。 取得 「UAT」ステータスへの変更から推論されます。 イベントタイプ inferred | |||
| コードコミット済み | 開発`アイテム`にリンクされた`バージョン`管理`システム``リポジトリ`への開発者によるコード`コミット`を表します。`ServiceNow DevOps`は、`Git`や`GitHub`などの統合された`SCM` `ツール`からこれらの`イベント`を明示的に`キャプチャ`します。 | ||
| その重要性
取得元 統合されたソースコード管理システムからのWebフックによってデータが入力されるServiceNow DevOps Commits 取得
イベントタイプ explicit | |||
| ビルドトリガー | この`イベント`は、`CI/CD` `パイプライン``ビルド`の開始を示し、しばしばコード`コミット`によって`トリガー`されます。`ServiceNow DevOps`はこれを`パイプライン`実行としてログに記録し、元の開発`アイテム`にリンクします。 | ||
| その重要性 この 取得元 統合された 取得 Pipeline Executionテーブルのレコードの開始時刻からキャプチャされます。 イベントタイプ explicit | |||
| リリース準備完了 | この`アクティビティ`は、開発`アイテム`がすべての品質`ゲート`を通過し、特定のリリースに`パッケージ`化されたことを示します。これは、`アイテム`がリリースレコードに関連付けられている場合、またはその`ステータス`が「Ready for Deployment」に変更された場合に推測できます。 | ||
| その重要性 このステップは、 取得元 「State」フィールドが「Ready for Release」に変更された場合、または開発アイテムレコードの「Release」フィールドが入力または更新された場合を追跡して推測されます。 取得 ステータス変更またはリリースレコードとの関連付けから推論されます。 イベントタイプ inferred | |||
| 手戻り特定済み | テスト中に問題が発見され、項目を開発に戻す必要があることを示します。このイベントは、「QA中」から「進行中」へのステータス変更など、プロセスフローの逆行を観察することによって推論されます。 | ||
| その重要性 手戻りを追跡することは、品質問題とプロセスの非効率性を理解するために不可欠です。この 取得元 「sys_audit」または「sys_history_line」テーブルの「State」フィールドの履歴を分析して推測されます。後工程のステータス(例:「Testing」)から前工程のステータス(例:「In Progress」)への変更は、手戻りを示します。 取得 逆行するステータス遷移(例:「テスト中」→「進行中」)から推論されます。 イベントタイプ inferred | |||
| 本番環境へのデプロイ開始 | この`アクティビティ`は、本番環境へのデプロイメント`パイプライン`の開始を示します。`ServiceNow DevOps`は、`CI/CD` `パイプライン`の本番`ステージ`が実行を開始したときに、これを明示的な`イベント`として`キャプチャ`します。 | ||
| その重要性 これは 取得元 本番環境に関連する 取得 パイプライン実行における本番デプロイ段階の開始時刻からキャプチャされます。 イベントタイプ explicit | |||
| 設計開始 | 開発`アイテム`の技術設計または`ソリューションアーキテクチャ`が作成されている`フェーズ`を表します。これは通常、開発`アイテム`レコードの`ステータス`または`ステート``フィールド`が「Design」または「Solutioning」のような値に変更されたことから推測されます。 | ||
| その重要性 設計フェーズの期間を分析することで、開発作業が始まる前の要件変換やソリューション計画におけるボトルネックを特定するのに役立ちます。 取得元 開発アイテムレコード(例: Story [rm_story])のステータス遷移から推測されます。「State」またはカスタムの「Stage」フィールドが設計関連の値に変更されているかを確認します。 取得 「設計中」または同様のステータスへの変更から推論されます。 イベントタイプ inferred | |||
| 開発項目キャンセル | 開発`アイテム`が完了する前に終了したことを表します。これは代替の終了`ステート`であり、通常、`アイテム`の`ステート`が「Cancelled」または「Closed Incomplete」に設定されたことから推測されます。 | ||
| その重要性 キャンセルを追跡することで、無駄な努力を特定し、 取得元 開発アイテムレコードの「State」フィールドが「Cancelled」のような終端の、完了していないステータスに更新された 取得 「キャンセル済み」または同等の終了ステータスへの変更から推論されます。 イベントタイプ inferred | |||
抽出ガイド
ステップ
- ステートモデルの理解: レポートを作成する前に、必要な活動に対応する開発項目のステートフィールド(例:Story
[rm_story]またはDefect[rm_defect]テーブル)の特定の値を文書化してください。例えば、「In Progress」というステータス値が「Development Started」活動にマッピングされる場合があります。 - レポート作成への移動: ServiceNowインスタンスにログインします。フィルターナビゲーターで、
Reports > View / Runに移動し、Create a reportボタンをクリックします。 - ステータス変更レポートの作成: ステータス駆動の活動をキャプチャするための最初のレポートを作成します。次のように設定してください。
- レポート名:
ProcessMind - State Change Events - ソースタイプ:
Table - テーブル:
Audit [sys_audit] - タイプ:
List - 列の構成:
Document key、Created on、Table name、Field name、Old value、New valueを追加します。 - フィルター:
Table nameを開発項目テーブルの1つ(例:Story)に設定し、Field nameをステートフィールド(例:State)に設定します。必要な期間のCreated onフィールドに日付フィルターを追加します。
- レポート名:
- 項目作成レポートの作成: 初期作成イベント用の新しいレポートを作成します。
- レポート名:
ProcessMind - Item Creation Events - ソースタイプ:
Table - テーブル:
Story [rm_story](または主要な開発項目テーブル) - タイプ:
List - 列の構成:
Number、Created on、Assigned to、Priority、Stateなどの必須属性の列を追加します。 - フィルター:
Created onフィールドに日付フィルターを適用します。
- レポート名:
- コードコミットレポートの作成: コミットに関連する明示的なDevOpsイベントのレポートを作成します。
- レポート名:
ProcessMind - Commit Events - ソースタイプ:
Table - テーブル:
Commit [sn_devops_commit] - タイプ:
List - 列の構成:
Work item、Commit time、Authorなどの列を追加します。 - フィルター:
Commit timeフィールドに日付フィルターを適用します。
- レポート名:
- ビルドおよびデプロイレポートの作成: 前のステップのプロセスを
Build [sn_devops_build]およびDeployment [sn_devops_deployment]テーブルについても繰り返します。これらのテーブルには、「Build Triggered」、「Deployment to Production Started」、「Deployed to Production」、「Deployment Failed」活動のレコードが含まれます。 - すべてのレポートのエクスポート: 作成した各レポートを個別に実行します。各レポートについて、コンテキストメニューアイコン(3つの点または下向きの矢印)をクリックし、
Export > CSVまたはExport > Excelを選択します。すべてのファイルを保存します。 - データの結合と変換: エクスポートしたファイルをスプレッドシートプログラムで開くか、データ準備ツールを使用します。すべてのファイルからのデータを1つのシートに手動で結合します。必要なイベントログ列(
DevelopmentItem、ActivityName、EventTimeなど)を作成し、ソース列からデータをマッピングします。例えば、監査レポートからのDocument keyとストーリーレポートからのNumberをDevelopmentItem列にマッピングします。 - アクティビティ名のマッピング: ソースデータを翻訳して
ActivityName列を作成します。ステータス変更レポートの場合、文書化されたステートモデルを使用してNew valueエントリをアクティビティ名にマッピングします(例:ステータス「Testing」を「QA Testing Started」にマッピングします)。他のレポートについては、各行に固定のアクティビティ名(例:コミットエクスポートからのすべての行は「Code Committed」となる)を割り当てます。 - 最終化と保存: すべての行に静的な値で
SourceSystemおよびLastDataUpdate列を追加します。すべてのタイムスタンプが一貫した形式であることを確認します。最終的に結合されたファイルを単一のCSVとして保存します。これにより、ProcessMindにアップロードする準備が整います。
設定
- 必須テーブル: この抽出で必要となる主要なテーブルは、推論されたイベント用の
Audit [sys_audit]、特定の開発項目テーブル(例:Story [rm_story]、Defect [rm_defect])、そして主要なServiceNow DevOpsテーブルであるCommit [sn_devops_commit]、Build [sn_devops_build]、Deployment [sn_devops_deployment]です。 - 主要フィルター: 最も重要なフィルターは日付範囲であり、
Created on、Commit time、Start timeのようなタイムスタンプフィールドで、すべてのレポートに一貫して適用する必要があります。sys_auditレポートの場合、関連するステータス変更のみにデータを限定するために、Table name(例:rm_story)とField name(例:state)でフィルターをかけることが重要です。 - 日付範囲の推奨: パフォーマンスの問題を引き起こさずに代表的なデータセットを確保するため、3〜6か月分のデータを抽出することをお勧めします。大規模なシステムの場合は、月ごとのバッチでデータを抽出することを検討してください。
- ステートモデルの定義: 組織の作業項目ステートモデルを明確に理解している必要があります。これは、
sys_auditテーブルで捕捉されたステータス値を、「QAテスト開始」や「UAT承認済み」といった対応するビジネスアクティビティに正確にマッピングするために必要です。 - 前提条件: 抽出を実行するユーザーは、レポートを作成および実行するために
report_userロールまたは同等の権限が必要です。また、上記のDevOpsおよびアプリケーション開発テーブルへの読み取りアクセスが必要です。ServiceNow DevOpsプラグインがインストールされ、SCMおよびCI/CDツールと積極的に統合されている必要があります。
a クエリ例 config
/*
This extraction method uses the ServiceNow report builder UI. The following sections describe the configuration for each report that must be created and exported.
The exported data must then be manually combined and transformed into a single event log file.
*/
---
-- REPORT 1: Item Creation Events
---
Report_Name: ProcessMind - Item Creation Events
Source_Table: rm_story
Report_Type: List
Columns:
- Number (maps to DevelopmentItem)
- sys_created_on (maps to EventTime)
- 'Development Item Created' (create a formula or static column for ActivityName)
- Assigned to (maps to AssignedDeveloper)
- Priority (maps to DevelopmentItemPriority)
- State (maps to DevelopmentItemState)
- cmdb_ci (maps to ModuleComponentAffected)
- Type (maps to DevelopmentItemType)
- Assignment group (maps to AssignmentGroup)
Filters:
- sys_created_on ON Last 6 months
---
-- REPORT 2: Inferred State Change Events
---
Report_Name: ProcessMind - State Change Events
Source_Table: sys_audit
Report_Type: List
Columns:
- documentkey (maps to DevelopmentItem)
- sys_created_on (maps to EventTime)
- newvalue (maps to ActivityName, requires translation)
- user (maps to AssignedDeveloper)
ActivityName_Mapping_Logic (Example):
- WHEN newvalue IS '[Your Design State]' THEN 'Design Started'
- WHEN newvalue IS '[Your In Progress State]' THEN 'Development Started'
- WHEN newvalue IS '[Your QA State]' THEN 'QA Testing Started'
- WHEN oldvalue IS '[Your QA State]' AND newvalue IS '[Your In Progress State]' THEN 'Rework Identified'
- WHEN oldvalue IS '[Your QA State]' AND newvalue IS '[Your UAT State]' THEN 'QA Testing Completed'
- WHEN newvalue IS '[Your UAT State]' THEN 'UAT Started'
- WHEN newvalue IS '[Your UAT Approved State]' THEN 'UAT Approved'
- WHEN newvalue IS '[Your Release Ready State]' THEN 'Prepared For Release'
- WHEN newvalue IS '[Your Cancelled State]' THEN 'Development Item Cancelled'
Filters:
- tablename = 'rm_story'
- fieldname = 'state'
- sys_created_on ON Last 6 months
---
-- REPORT 3: Code Commit Events
---
Report_Name: ProcessMind - Commit Events
Source_Table: sn_devops_commit
Report_Type: List
Columns:
- work_item.number (maps to DevelopmentItem)
- commit_time (maps to EventTime)
- 'Code Committed' (create a formula or static column for ActivityName)
- author.name (maps to AssignedDeveloper)
Filters:
- commit_time ON Last 6 months
---
-- REPORT 4: Build Events
---
Report_Name: ProcessMind - Build Events
Source_Table: sn_devops_build
Report_Type: List
Columns:
- work_item.number (maps to DevelopmentItem)
- start_time (maps to EventTime)
- 'Build Triggered' (create a formula or static column for ActivityName)
Filters:
- start_time ON Last 6 months
---
-- REPORT 5: Deployment Events
---
Report_Name: ProcessMind - Deployment Events
Source_Table: sn_devops_deployment
Report_Type: List
Columns:
- work_item.number (maps to DevelopmentItem)
- start_time (maps to EventTime for 'Started' activities)
- end_time (maps to EventTime for 'Completed' or 'Failed' activities)
- state (maps to ActivityName, requires translation)
ActivityName_Mapping_Logic:
- WHEN state IS 'in_progress' THEN 'Deployment to Production Started'
- WHEN state IS 'successful' THEN 'Deployed to Production'
- WHEN state IS 'failed' THEN 'Deployment Failed'
Filters:
- start_time ON Last 6 months
- [Filter for production deployments based on your environment configuration]
---
-- Additional events like 'Code Review Performed' may require a separate report
-- on a table like `sn_devops_pull_request` if available and configured.
--- ステップ
- 前提条件: ServiceNowインスタンスへのネットワークアクセスがあり、読み取り権限を持つ専用のサービスアカウントが提供されていることを確認してください(
itilおよびsn_devops.viewerロールが良い出発点です)。このユーザーは、rm_story、sys_audit、およびsn_devops_*スキーマなどのテーブルにアクセスできる必要があります。 - ServiceNow ODBCドライバーのインストール: ServiceNowサポートポータルから、お使いのオペレーティングシステムに適したServiceNow ODBCドライバーをダウンロードし、提供されているインストール手順に従ってください。
- DSNの設定: クエリを実行するマシン上で新しいシステムDSN(データソース名)を設定します。ODBCデータソースアドミニストレーターで、ServiceNowドライバーを追加し、インスタンスURL(例:
yourinstance.service-now.com)、ユーザー名、パスワードを設定します。 - SQLクライアントでの接続: DBeaver、Microsoft SQL Server Management Studio(リンクサーバーを使用)、またはPythonのようなスクリプト言語とODBCライブラリを使用して、設定したDSN経由でServiceNowに接続します。
- ステートモデルの特定: クエリを実行する前に、組織が開発項目テーブル(例:
rm_story、rm_defect)のstateフィールドにどの正確な値を使用しているかを特定する必要があります。提供されているクエリは「In Progress」や「In QA」のような一般的な例を使用していますが、これらを実際の特定の値に置き換える必要があります。 - SQLクエリのカスタマイズ: 提供されているSQLクエリをクライアントにコピーします。クエリの冒頭にあるプレースホルダーを、抽出の開始日や開発ライフサイクル活動に対応する特定のステータス値を含めて変更します。
- クエリの実行: ODBC接続を介して、ServiceNowデータベースに対して完全なSQLクエリを実行します。日付範囲とデータ量によっては、かなりの時間がかかる場合があります。
- データの確認: クエリが完了したら、返されたデータセットの簡単なレビューを実行します。さまざまな活動をチェックし、
DevelopmentItem、ActivityName、EventTimeなどの主要な列が期待どおりにデータが入力されていることを確認します。 - CSVへのエクスポート: 結果セット全体をCSVファイルにエクスポートします。ファイルがUTF-8エンコードされており、列ヘッダーがProcessMindで必要とされる属性名(例:
DevelopmentItem、ActivityName、EventTime)と一致していることを確認してください。 - アップロードの準備: 最終的なCSVファイルの末尾に空の行がないこと、および
EventTimeとLastDataUpdateの日付形式が一貫しており、ProcessMindでサポートされている形式(例:YYYY-MM-DD HH:MM:SS)であることを確認してください。
設定
- 前提条件: DevOpsモジュールが有効化されたServiceNowインスタンスへのアクセスが必要です。必要なテーブルに対する読み取り権限を持つ専用のユーザーアカウントも不可欠です。ServiceNow ODBCドライバーは、クライアントマシンにインストールされ、設定されている必要があります。
- ODBCドライバー設定: 接続にはインスタンスURL、ユーザー名、パスワードまたはOAuthトークンが必要です。複雑なクエリを実行する前に、DSN接続をテストすることが極めて重要です。
- 日付範囲フィルター: 提供されているクエリには、抽出されるデータ量を制限するためのプレースホルダー
s.sys_created_on >= '2023-01-01'が含まれています。管理可能なクエリ実行時間を確保するため、過去6〜12か月間といった定義された期間のデータを抽出することを強くお勧めします。 - ステートモデルのカスタマイズ: 推論されたイベントに対するクエリの精度は、ステートモデルに完全に依存します。プレースホルダーのステータス値(例:
[Your 'In Progress' State Value]、[Your 'In QA' State Value])を、ServiceNow設定で使用されている正確な値に置き換える必要があります。これらは大文字と小文字が区別されます。 - 作業項目テーブル: このクエリはStoryテーブル(
rm_story)用に書かれています。組織がDefects(rm_defect)、Enhancements(rm_enhancement)、または他のタスクタイプも使用している場合は、UNION ALLを使用して、それらを初期のDevItems共通テーブル式(CTE)に追加する必要があります。 - パフォーマンス: 本番ServiceNowインスタンスに対する直接クエリは、パフォーマンスに影響を与える可能性があります。大規模な抽出は、ピーク時間外に実行することをお勧めします。非常に大規模なデータセットの場合は、
sys_updated_onフィールドに基づいた増分抽出戦略を検討してください。
a クエリ例 sql
WITH DevItems AS (
-- This CTE selects the base set of development items to analyze.
-- Add other tables like rm_defect or rm_enhancement here using UNION ALL if needed.
SELECT
s.sys_id,
s.number,
s.sys_created_on,
s.sys_updated_on,
s.assigned_to,
s.priority,
s.state,
s.cmdb_ci, -- Module/Component Affected
s.sys_class_name, -- Development Item Type
s.assignment_group,
DATEDIFF(second, s.sys_created_on, s.closed_at) AS cycle_time_seconds
FROM rm_story s
WHERE s.sys_created_on >= '2023-01-01' -- *** Placeholder: Set your desired start date ***
),
StateChanges AS (
-- This CTE unnests the audit trail for state changes, which are used for inferred activities.
SELECT
a.documentkey AS item_sys_id,
a.sys_created_on AS change_time,
a.oldvalue,
a.newvalue,
-- *** Placeholder: Define the numeric order of your states to detect rework. Adjust values and names. ***
CASE a.oldvalue
WHEN '1' THEN 1 -- Open
WHEN '[Your 'Design' State Value]' THEN 2
WHEN '[Your 'In Progress' State Value]' THEN 3
WHEN '[Your 'In QA' State Value]' THEN 4
WHEN '[Your 'In UAT' State Value]' THEN 5
ELSE 0
END AS old_state_order,
CASE a.newvalue
WHEN '1' THEN 1 -- Open
WHEN '[Your 'Design' State Value]' THEN 2
WHEN '[Your 'In Progress' State Value]' THEN 3
WHEN '[Your 'In QA' State Value]' THEN 4
WHEN '[Your 'In UAT' State Value]' THEN 5
ELSE 0
END AS new_state_order
FROM sys_audit a
WHERE a.tablename = 'rm_story' AND a.fieldname = 'state'
)
-- 1. Development Item Created
SELECT
i.number AS DevelopmentItem,
'Development Item Created' AS ActivityName,
i.sys_created_on AS EventTime,
'ServiceNow DevOps' AS SourceSystem,
GETDATE() AS LastDataUpdate,
us.name AS AssignedDeveloper,
i.priority AS DevelopmentItemPriority,
i.state AS DevelopmentItemState,
ci.name AS ModuleComponentAffected,
i.sys_class_name AS DevelopmentItemType,
grp.name AS AssignmentGroup,
i.cycle_time_seconds AS DevelopmentItemCycleTime,
CAST(0 AS BIT) AS IsRework
FROM DevItems i
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id
LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id
LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
UNION ALL
-- 2. Design Started
SELECT i.number, 'Design Started', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.newvalue = '[Your ''Design'' State Value]' -- *** Placeholder: Adjust state value ***
UNION ALL
-- 3. Development Started
SELECT i.number, 'Development Started', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.newvalue = '[Your ''In Progress'' State Value]' AND sc.old_state_order < 3 -- *** Placeholder: Adjust state value and order ***
UNION ALL
-- 4. Code Committed
SELECT i.number, 'Code Committed', c.committed_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, i.state, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM sn_devops_commit c JOIN DevItems i ON c.work_item = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
UNION ALL
-- 5. Build Triggered
SELECT i.number, 'Build Triggered', b.start_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, i.state, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM sn_devops_build b JOIN sn_devops_commit_build cb ON b.sys_id = cb.build JOIN sn_devops_commit c ON cb.commit = c.sys_id JOIN DevItems i ON c.work_item = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
UNION ALL
-- 6. Code Review Performed
SELECT i.number, 'Code Review Performed', pr.closed_at, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, i.state, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM sn_devops_pull_request pr JOIN DevItems i ON pr.work_item = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE pr.state = 'merged' -- Or 'closed', depending on process
UNION ALL
-- 7. QA Testing Started
SELECT i.number, 'QA Testing Started', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.newvalue = '[Your ''In QA'' State Value]' -- *** Placeholder: Adjust state value ***
UNION ALL
-- 8. Rework Identified
SELECT i.number, 'Rework Identified', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(1 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.new_state_order < sc.old_state_order AND sc.new_state_order > 1 -- Moved to an earlier state
UNION ALL
-- 9. QA Testing Completed
SELECT i.number, 'QA Testing Completed', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.oldvalue = '[Your ''In QA'' State Value]' AND sc.new_state_order > sc.old_state_order -- *** Placeholder: Adjust state value ***
UNION ALL
-- 10. UAT Started
SELECT i.number, 'UAT Started', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.newvalue = '[Your ''In UAT'' State Value]' -- *** Placeholder: Adjust state value ***
UNION ALL
-- 11. UAT Approved
SELECT i.number, 'UAT Approved', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.oldvalue = '[Your ''In UAT'' State Value]' AND sc.new_state_order > sc.old_state_order -- *** Placeholder: Adjust state value ***
UNION ALL
-- 12. Prepared For Release
SELECT i.number, 'Prepared For Release', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.newvalue = '[Your ''Ready for Release'' State Value]' -- *** Placeholder: Adjust state value ***
UNION ALL
-- 13. Deployment to Production Started
SELECT i.number, 'Deployment to Production Started', se.start_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, i.state, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM sn_devops_step_execution se JOIN sn_devops_artifact_build sab ON se.deployable = sab.sys_id JOIN sn_devops_commit_build cb ON sab.build = cb.build JOIN sn_devops_commit c ON cb.commit = c.sys_id JOIN DevItems i ON c.work_item = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE se.stage_name = 'Production' -- *** Placeholder: Adjust stage name ***
UNION ALL
-- 14. Deployed to Production
SELECT i.number, 'Deployed to Production', se.end_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, i.state, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM sn_devops_step_execution se JOIN sn_devops_artifact_build sab ON se.deployable = sab.sys_id JOIN sn_devops_commit_build cb ON sab.build = cb.build JOIN sn_devops_commit c ON cb.commit = c.sys_id JOIN DevItems i ON c.work_item = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE se.stage_name = 'Production' AND se.result = 'SUCCESS' -- *** Placeholder: Adjust stage name and result value ***
UNION ALL
-- 15. Deployment Failed
SELECT i.number, 'Deployment Failed', se.end_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, i.state, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM sn_devops_step_execution se JOIN sn_devops_artifact_build sab ON se.deployable = sab.sys_id JOIN sn_devops_commit_build cb ON sab.build = cb.build JOIN sn_devops_commit c ON cb.commit = c.sys_id JOIN DevItems i ON c.work_item = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE se.stage_name = 'Production' AND se.result = 'FAILURE' -- *** Placeholder: Adjust stage name and result value ***
UNION ALL
-- 16. Development Item Cancelled
SELECT i.number, 'Development Item Cancelled', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.newvalue = '[Your ''Cancelled'' State Value]'; -- *** Placeholder: Adjust state value ***