 Azure DevOps Pipeline Action
 Azure DevOps Pipeline Action
This action allows you to invoke pipelines in your Azure DevOps project.
invoke-azure-devops-pipeline.yaml---
apiVersion: mission-control.flanksource.com/v1
kind: Playbook
metadata:
  name: invoke-azure-devops-pipelines
  namespace: default
spec:
  parameters:
    - name: project
      label: Project name
      default: Demo1
    - name: pipeline
      label: Pipeline ID
  actions:
    - name: Invoke pipeline
      azureDevopsPipeline:
        org: flanksource
        project: '{{.params.project}}'
        token:
          valueFrom:
            secretKeyRef:
              name: azure-devops
              key: token
        pipeline:
          id: '{{.params.pipeline}}'
| Field | Description | Scheme | 
|---|---|---|
| name* | Step Name | 
 | 
| org* | Azure DevOps org name | 
 | 
| pipeline* | Azure pipeline to invoke | |
| project* | Azure DevOps project name | 
 | 
| token* | Azure DevOps PAT | |
| parameters | Pipeline parameters | |
| delay | A delay before running the action e.g.  | 
 | 
| filter | Conditionally run an action | CEL with Playbook Context | 
| runsOn | Which runner (agent) to run the action on | |
| templatesOn | Where templating (and secret management) of actions should occur | 
 | 
| timeout | Timeout on this action. | 
Pipeline
| Field | Description | Scheme | Required | Templatable | 
|---|---|---|---|---|
| id | Pipeline ID. | string | true | true | 
| version | Pipeline version. | string | false | true | 
Parameters
| Field | Description | Scheme | Required | Templatable | 
|---|---|---|---|---|
| resources | The resources the run requires. | map[string]any | false | true | 
| templateParameters | The template parameters the run requires. | map[string]any | false | true | 
| variables | The variables the run requires. | map[string]any | false | true | 
| stagesToSkip | The stages to skip. | []string | false | true | 
Templating
CEL Expressions
The following variables can be used within the CEL expressions of filter,  if,  delays and parameters.default:
| Field | Description | Schema | 
|---|---|---|
| config | Config passed to the playbook | ConfigItem | 
| component | Component passed to the playbook | Component | 
| check | Canary Check passed to the playbook | Check | 
| params | User provided parameters to the playbook | map[string]string | 
| env | Environment variables defined on the playbook | map[string]string | 
| user.name | Name of the user who invoked the action | string | 
| user.email | Email of the user who invoked the action | string | 
Conditionally Running Actions
Playbook actions can be selectively executed based on CEL expressions. These expressions must either return
- a boolean value (trueindicating run the action & skip the action otherwise)
- or a special function among the ones listed below
| Function | Description | 
|---|---|
| always() | run no matter what; even if the playbook is cancelled/fails | 
| failure() | run if any of the previous actions failed | 
| skip() | skip running this action | 
| success() | run only if all previous actions succeeded (default) | 
| timeout() | run only if any of the previous actions timed out | 
delete-kubernetes-pod.yaml---
apiVersion: mission-control.flanksource.com/v1
kind: Playbook
metadata:
  name: notify-send-with-filter
spec:
  parameters:
    - name: message
      label: The message for notification
      default: '{{.config.name}}'
  configs:
    - types: 
        - Kubernetes::Pod
  actions:
    - name: Send notification
      exec:
        script: notify-send "{{.config.name}} was created"
    - name: Bad script
      exec:
        script: deltaforce
    - name: Send all success notification
      if: success() # this filter practically skips this action as the second action above always fails
      exec:
        script: notify-send "Everything went successfully"
    - name: Send notification regardless
      if: always()
      exec:
        script: notify-send "a Pod config was created"
Defaulting Parameters
delete-kubernetes-pod.yamlapiVersion: mission-control.flanksource.com/v1
kind: Playbook
metadata:
  name: edit
spec:
  title: 'Edit Kustomize Resource'
  icon: flux
  parameters:
    //highligh-next-line
    - default: 'chore: update $(.config.type)/$(.config.name)'
      name: commit_message
Go Templating
When templating actions with Go Templates, the context variables are available as fields of the template's context object . eg .config, .user.email
Templating Actions
delete-kubernetes-pod.yamlapiVersion: mission-control.flanksource.com/v1
kind: Playbook
metadata:
  name: scale-deployment
spec:
  description: Scale Deployment
  configs:
    - types:
        - Kubernetes::Deployment
  parameters:
    - name: replicas
      label: The new desired number of replicas.
  actions:
    - name: kubectl scale
      exec:
        script: |
          kubectl scale --replicas={{.params.replicas}} \
            --namespace={{.config.tags.namespace}} \
            deployment {{.config.name}}
Functions
| Function | Description | Return | 
|---|---|---|
| getLastAction() | Returns the result of the action that just run | Action Specific | 
| getAction({action}) | Return the result of a specific action | Action Specific | 
Reusing Action Results
action-results.yamlapiVersion: mission-control.flanksource.com/v1
kind: Playbook
metadata:
  name: use-previous-action-result
spec:
  description: Creates a file with the content of the config
  configs:
    - types:
        - Kubernetes::Pod
  actions:
    - name: Fetch all changes
      sql:
        query: SELECT id FROM config_changes WHERE config_id = '{{.config.id}}'
        driver: postgres
        connection: connection://postgres/local
    - name: Send notification
      if: 'last_result().count > 0'
      notification:
        title: 'Changes summary for {{.config.name}}'
        connection: connection://slack/flanksource
        message: |
          {{$rows:=index last_result "count"}}
          Found {{$rows}} changes