Sanjeev
Sanjeev

Reputation: 495

Add/remove pipeline checks using REST API

I have a requirement to dynamically add/remove or enable disable approval and checks at azure DevOps pipeline environment. Is there a rest api for this?

enter image description here

Upvotes: 2

Views: 1667

Answers (3)

aolszowka
aolszowka

Reputation: 1390

This is an older question but we had a similar need. There does not appear to be a direct API To query this, but this GitHub Project pointed us in the right direction:

# GET ENVIRONMENT CHECKS (stored under .fps.dataProviders.data['ms.vss-pipelinechecks.checks-data-provider'].checkConfigurationDataList)
GET https://dev.azure.com/{{organization}}/{{project}}/_environments/{{environment_id}}/checks?__rt=fps&__ver=2

As mentioned above under .fps.dataProviders.data['ms.vss-pipelinechecks.checks-data-provider'].checkConfigurationDataList the list of who is authorized is provided.

The officially documented APIs can tell you that there are checks in place; for example:

GET https://dev.azure.com/{organization}/{project}/_apis/pipelines/checks/configurations?resourceType=environment&resourceId={id}

Can tell you that you have checks enabled (including an Approval check) but this isn't super useful as it does not give a list of who can Approve.

Note that you can get the list of environments (to get their resource ID) using this documented API:

GET https://dev.azure.com/{organization}/{project}/_apis/distributedtask/environments?api-version=7.1-preview.1

Upvotes: 1

Mengdi Liang
Mengdi Liang

Reputation: 18958

Is there a rest api for this?

Yes, it has. BUT, as what the @Krysztof said, we haven't provide such api documents to public as of today. This is because what you are looking for is one feature (configure Check and approval from environments ) that only support for YAML pipeline, and until now, we are developing but does not publish the corresponding rest api (for YAML) docs.

But, as work around, you can catch these apis from F12. Just do action from UI, then capture and analyze corresponds api records to found out what you are expecting.

Here I make the summary to you.

The api that used to add/delete approval and check to environment is:

https://dev.azure.com/{org name}/{project name}/_apis/pipelines/checks/configurations

The corresponding api method for add or delete is Post and DELETE.


Firstly, share you the request body samples which for approval and check added.

1) Add approval to this environment:

{
  "type": {
    "id": "8C6F20A7-A545-4486-9777-F762FAFE0D4D", // The fixed value for Approval 
    "name": "Approval"
  },
  "settings": {
    "approvers": [
      {
        "id": "f3c88b9a-b49f-4126-a4fe-3c99ecbf6303" // User Id 
      }
    ],
    "executionOrder": 1, 
    "instructions": "",
    "blockedApprovers": [],
    "minRequiredApprovers": 0,  
    "requesterCannotBeApprover": false // The pipeline requester allow to approve it.
  },
  "resource": {
    "type": "environment",
    "id": "1",           // Environment id
    "name": "Deployment" //Environment name
  },
  "timeout": 43200 // Set the available time(30d) of this approval pending. The measure unit is seconds.
}

2) Add task check, Azure function, Invoke rest api task and etc:

{
  "type": {
    "id": "fe1de3ee-a436-41b4-bb20-f6eb4cb879a7", // Fixed value if you want to add task check
    "name": "Task Check" //Fixed value
  },
  "settings": {
    "definitionRef": {
      "id": "537fdb7a-a601-4537-aa70-92645a2b5ce4", //task Id 
      "name": "AzureFunction", //task name
      "version": "1.0.10" //task version
    },
    "displayName": "Invoke Azure Function", //task display name configured
    "inputs": {
      "method": "POST",  
      "waitForCompletion": "false",
      "function": "csdgsdgsa",
      "key": "436467543756"  // These are all task inputs
    },
    "retryInterval": 5, // The re-try time specified.
    "linkedVariableGroup": "AzKeyGroup"// The variable group name this task linked with
  },
  "resource": {
    "type": "environment",
    "id": "2",
    "name": "Development"
  },
  "timeout": 43200
}

In this request body, you can find the corresponding task id from our public source code. Just check the task.json file of corresponding task.

3) Add template check:

{
  "type": {
    "id": "4020E66E-B0F3-47E1-BC88-48F3CC59B5F3", // Fixed value for template check added.
    "name": "ExtendsCheck" //Fixed value
  },
  "settings": {
    "extendsChecks": [
      {
        "repositoryType": "git", // github for Github source, bitbucket for Bitbucket source
        "repositoryName": "MonnoPro", 
        "repositoryRef": "refs/heads/master",
        "templatePath": "tem.yml"
      }
    ]
  },
  "resource": {
    "type": "environment",
    "id": "6",
    "name": "development"
  }
}

In this body, if the template source is coming from github or bitbucket, the value of repositoryName should like {org name}/{repos name}.

Hope these are helps.

Upvotes: 6

Krzysztof Madej
Krzysztof Madej

Reputation: 40543

This is not supported at the moment. You can upvote feature request to show your interest here.

Upvotes: 0

Related Questions