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 アプリケーションの展開可能項目を指定します (ターゲットが展開可能な場合は必須)。 アップロードターゲット 構成データがアップロードされるデータモデルターゲット ( コンポーネント、 コレクション、 展開可能項目など) を指定します。 collectionName (オプション)構成データがアップロードされるコレクションを指定します (ターゲットがコレクションの場合は必須)。 namePath 構成データがアップロードされるデータモデルパスを指定します。
注:vars フォルダーにアップロードする場合、変数フォルダーパスを指定するには、名前パスを「vars/」で始める必要があります。configFilePath データモデルのコンポーネントまたは展開可能パスに構成データがアップロードされるソースフォルダーを指定します。
空はリポジトリのルートです。ファイルがリポジトリにない場合は、変数を使用します ( 例: $(agent.builddirectory))。
変換パス (オプション)構成ファイルのディレクトリ構造を (ワークスペースに関して) 保持し、ディレクトリをデータモデル内のパスに変換するかどうかを指定します。デフォルトは false です。 dataFormat config_fileのデータ形式 ( JSON、 YAML、 XML など) を指定します。 changesetNumber (オプション)このアップロードアクティビティが関連付けられている (オープンな) 変更セットを指定します。指定しない場合、新しい変更セットが作成されます。
注:複数のアップロードシナリオでのみ使用されます。自動コミット アップロード後に構成データをコミットするかどうかを指定します (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 フローに従って、前回の Upload コールで検証が有効になっていたと仮定して、次のステップではスナップショットのリストを反復処理し、すべてが検証に合格したことを確認します。
- アップロードでスナップショットが生成されない場合に、アプリケーションの展開可能項目の最新のスナップショットを取得します。
構成変更が行われていない場合、一連の構成データをアプリケーションに展開可能変更セットの組み合わせの環境に展開できます。
- パイプライン実行でポリシー検証結果を表示します。
スナップショットを取得するときに、ポリシーの検証結果を ADO ビルドテスト結果ページでテスト結果として表示します (例外への準拠を含む)。
- 入力変数
connectedServiceName DevOpsパイプラインエンドポイント接続 (プロジェクトのサービス接続設定で定義) を指定します。 applicationName 構成データのアップロード先またはエクスポート元のアプリケーションを指定します。 deployableName (オプション)最新のスナップショットデータを取得する展開可能項目を (指定したアプリケーションごとに) 指定します。 changesetNumber (オプション)適用可能な構成変更セットの変更セット ID を指定します。 isValidated (オプション)合格したスナップショットのみを返すか、例外 (true/false) を伴って渡されたスナップショットのみを返すかを指定します。デフォルトは true です。 continueWithLatest (オプション)スナップショットが生成されない場合 (true/false) に、applicationName-deployableName-changesetNumber の組み合わせに従って最新のスナップショットを返すかどうかを指定します。デフォルトは false です。 - 出力変数
スナップショットオブジェクト 要求されたスナップショットを含む 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 ネイティブの [テスト結果の公開 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 など) を指定します。 引数 (オプション)エクスポーターとともに使用する引数を指定します。 エクスポート形式 スナップショットデータをエクスポートする形式 ( 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 (オプション)検証するスナップショットの名前を指定します。 結果を表示 (オプション)検証結果をコンソールログに表示するように指定します。 - 出力変数
- 適用外です (成功した場合は 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)