MettleCI for IBM DataStage NextGen
MettleCI's IBM DataStage NextGen DevOps automation toolkit (MCIX) in Azure DevOps pipelines using a deployment and infrastructure-free containerised solution.
This extension provides a set of custom Azure DevOps tasks that wrap the MCIX CLI and run it inside a Docker container, ensuring consistent behaviour across agents and environments.
Requirements
- A Linux build agent with Docker available
(Microsoft-hosted Ubuntu agents work out of the box)
- All input and output paths must be under the agent working directory:
$(System.DefaultWorkingDirectory)
$(Build.SourcesDirectory)
$(Build.ArtifactStagingDirectory)
Quick start
Note that these tasks provide a graphical user interface in Azure DevOps pipelines which will enable you to author CI/CD pipelines for IBM Cloud Pak without needing to be an expert in YAML! The following YAML snippet demonstrates usage in a pipeline.
pool:
vmImage: 'ubuntu-latest'
stages:
- stage: Use_MCIX_Tasks
jobs:
- job: Demonstrate_MCIX_Tasks
displayName: "Demonstrate MCIX Tasks"
steps:
- checkout: self
# This is requried in every stage of a Azure DevOps pipeline using Microsoft-hosted agents
# to provide access to a Docker container registery via a secure service connections.
- task: Docker@2
displayName: "Login to container registry"
inputs:
command: login
containerRegistry: 'my-container-service-connection'
# This first task is optional, but useful to verify the MCIX container is accessible
# and also has the side-effect of pulling the container image (used by subsequent mcix
# tasks) early in the job.
- task: mcixSystemVersion@1
displayName: "Verify container version"
inputs: {}
- task: mcixDatastageImport@1
inputs:
url: 'http://my-cpd.my-organization.com'
user: 'MyUserName'
apiKey: '${MySecureApiKey}'
project: 'MyProject'
assetsPath: '$(Build.SourcesDirectory)/datastage'
- task: mcixDatastageCompile@1
inputs:
url: 'http://my-cpd.my-organization.com'
user: 'MyUserName'
apiKey: '${MySecureApiKey}'
project: 'MyProject'
report: 'report.xml'
includeAssetInTestName: true
Tasks
MCIX Asset Analysis Test
Runs mcix asset-analysis test inside the MCIX container image and optionally publishes JUnit results.
YAML example
- task: mcixAssetAnalysisTest@1
displayName: "MCIX Asset Analysis Test"
inputs:
imageName: datamigrators.azurecr.io/datamigrators/mcix
imageTag: latest
rules: "$(RULES)"
report: "$(REPORT)"
| Input |
Required |
Description |
imageName |
No |
Docker image containing the mcix CLI. |
imageTag |
No |
Docker tag to use (e.g. 1.0.204). |
url |
No |
Base URL of CP4D/CP4DaaS (e.g. https://cpd.example.com). |
user |
No |
Username for CP4D/CP4DaaS. |
apiKey |
No |
CP4D/CP4DaaS API key (stored securely by Azure DevOps). |
project |
No |
For CP4D/CP4DaaS analysis, specify exactly one of Project or Project ID. |
projectId |
No |
For CP4D/CP4DaaS analysis, specify exactly one of Project or Project ID. |
rules |
Yes |
Location of the asset analysis rule files (directory). Must be inside the agent working directory. |
report |
Yes |
Report file path to write. Use .xml to publish as JUnit results. Must be inside the agent working directory. |
path |
No |
Location of project export zip file or directory for file-based analysis. Must be inside the agent working directory. |
includeTags |
No |
Tags of asset analysis rules to include (case insensitive). Separate by newline, comma, or space. Includes everything by default. |
excludeTags |
No |
Tags of asset analysis rules to exclude (case insensitive). Separate by newline, comma, or space. |
ignoreTestFailures |
No |
Returns zero when testing completes regardless of failures. |
includeAssetInTestName |
No |
Test case names will include the asset name in the JUnit report. |
testSuite |
No |
Only required if running this command multiple times for the same project. |
additionalArgs |
No |
Additional arguments passed to mcix asset-analysis test (whitespace separated). |
MCIX DataStage Compile Task
Runs MCIX DataStage Compile using the official MettleCI container image
YAML example
- task: mcixDatastageCompile@1
displayName: "MCIX DataStage Compile Task"
inputs:
imageName: datamigrators.azurecr.io/datamigrators/mcix
imageTag: latest
url: "url-value"
user: "user-value"
apiKey: "apiKey-value"
report: "$(REPORT)"
| Input |
Required |
Description |
imageName |
No |
MCIX Docker image name |
imageTag |
No |
MCIX Docker image tag |
url |
Yes |
url: The base URL for the CP4D instance. |
user |
Yes |
user: The username for the CP4D instance. |
apiKey |
Yes |
api-key: The API key for the CP4D instance. |
project |
No |
For CP4D/CP4DaaS analysis, specify exactly one of Project or Project ID. |
projectId |
No |
For CP4D/CP4DaaS analysis, specify exactly one of Project or Project ID. |
report |
Yes |
report: The path to the JUnit report file. |
includeAssetInTestName |
No |
include-asset-in-test-name: Whether to include the asset name in the test name. |
additionalArgs |
No |
Additional arguments to enable diagnostics or try preview features. |
MCIX DataStage Import Task
Runs MCIX DataStage Import using the official MettleCI container image
YAML example
- task: mcixDatastageImport@1
displayName: "MCIX DataStage Import Task"
inputs:
imageName: datamigrators.azurecr.io/datamigrators/mcix
imageTag: latest
url: "url-value"
user: "user-value"
apiKey: "apiKey-value"
assetsPath: "$(ASSETSPATH)"
| Input |
Required |
Description |
imageName |
No |
MCIX Docker image name |
imageTag |
No |
MCIX Docker image tag |
url |
Yes |
url: The base URL for the CP4D instance. |
user |
Yes |
user: The username for the CP4D instance. |
apiKey |
Yes |
api-key: The API key for the CP4D instance. |
project |
No |
For CP4D/CP4DaaS analysis, specify exactly one of Project or Project ID. |
projectId |
No |
For CP4D/CP4DaaS analysis, specify exactly one of Project or Project ID. |
assetsPath |
Yes |
assets: The path to the assets for the DataStage project. |
additionalArgs |
No |
Additional arguments to enable diagnostics or try preview features. |
MCIX Ovelay Apply Task
Runs MCIX Ovelay Apply using the official MettleCI container image
YAML example
- task: mcixDatastageImport@1
displayName: "MCIX Ovelay Apply Task"
inputs:
imageName: datamigrators.azurecr.io/datamigrators/mcix
imageTag: latest
assets: "$(ASSETS)"
output: "$(OUTPUT)"
overlays: |
path/one
path/two
| Input |
Required |
Description |
imageName |
No |
Container image repository/name. |
imageTag |
No |
Ignored if imageName already includes a tag or digest. |
assets |
Yes |
Path to DataStage export zip file or directory. |
output |
Yes |
Zip file or directory to write updated assets. |
overlays |
Yes |
One overlay directory per line. Applied in order. |
properties |
No |
Optional properties file with replacement values. |
additionalArgs |
No |
Extra mcix CLI arguments appended verbatim (supports quotes). |
MCIX System Version Task
Runs MCIX System Version using the official MettleCI container image
YAML example
- task: mcixSystemVersion@1
displayName: "MCIX System Version Task"
inputs:
imageName: datamigrators.azurecr.io/datamigrators/mcix
imageTag: latest
| Input |
Required |
Description |
imageName |
No |
MCIX Docker image name |
imageTag |
No |
MCIX Docker image tag |
additionalArgs |
No |
Additional arguments to enable diagnostics or try preview features. |
MCIX Unit Test Execute
Runs mcix unit-test execute inside the MCIX container image and publishes JUnit results.
YAML example
- task: mcixUnitTestExecute@1
displayName: "MCIX Unit Test Execute"
inputs:
imageName: datamigrators.azurecr.io/datamigrators/mcix
imageTag: latest
url: "url-value"
user: "user-value"
apiKey: "apiKey-value"
report: "$(REPORT)"
| Input |
Required |
Description |
imageName |
No |
Docker image containing the mcix CLI. |
imageTag |
No |
Docker tag to use (e.g. 1.0.204). |
url |
Yes |
Base URL of CP4D/CP4DaaS (e.g. https://cpd.example.com). |
user |
Yes |
Username for CP4D/CP4DaaS. |
apiKey |
Yes |
CP4D/CP4DaaS API key (stored securely by Azure DevOps). |
project |
No |
For CP4D/CP4DaaS analysis, specify exactly one of Project or Project ID. |
projectId |
No |
For CP4D/CP4DaaS analysis, specify exactly one of Project or Project ID. |
report |
Yes |
JUnit report file path to write (.xml). Must be inside the agent working directory. |
testSuite |
No |
The test suite name for this invocation of unit testing. |
maxConcurrency |
No |
Maximum number of concurrently executing test case jobs to run. |
ignoreTestFailures |
No |
Returns zero when testing completes regardless of failures. |
additionalArgs |
No |
Additional arguments passed to mcix unit-test execute (whitespace separated). |
|
Troubleshooting
“Path must be under the agent working directory”
Ensure all input and output paths resolve under one of:
$(System.DefaultWorkingDirectory)
$(Build.SourcesDirectory)
$(Build.ArtifactStagingDirectory)
Docker image pull fails (401 / 403)
If using a private container registry, authenticate earlier in the job (for example with the built-in Docker@2 login task).
© 2025-2026 Data Migrators Pty Ltd. All rights reserved.
Data Migrators policy documents