Skip to main content

Remove Ability to Manually Trigger Pipelines

Introduction

The following is a very simple method to remove the ability to manually trigger a pipeline.  To enforce it further however, a Police Engine evaluation on the pipeline should be implemented to see if the stage is present and is set correctly.  This Policy Engine evaluation is not included in this article. The basic concept is to provide an evaluation on the pipeline at the very beginning to check and see if the pipeline should be able to be manually executed.  The use case can be if a user should be able to only trigger a series of pipelines from a initial pipeline, but subsequent pipelines should not be manually triggered.

Instructions

For this example, we have a pipeline created which has a simple wait stage included.  The pipeline needs to be triggered from a GitRepo

{
"keepWaitingPipelines": false,
"lastModifiedBy": "anonymous",
"limitConcurrent": true,
"spelEvaluator": "v4",
"stages": [
{
"name": "Check Preconditions",
"preconditions": [
{
"context": {
"expression": "${ trigger['type'] }='manual'",
"failureMessage": "Pipeline was triggered manually. Please use Pipeline X instead to trigger"
},
"failPipeline": true,
"type": "expression"
}
],
"refId": "2",
"requisiteStageRefIds": [],
"type": "checkPreconditions"
},
{
"name": "Wait",
"refId": "3",
"requisiteStageRefIds": [
"2"
],
"type": "wait",
"waitTime": 60
}
],
"triggers": [
{
"enabled": true,
"payloadConstraints": {
"$.head_commit.modified": "TerraformFiles/*"
},
"source": "gitrepo",
"type": "webhook"
},
{
"enabled": true,
"payloadConstraints": {
"$.head_commit.added": "TerraformFiles/*"
},
"source": "gitrepo",
"type": "webhook"
}
],
"updateTs": "1624301583000"
}

If this pipeline is manually triggered, it will hit an evaluation stage that checks preconditions and will fail the stage if the preconditions are not met.  The specific Spring Pipeline Expression Language is ${ trigger['type'] }='manual' and if the condition is met, then the pipeline will fail.  A message will also be sent out Pipeline was triggered manually.  Please use Pipeline X instead to trigger.  This message can be modified to suit a customer's needs

{
"name": "Check Preconditions",
"preconditions": [
{
"context": {
"expression": "${ trigger['type'] }='manual'",
"failureMessage": "Pipeline was triggered manually. Please use Pipeline X instead to trigger"
},
"failPipeline": true,
"type": "expression"
}
],
"type": "checkPreconditions"
}
AIDA logo
AIDA logo

Harness AIDA Chatbot

AI Development Assistant


Today, March 15, 3:52pm

AIDA logo

Accelerate your software delivery with the powerful capabilities of Harness’s Platform.

AIDA logo

How can I help?

Log into your Harness Account to access AIDA