Azure DevOps パイプラインタスク
Azure DevOpsパイプラインでこれらのタスクを使用して、DevOps コンフィグ データモデルを操作します。
これらのタスクは、目標を達成するための指定のパイプライン定義を作成するために提供されています。
- ServiceNow-DevOps-Config-Agent-Upload-Config
エージェントジョブを使用して、データモデル内の展開可能項目に構成データをアップロードします。
- ServiceNow-DevOps-Config-Agent-Get-Snapshot
アプリケーションのスナップショットを取得します。
- ServiceNow-DevOps-Config-Agent-Get-Snapshot-Name
スナップショットの名前を抽出します。
- ServiceNow-DevOps-Config-Agent-Publish-Snapshot
構成データのスナップショットを公開します。
- ServiceNow-DevOps-Config-Agent-Export-Snapshot
構成データのサブセットをエクスポートします。
- ServiceNow-DevOps-Config-Agent-Register-Pipeline
変更セットやスナップショットをパイプライン実行に登録します。
- ServiceNow-DevOps-Config-Agent-Validate-Snapshot
組織のポリシーに照らして構成データを検証します。
- ServiceNow-DevOps-Server-Change-Acceleration
パイプラインの一部として変更要求を作成します。
ServiceNow-DevOps-Config-Agent-Upload-Config
アプリケーションデータモデル内の特定の場所に構成ファイルをアップロードするタスク。
- 入力変数
connectedServiceName DevOps パイプラインエンドポイント接続を指定します。 applicationName 構成データのアップロード先のアプリケーションを指定します。 deployableName アプリケーションの展開可能項目を指定します (ターゲットが展開可能な場合は必須)。 uploadTarget 構成データのアップロード先のデータモデルターゲットを指定します ( コンポーネント、 コレクション、 展開可能項目など)。 collectionName (オプション) 構成データのアップロード先のコレクションを指定します (ターゲットがコレクションの場合は必須)。 namePath 構成データのアップロード先のデータモデルパスを指定します。
注:vars フォルダーにアップロードする場合は、名前パスの先頭に「vars/」を付けて、変数フォルダーのパスを指定する必要があります。configFilePath 構成データがデータモデル内のコンポーネントまたは展開可能パスにアップロードされるソースフォルダーを指定します。
空はリポジトリのルートです。ファイルがリポジトリにない場合は、変数を使用します (例:$(agent.builddirectory))。
convertPath (オプション) 構成ファイルのディレクトリ構造を (ワークスペースを基準にして) 保持し、ディレクトリをデータモデル内のパスに変換するかどうかを指定します。デフォルトは false です。 dataFormat config_file のデータ形式 (例:JSON、YAML、XML など) を指定します。 changesetNumber (オプション) このアップロードアクティビティが関連付けられている (オープンな) 変更セットを指定します。指定しない場合、新しい変更セットが作成されます。
注:複数のアップロードシナリオでのみ使用されます。autocommit アップロード後に構成データをコミットするかどうかを指定します (true/false)。デフォルトは false です。 autoValidate コミット中に構成データを検証するかどうかを指定します (true/false)。デフォルトは true です。 - 出力変数
changesetNumber アップロード中に作成/コミットされた変更セットレコード。
後でパイプラインで使用できるように、タスクに名前を付けます (例:componentUpload)。
- 例 - アップロード構成
-task: ServiceNow-DevOps-Config-Agent-Upload-Config name: componentUpload inputs: connectedServiceName: 'MyServiceNowInstance' applicationName: 'PaymentDemo' uploadTarget: 'component' namePath: 'wep-api-v1.0' configFilePath: 'k8s/helm/values.yml' dataFormat: 'yaml' autoCommit: true autoValidate: true- 例 - 複数のアップロード (コンポーネント)
- アップロードタスクを複数回呼び出して、アップロード部分を 1 つの変更セットに保持しながら、さまざまな場所からさまざまなファイル形式で構成データをアップロードできます。
- 最初のアップロードでタスクに名前を付けて、changesetNumber 出力変数を後続のアップロードで再利用できるようにします。YAML ファイルのアップロード:
-task: ServiceNow-DevOps-Config-Agent-Upload-Config name: componentUpload inputs: connectedServiceName: 'MyServiceNowInstance' applicationName: 'PaymentDemo' uploadTarget: 'component' namePath: 'wep-api-v1.0' configFilePath: 'k8s/helm/values.yml' dataFormat: 'yaml' autoCommit: false autoValidate: false - 後続のアップロードでは、最初のアップロードの changesetNumber 出力変数を入力変数として参照します。JSON ファイルのアップロード:
-task: ServiceNow-DevOps-Config-Agent-Upload-Config inputs: connectedServiceName: 'MyServiceNowInstance' applicationName: 'PaymentDemo' uploadTarget: 'component' namePath: 'wep-api-v1.0' configFilePath: 'featureToggles/set1.json' dataFormat: 'json' autoCommit: true autoValidate: true changesetNumber: '$(componentUpload.changesetNumber)'
- 最初のアップロードでタスクに名前を付けて、changesetNumber 出力変数を後続のアップロードで再利用できるようにします。
- 例:複数のアップロード (コレクションと変数)
- アップロードタスクを複数回呼び出して、アップロード部分を 1 つの変更セットに保持しながら、さまざまな場所からさまざまなファイル形式で構成データをアップロードできます。
- 最初のアップロードでは、changesetNumber 出力変数を後続のアップロードで再利用できるように、タスクに名前を付けてください。XML ファイルのアップロード:
-task: ServiceNow-DevOps-Config-Agent-Upload-Config name: componentUpload inputs: connectedServiceName: 'MyServiceNowInstance' applicationName: 'PaymentDemo' uploadTarget: 'collection' collectionName: 'release-1.0' namePath: 'v1-common-configs' configFilePath: 'infra/v1/config.xml' dataFormat: 'xml' autoCommit: false autoValidate: false - 後続のアップロードでは、最初のアップロードの changesetNumber 出力変数を入力として参照します。JSON ファイルのアップロード:
-task: ServiceNow-DevOps-Config-Agent-Upload-Config inputs: connectedServiceName: 'MyServiceNowInstance' applicationName: 'PaymentDemo' uploadTarget: 'deployable' deployableName: 'Production-EMEA' namePath: 'vars/dbSettings' configFilePath: 'infra/prodc/dbSettings.json' dataFormat: 'json' autoCommit: true autoValidate: true changesetNumber: '$(componentUpload.changesetNumber)'
注:変数フォルダーにアップロードするには、uploadTarget を deployable に設定し、deployableName と changesetNumber に正しい値を設定する必要があります。 - 最初のアップロードでは、changesetNumber 出力変数を後続のアップロードで再利用できるように、タスクに名前を付けてください。
ServiceNow-DevOps-Config-Agent-Get-Snapshot
- 特定のスナップショットを取得します。
CD フローに従って、特定のスナップショットが取得され、公開してからエクスポートしてダウンストリームで使用できます (たとえば、インフラストラクチャやアプリケーションをプロビジョニングするため)。
- 最新の検証済みスナップショットを取得します。
アプリケーションと展開可能項目の組み合わせについて、最新の検証済みスナップショットが取得されます。
- 影響を受ける展開可能な項目のすべてのスナップショットを取得します。
構成ファイルがアプリケーションデータモデルにアップロードされると、システムはアップロードの影響を受けると判断された展開可能な項目のスナップショットを作成します。CI フローに従って、最後のアップロード呼び出しで検証が有効になっていると仮定して、次のステップはスナップショットのリストを反復処理し、それらがすべて検証に合格したことを確認することです。
- アップロードでスナップショットが生成されない場合は、アプリケーションの展開可能な項目の最新のスナップショットを取得します。
構成変更が行われない場合、一連の構成データをアプリケーションの展開可能な変更セットの組み合わせの環境に展開できます。
- ポリシー検証結果をパイプライン実行に表示します。
スナップショットを取得するときに、ポリシー検証結果を ADO ビルドテスト結果ページにテスト結果として表示します (例外への準拠を含む)。
- 入力変数
connectedServiceName DevOps パイプラインエンドポイント接続 (プロジェクトのサービス接続設定で定義) を指定します。 applicationName 構成データのアップロード先またはデータのエクスポート元のアプリケーションを指定します。 deployableName (オプション) 最新のスナップショットデータを取得する展開可能項目を (指定されたアプリケーションごとに) 指定します。 changesetNumber (オプション) 適用可能な構成変更セットの変更セット ID を指定します。 isValidated (オプション) 渡されたスナップショットのみを返すか、例外 (true/false) で渡されたスナップショットのみを返すかを指定します。デフォルトは true です。 continueWithLatest (オプション) スナップショットが生成されない場合に、applicationName-deployableName-changesetNumber の組み合わせごとに最新のスナップショットを返すかどうかを指定します (true/false)。デフォルトは false です。 - 出力変数
snapshotObject 要求されたスナップショットを含む JSON オブジェクト。
後のパイプライン処理で使用できるように、タスクに名前を付けます (例: getSnapshot)。
- 例 - 特定のスナップショット
-task: ServiceNow-DevOps-Config-Agent-Get-Snapshot name: getSnapshot inputs: connectedServiceName: 'MyServiceNowInstance' applicationName: 'PaymentDemo' deployableName: 'Production' changesetNumber: 'Chset-16' isValidated: true continueWithLatest: true- 例 - 最新の検証済みスナップショット (特定のアプリケーションと展開可能な組み合わせ)
-task: ServiceNow-DevOps-Config-Agent-Get-Snapshot name: getSnapshot inputs: connectedServiceName: 'MyServiceNowInstance' applicationName: 'PaymentDemo' deployableName: 'Production' isValidated: true- 例 - すべての変更セットのスナップショット
-task: ServiceNow-DevOps-Config-Agent-Get-Snapshot name: getSnapshot inputs: connectedServiceName: 'MyServiceNowInstance' applicationName: 'PaymentDemo' changesetNumber: 'Chset-16'- 例 - ポリシー検証結果を表示します
ServiceNow-DevOps-Config-Agent-Get-Snapshot タスク中に生成されたスナップショット検証結果を含むファイルのパスに変数を割り当てます。
スナップショットの検証結果をパイプライン実行に読み込むには、変数を入力として使用して、ADO ネイティブの Publish Test Results v2 タスクを活用する必要があります。
stages: - stage: Two jobs: - job: A variables: - name: validationResultsPath value: 1/TEST_DATA_$(Build.DefinitionName)_$(Build.BuildNumber)_*.xml steps: - task: PublishTestResults@2 inputs: testResultsFormat: 'JUnit' testResultsFiles: '$(validationResultsPath)' searchFolder: '$(System.WorkFolder)'
ServiceNow-DevOps-Config-Agent-Get-Snapshot-Name
このタスクは、特定のスナップショットからスナップショット名を取得するために、 ServiceNow-DevOps-Config-Agent-Get-Snapshot-Name タスクからのフォローアップとして使用されます。ここから、スナップショット名を、スナップショットの公開などのダウンストリームタスクへの入力として使用できます。
- 入力変数
deployableName ServiceNow-DevOps-Config-Agent-Get-Snapshot タスクから返されたスナップショットオブジェクトを取得するための展開可能項目を指定します。 スクリプト スナップショットオブジェクトからスナップショット名を抽出するスクリプトを指定します。 - 出力変数
snapshotName 展開可能項目のスナップショット名。
後でパイプラインで使用できるように、タスクに名前を付けます ( 例:getSnapshotName)。
- 例 - スナップショット名を取得
このスクリプトを使用して、ServiceNow-DevOps-Config-Agent-Get-Snapshot タスクから取得したスナップショット名を抽出します。
-task: ServiceNow-DevOps-Config-Agent-Get-Snapshot-Name inputs: deployableName: 'PRD' script: | function run() { let name; let deployableName = process.argv[2]; let jsonObj = $(getSnapshot.snapshotObjects); let size = jsonObj.result.length; for(let i=0; i<size; i++) { obj = jsonObj.result[i]; if(obj[“deployable_id.name”].toLowerCase() == deployableName) { name = obj.name; console.log(name); } } } run();- 例 - スナップショットの取得で使用されるスナップショット名の取得
ServiceNow-DevOps-Config-Agent-Get-Snapshot タスクの直後に ServiceNow-DevOps-Config-Agent-Get-Snapshot-Name タスクを呼び出して、スナップショット名を返します。
スナップショットを取得 (影響を受けるスナップショットを含む JSON オブジェクトを返します):-stage: Two jobs: -job: B steps: -task: ServiceNow-DevOps-Config-Agent-Get-Snapshot name: getSnapshot inputs: connectedServiceName: 'MyServiceNowInstance' applicationName: 'PaymentDemo' deployableName: 'Production-2' changesetNumber: 'Chset-16'スナップショット名を取得します (特定の展開可能項目のスナップショット名を返します):-stage: Two jobs: - job: B steps: - task: ServiceNow-DevOps-Config-Agent-Get-Snapshot name: getSnapshotName inputs: deployableName: 'Production-2' script:| function run() { let name; let deployableName = process.argv[2]; let jsonObj = $(getSnapshot.snapshotObjects); let size = jsonObj.result.length; for(let i=0; i<size ;i++) { obj = jsonObj.result[i]; if(obj["deployable_id.name"].toLowerCase() == deployableName) { name = obj.name; console.log(name); // This standard output of inline script is given as the task output } } } run();返されたスナップショット名をパイプラインで使用します (例:公開)。-stage: Three jobs: -job: C variables: varSnapshotName: $[stageDependencies.Two.B.outputs['getSnapshotName.snapshotName']] steps: -task: ServiceNow-DevOps-Config-Agent-Publish-Snapshot inputs: connectedServiceName: 'MyServiceNowInstance' applicationName: 'PaymentDemo' deployableName: 'Production-2' snapshotName: '$(varSnapshotName)'
ServiceNow-DevOps-Config-Agent-Publish-Snapshot
このタスクは、指定されたアプリケーションおよび展開可能項目のスナップショットを公開します。ここから、スナップショットはエクスポートプロセスを通じて使用できます。
- 入力変数
connectedServiceName ServiceNow エンドポイント接続を指定します。 applicationName 公開するアプリケーションを指定します。 deployableName 構成データを公開するアプリケーションの展開可能項目を指定します。 snapshotName 公開するスナップショットの名前を指定します。 - 出力変数
- 適用外 (成功した場合は true を返し、それ以外の場合は false を返します)。
- 例
-task: ServiceNow-DevOps-Config-Agent-Publish-Snapshot inputs: connectedServiceName: 'MyServiceNowInstance' applicationName: 'PaymentDemo' deployableName: 'Production-2' snapshotName: 'Production-v23.dpl'
ServiceNow-DevOps-Config-Agent-Export-Snapshot
このタスクは、指定されたアプリケーションおよび展開可能項目のスナップショットをエクスポートします。エクスポートされた構成データのエクスポーター、関連するエクスポーター引数、エクスポート形式 (例:YAML、JSON など)、および出力場所を指定します。ここから、構成データをパイプラインのダウンストリームにある展開ツールまたはプロビジョニングツールの入力として直接使用できます。
- 入力変数
connectedServiceName ServiceNow エンドポイント接続を指定します。 applicationName 公開元のアプリケーションを指定します。 deployableName 構成データのエクスポート元のアプリケーションの展開可能項目を指定します。 snapshotName 構成データのエクスポート元のスナップショットの名前を指定します。 exporterName スナップショットに適用するエクスポーター (例: UniqueCDI など) を指定します。 args (オプション) エクスポーターとともに使用する引数を指定します。 exportFormat スナップショットデータをエクスポートする形式 (例:INI、 YAML、 PROPS など) を指定します。 saveFile ファイルを Azure リポジトリに保存するかどうかを確認します (true/false)。デフォルトは false です。
注:スクリプトへの適切な権限/OAuth トークンアクセス権が必要です。それ以外の場合、エクスポートファイルはパイプラインワークスペースディレクトリに作成されます。
- 出力変数
- 適用外 (成功した場合は true を返し、それ以外の場合は false を返します)。
- 例
-task: ServiceNow-DevOps-Config-Agent-Export-Snapshot inputs: connectedServiceName: 'MyServiceNowInstance' applicationName: 'PaymentDemo' deployableName: 'Production-2' exporterName: 'returnAllData-nowPreview' dataFormat: 'yaml' args: '' snapshotName: 'Production-v23.dpl' saveFile: true fileName: 'ExporterOutput/ExportData_$(build.definitionName)_$(build.buildNumber).yaml'
ServiceNow-DevOps-Config-Agent-Register-Pipeline
このタスクは、変更セットとスナップショットをパイプラインに関連付けて、パイプラインの実行中に追跡できるようにします。DevOps 変更速度管理 では、これはパイプライン UI に表示されます。
- 入力変数
connectedServiceName DevOps パイプラインエンドポイント接続を指定します。 applicationName アプリケーション名を指定します。 changesetNumber (オプション) パイプライン実行に関連付ける変更セットの ID を指定します。 snapshotName (オプション) パイプライン実行に関連付けるスナップショットの名前を指定します。 - 出力変数
- 適用外 (成功した場合は true を返し、それ以外の場合は false を返します)。
- 例
-task: ServiceNow-DevOps-Config-Agent-Publish-Snapshot inputs: connectedServiceName: 'MyServiceNowInstance' changesetNumber: 'Changeset-143'
ServiceNow-DevOps-Config-Agent-Validate-Snapshot
- 入力変数
connectedServiceName ServiceNow エンドポイント接続を指定します。 applicationName 検証するアプリケーションを指定します。 deployableName 検証する展開可能項目を (指定されたアプリケーションごとに) 指定します。 snapshotName (オプション) 検証するスナップショットの名前を指定します。 showResults (オプション) コンソールログに検証結果を表示するように指定します。 - 出力変数
- 適用外 (成功した場合は true を返し、それ以外の場合は false を返します)。
- 例
-task: ServiceNow-DevOps-Config-Agent-Validate-Snapshot inputs: connectedServiceName: 'MyServiceNowInstance' applicationName: 'PaymentDemo' deployableName: 'Production-2' snapshotName: '' showResults: false
ServiceNow-DevOps-Server-Change-Acceleration
このタスクは、エージェントレス (サーバー) ジョブが Azure DevOps パイプラインの一部として ServiceNow 変更管理 で変更要求を自動的に作成するために必要です。
DevOps コンフィグ では、同じ変更セットの複数のスナップショットを変更要求に関連付けるには、スナップショット名とアプリケーション名を使用して、特定のアプリケーションサービスの特定の構成データを追跡します。
DevOps 変更の促進機能の詳細については、「DevOps 変更プロセスの促進」を参照してください。
- 入力変数 (DevOps コンフィグ に関連)
connectedServiceName DevOps パイプラインエンドポイント接続を指定します。 applicationName 変更要求に添付されるスナップショットに関連付けられたアプリケーション。 snapshotName 変更要求に添付するスナップショットの名前。 - 例
-stage: ChangeRequest jobs: -job: 'changerequestjob' pool: server steps: -task: ServiceNow-DevOps-Server-Change-Acceleration inputs: connectedServiceName: 'MyServiceNowInstance' applicationName: 'PaymentDemo' snapshotName: 'Production-v23.dpl'
YAML パイプラインの例
trigger:
branches:
include:
- none
stages:
- stage: One
displayName: Upload Configuration Data
pool:
vmImage: ubuntu-latest
jobs:
- job: A
displayName: Upload
steps:
- task: ServiceNow-DevOps-Config-Agent-Upload-Config@1
name: componentUpload
inputs:
connectedServiceName: 'MyServiceNowInstance'
applicationName: 'PaymentDemo'
uploadTarget: 'component'
configFile: 'k8s/helm/values.yml'
namePath: 'processor-api-v1.0'
dataFormat: 'yaml'
autoValidate: true
autoCommit: true
convertPath: true
- stage: Two
displayName: Get Latest Snapshot
pool:
vmImage: ubuntu-latest
jobs:
- job: B
displayName: Get Snapshot
variables:
- name: varChangesetNumber
value: $[stageDependencies.One.A.outputs['componentUpload.changesetNumber'] ]
- name: varConfigValidationResults
value: 1/TEST_DATA_$(Build.DefinitionName)_$(Build.BuildNumber)_*.xml
steps:
- task: ServiceNow-DevOps-Config-Agent-Get-Snapshot@1
name: getSnapshot
inputs:
connectedServiceName: 'MyServiceNowInstance'
applicationName: 'PaymentDemo'
deployableName: 'Production-EMEA'
changeSetNumber: '$(varChangesetNumber)'
continueWithLatest: true
- task: ServiceNow-DevOps-Config-Agent-Get-Snapshot-Name@1
name: getSnapshotName
inputs:
deployableName: 'Production-EMEA'
script: "function run() {\n let name;\n let deployableName = process.argv[2]; \n let jsonObj = $(getSnapshot.snapshotObjects);\n let size = jsonObj.result.length;\n for(let i=0; i<size ;i++) {\n obj = jsonObj.result[i];\n if(obj[\"deployable_id.name\"].toLowerCase() == deployableName) {\n name = obj.name;\n console.log(name); // This standard output of inline script is given as the task output\n }\n }\n}\nrun();\n"
- task: PublishTestResults@2
inputs:
testResultsFormat: ‘JUnit’
testResultsFiles: ‘$(varConfigValidationResults)’
searchFolder: ‘$(System.WorkFolder)’
- task: ServiceNow-DevOps-Config-Agent-Register-Pipeline@1
inputs:
connectedServiceName: 'MyServiceNowInstance'
snapshotName: '$(getSnapshotName.snapshotName)'
applicationName: 'PaymentDemo'
- stage: Three
displayName: Publish Snapshot
pool:
vmImage: ubuntu-latest
jobs:
- job: C
displayName: Publish
variables:
- name: varSnapshotName
value: $[stageDependencies.Two.B.outputs['getSnapshotName.snapshotName']]
steps:
- task: ServiceNow-DevOps-Config-Agent-Publish-Snapshot@1
inputs:
connectedServiceName: 'MyServiceNowInstance'
applicationName: 'PaymentDemo'
deployableName: 'Production-EMEA'
snapshotName: '$(varSnapshotName)'
- stage: ChangeRequest
dependsOn:
- Two
- Three
jobs:
- job: 'changerequestjob'
timeoutInMinutes: 2
pool:
name: server
variables:
- name: varSnapshotName
value: $[stageDependencies.Two.B.outputs['getSnapshotName.snapshotName']]
steps:
- task: ServiceNow-DevOps-Server-Change-Acceleration@1
inputs:
connectedServiceName: 'MyServiceNowInstance'
applicationName: 'PaymentDemo'
snapshotName: '$(varSnapshotName)'
- stage: Four
displayName: Export Snapshot
dependsOn:
- Two
- Three
- ChangeRequest
pool:
vmImage: ubuntu-latest
variables:
- name: varSnapshotName
value: $[stageDependencies.Two.B.outputs['getSnapshotName.snapshotName']]
jobs:
- job: D
displayName: Export
steps:
- task: ServiceNow-DevOps-Config-Agent-Export-Snapshot@1
inputs:
connectedServiceName: 'MyServiceNowInstance'
applicationName: 'PaymentDemo'
deployableName: 'Production-EMEA'
exporterName: 'returnAllData-now'
dataFormat: 'yaml'
snapshotName: '$(varSnapshotName)'
saveFile: true
fileName: 'ExportData_$(build.definitionName)_$(build.buildNumber).yaml'
- task: CmdLine@2
inputs:
script: |
echo Write your commands here
echo Hello world
tree $(Pipeline.Workspace)