diff --git a/README.md b/README.md index dc677ee5..f903f41b 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,9 @@ Action takes Project URl, pipeline name and a [Personal Access Token (PAT)](http - uses: Azure/pipelines@v1 with: azure-devops-project-url: 'https://dev.azure.com/organization/project-name' - azure-pipeline-name: 'pipeline-name' # name of the Azure pipeline to be triggered - azure-devops-token: '${{ secrets.AZURE_DEVOPS_TOKEN }}' + azure-pipeline-name: 'pipeline-name' # name of the Azure pipeline to be triggered, required + azure-devops-token: '${{ secrets.AZURE_DEVOPS_TOKEN }}' # required field + azure-pipeline-variables: '{"variable1": "value1", "variable2": "value2"}' # optional stringified json ``` # Contributing diff --git a/action.yml b/action.yml index 780b36b1..090a3e54 100644 --- a/action.yml +++ b/action.yml @@ -7,6 +7,9 @@ inputs: azure-pipeline-name: description: 'Name of the Azure Pipline to be triggered' required: true + azure-pipeline-variables: + description: 'Set/Overwrite pipeline variables' + required: false azure-devops-token: description: 'Paste personal access token of the user as value of secret variable:AZURE_DEVOPS_TOKEN' required: true diff --git a/lib/pipeline.runner.js b/lib/pipeline.runner.js index 6d84a18f..d0e59cc6 100644 --- a/lib/pipeline.runner.js +++ b/lib/pipeline.runner.js @@ -100,7 +100,8 @@ class PipelineRunner { }, sourceBranch: sourceBranch, sourceVersion: sourceVersion, - reason: BuildInterfaces.BuildReason.Triggered + reason: BuildInterfaces.BuildReason.Triggered, + parameters: this.taskParameters.azurePipelineVariables }; logger_1.Logger.LogPipelineTriggerInput(build); // Queue build @@ -131,6 +132,15 @@ class PipelineRunner { pipeline_helper_1.PipelineHelper.EnsureValidPipeline(projectName, pipelineName, releaseDefinitions); let releaseDefinition = releaseDefinitions[0]; logger_1.Logger.LogPipelineObject(releaseDefinition); + // Create ConfigurationVariableValue objects from the input variables + let variables = undefined; + if (this.taskParameters.azurePipelineVariables) { + variables = JSON.parse(this.taskParameters.azurePipelineVariables); + Object.keys(variables).map(function (key, index) { + let oldValue = variables[key]; + variables[key] = { value: oldValue }; + }); + } // Filter Github artifacts from release definition let gitHubArtifacts = releaseDefinition.artifacts.filter(pipeline_helper_1.PipelineHelper.isGitHubArtifact); let artifacts = new Array(); @@ -162,7 +172,8 @@ class PipelineRunner { let releaseStartMetadata = { definitionId: releaseDefinition.id, reason: ReleaseInterfaces.ReleaseReason.ContinuousIntegration, - artifacts: artifacts + artifacts: artifacts, + variables: variables }; logger_1.Logger.LogPipelineTriggerInput(releaseStartMetadata); // create release diff --git a/lib/task.parameters.js b/lib/task.parameters.js index 44f00f9f..56ab17bc 100644 --- a/lib/task.parameters.js +++ b/lib/task.parameters.js @@ -13,6 +13,7 @@ class TaskParameters { this._azureDevopsProjectUrl = core.getInput('azure-devops-project-url', { required: true }); this._azurePipelineName = core.getInput('azure-pipeline-name', { required: true }); this._azureDevopsToken = core.getInput('azure-devops-token', { required: true }); + this._azurePipelineVariables = core.getInput('azure-pipeline-variables', { required: false }); } static getTaskParams() { if (!this.taskparams) { @@ -29,5 +30,8 @@ class TaskParameters { get azureDevopsToken() { return this._azureDevopsToken; } + get azurePipelineVariables() { + return this._azurePipelineVariables; + } } exports.TaskParameters = TaskParameters; diff --git a/src/pipeline.runner.ts b/src/pipeline.runner.ts index 94bb8465..6030ce5e 100644 --- a/src/pipeline.runner.ts +++ b/src/pipeline.runner.ts @@ -91,7 +91,8 @@ export class PipelineRunner { }, sourceBranch: sourceBranch, sourceVersion: sourceVersion, - reason: BuildInterfaces.BuildReason.Triggered + reason: BuildInterfaces.BuildReason.Triggered, + parameters: this.taskParameters.azurePipelineVariables } as BuildInterfaces.Build; log.LogPipelineTriggerInput(build); @@ -127,6 +128,16 @@ export class PipelineRunner { log.LogPipelineObject(releaseDefinition); + // Create ConfigurationVariableValue objects from the input variables + let variables = undefined + if (this.taskParameters.azurePipelineVariables) { + variables = JSON.parse(this.taskParameters.azurePipelineVariables); + Object.keys(variables).map(function (key, index) { + let oldValue = variables[key] + variables[key] = { value: oldValue } + }); + } + // Filter Github artifacts from release definition let gitHubArtifacts = releaseDefinition.artifacts.filter(p.isGitHubArtifact); let artifacts: ReleaseInterfaces.ArtifactMetadata[] = new Array(); @@ -159,7 +170,8 @@ export class PipelineRunner { let releaseStartMetadata: ReleaseInterfaces.ReleaseStartMetadata = { definitionId: releaseDefinition.id, reason: ReleaseInterfaces.ReleaseReason.ContinuousIntegration, - artifacts: artifacts + artifacts: artifacts, + variables: variables }; log.LogPipelineTriggerInput(releaseStartMetadata); diff --git a/src/task.parameters.ts b/src/task.parameters.ts index a3bcf0f9..8d485120 100644 --- a/src/task.parameters.ts +++ b/src/task.parameters.ts @@ -5,11 +5,13 @@ export class TaskParameters { private _azureDevopsProjectUrl: string; private _azurePipelineName: string; private _azureDevopsToken: string; + private _azurePipelineVariables: string; private constructor() { this._azureDevopsProjectUrl = core.getInput('azure-devops-project-url', { required: true }); this._azurePipelineName = core.getInput('azure-pipeline-name', { required: true }); this._azureDevopsToken = core.getInput('azure-devops-token', { required: true }); + this._azurePipelineVariables = core.getInput('azure-pipeline-variables', { required: false }); } public static getTaskParams() { @@ -31,4 +33,8 @@ export class TaskParameters { public get azureDevopsToken() { return this._azureDevopsToken; } + + public get azurePipelineVariables() { + return this._azurePipelineVariables; + } } \ No newline at end of file