An Aql
resource specifies an Artifactory query using Artifactory Query Language.
An Aql resource can be used in the configuration
of a FileSpec resource to specify file properties to match against.
An Aql resource can be used as an inputresource
for the CreateReleaseBundle step. It defines the query that is used to create a release bundle.
YAML Schema
The YAML schema for Aql:
resources: - name: <string> type: Aql configuration: sourceArtifactory: <artifactory integration name> query: <string> addedProperties: key1: val1 key2: val2 mappings: - name: mapping1 input: output: - name: mapping2 input: output:
Tags
name
An alphanumeric string (underscores are permitted) that identifies the resource.
type
Must be Aql
for this resource type.
configuration
Specifies all configuration selections for the resource.
Tag | Description | Required/Optional |
---|---|---|
| The name of an Artifactory Integration. | Required |
| An Artifactory Query Language query string. | Required |
| List of added properties that will be added to the artifacts after distribution of the release bundle.
| Optional |
| List of mappings that are applied to the artifact paths after distribution of the release bundle.
| Optional |
Examples
These examples may require an Artifactory integration and/or a Distribution integration.
The Pipelines DSL for this example is available in this repository in the JFrog GitHub account.
Example 1: AQL with build name and number
resources: - name: myAqlResource type: Aql configuration: sourceArtifactory: myArtifactoryIntegration query: items.find({"@build.name":{"$eq":"buildName"}}) - name: myReleaseBundle type: ReleaseBundle configuration: sourceDistribution: myDistributionIntegration name: name version: '1' pipelines: - name: pipelineToUpdateResource steps: - name: myBashStep type: Bash configuration: integrations: - name: myArtifactoryIntegration outputResources: - name: myAqlResource execution: onExecute: - write_output myAqlResource query='items.find({"@build.name":{"$eq":"myBuildName"}})' - name: CreateReleaseBundlePipeline configuration: inputResources: - name: myAqlResource outputResources: - name: myReleaseBundle steps: - name: myCreateReleaseBundleStep type: CreateReleaseBundle configuration: releaseBundleName: ${JFROG_CLI_BUILD_NAME} releaseBundleVersion: ${run_id} dryRun: true
Example 2: AQL with file name
resources: - name: myAqlResource type: Aql configuration: sourceArtifactory: myArtifactoryIntegration query: 'items.find({"$and": [{"repo": {"$eq": "example-repo-local"}}, {"name": {"$match": "myFile.txt"}}]})' - name: myReleaseBundle type: ReleaseBundle configuration: sourceDistribution: myDistributionIntegration name: name version: '1' pipelines: - name: myCreateReleaseBundlePipeline steps: - name: myCreateReleaseBundleStep type: CreateReleaseBundle configuration: releaseBundleName: ${JFROG_CLI_BUILD_NAME} releaseBundleVersion: ${run_id} dryRun: false inputResources: - name: myAqlResource outputResources: - name: myReleaseBundle
Example 3: AQL to add an additional property to the artifacts in the release bundle
resources: - name: myAqlResource type: Aql configuration: sourceArtifactory: myArtifactoryIntegration query: 'items.find({"$and": [{"repo": {"$eq": "example-repo-local"}}, {"name": {"$match": "myFile.txt"}}]})' addedProperties: myRunNumber: ${run_id} - name: myReleaseBundle type: ReleaseBundle configuration: sourceDistribution: myDistributionIntegration name: name version: '1' pipelines: - name: myCreateReleaseBundlePipeline steps: - name: myCreateReleaseBundleStep type: CreateReleaseBundle configuration: releaseBundleName: ${JFROG_CLI_BUILD_NAME} releaseBundleVersion: ${run_id} dryRun: false inputResources: - name: myAqlResource outputResources: - name: myReleaseBundle
Example 4: AQL to map one path to another
resources: - name: myAqlResource type: Aql configuration: sourceArtifactory: myArtifactoryIntegration query: 'items.find({"$and": [{"repo": {"$eq": "example-repo-local"}}, {"name": {"$match": "myFile.txt"}}]})' mappings: - name: myMapping input: example-repo-local/myFile.txt output: example-repo-local/myFile_2.txt - name: myReleaseBundle type: ReleaseBundle configuration: sourceDistribution: myDistributionIntegration name: name version: '1' pipelines: - name: myCreateReleaseBundlePipeline steps: - name: myCreateReleaseBundleStep type: CreateReleaseBundle configuration: releaseBundleName: ${JFROG_CLI_BUILD_NAME} releaseBundleVersion: ${run_id} dryRun: false inputResources: - name: myAqlResource outputResources: - name: myReleaseBundle
Example 5: AQL mapping paths using capturing groups in the input
resources: - name: myAqlResource type: Aql configuration: sourceArtifactory: myArtifactoryIntegration query: 'items.find({"$and": [{"repo": {"$eq": "example-repo-local"}}, {"name": {"$match": "myFile.txt"}}]})' mappings: - name: myMapping input: example-repo-local/myFile.(.*) output: example-repo-local/myFile_2.$1 - name: myReleaseBundle type: ReleaseBundle configuration: sourceDistribution: myDistributionIntegration name: name version: '1' pipelines: - name: myCreateReleaseBundlePipeline steps: - name: myCreateReleaseBundleStep type: CreateReleaseBundle configuration: releaseBundleName: ${JFROG_CLI_BUILD_NAME} releaseBundleVersion: ${run_id} dryRun: false inputResources: - name: myAqlResource outputResources: - name: myReleaseBundle
Example 6
pipelines.yml
resources: - name: Aql_ART_1 type: Aql configuration: sourceArtifactory: myArtifactoryIntegration query: items.find({"@build.name":{"$eq":"art"}}) addedProperties: key1: value1 key2: value2 mappings: - name: mapping1 input: IN output: test1 - name: mapping2 input: IN output: test2 pipelines: - name: pipelines_ART_1 steps: - name: step_ART_1 type: PowerShell configuration: nodePool: win_2019 inputResources: - name: Aql_ART_1 trigger: true execution: onExecute: - write_output "executing step..."