Using ReleaseManagement REST API's
Refer the documentation https://www.visualstudio.com/integrate/api/rm/overview (below samples uses alternate credential for authentication [https://www.visualstudio.com/en-us/integrate/get-started/auth/overview])
1. How to get ReleaseDefinition using ReleaseManagement REST API's
public static async void GetReleaseDefinitions()
{
try
{
var username = "<alternate credential username>";
var password = "<password>";
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(
System.Text.ASCIIEncoding.ASCII.GetBytes(
string.Format("{0}:{1}", username, password))));
using (HttpResponseMessage response = client.GetAsync( "https://{account}.vsrm.visualstudio.com/{projectIdorName}/_apis/release/definitions").Result)
{
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
2. How to update name of an existing ReleaseDefinition?
public static async void UpdateReleaseDefinitionName()
{
try
{
var username = "<username>";
var password = "<password>";
var definitionUri = "https://{0}.vsrm.visualstudio.com/{1}/_apis/release/definitions/{2}/?api-version={3}";
var updateDefinitionUri = "https://{0}.vsrm.visualstudio.com/{1}/_apis/release/definitions/?api-version={2}";
using (HttpClient client = new HttpClient())
{
//Using basic auth for authorization here. https://www.visualstudio.com/en-us/integrate/get-started/auth/overview
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(
System.Text.ASCIIEncoding.ASCII.GetBytes(
string.Format("{0}:{1}", username, password))));
string accountName = "<accountName>";
string projectName = "<projectName>";
int definitionId = 1;
string apiVersion = "3.0-preview.1"; // use api-version = 2.2-preview.1 for TFS onpremise
string responseBody = null;
using (HttpResponseMessage response = client.GetAsync(string.Format(definitionUri, accountName, projectName, definitionId, apiVersion)).Result)
{
response.EnsureSuccessStatusCode();
responseBody = await response.Content.ReadAsStringAsync();
}
dynamic definitionJsonObject = JObject.Parse(responseBody);
// updating name of the release definition object
definitionJsonObject.name = "Fabirkam-New";
var updatedDefinitionObject = new StringContent(definitionJsonObject.ToString(), Encoding.UTF8, "application/json");
using (HttpResponseMessage response = client.PutAsync(string.Format(updateDefinitionUri, accountName, projectName, apiVersion), updatedDefinitionObject).Result)
{
response.EnsureSuccessStatusCode();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
3. How to create a release for a given ReleaseDefinition?
public static async void CreateRelease()
{
try
{
var username = "<username>";
var password = "<password>";
var releaseUri = "https://{0}.vsrm.visualstudio.com/{1}/_apis/release/releases/?api-version={2}";
using (HttpClient client = new HttpClient())
{
//Using basic auth for authorization here. https://www.visualstudio.com/en-us/integrate/get-started/auth/overview
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(
System.Text.ASCIIEncoding.ASCII.GetBytes(
string.Format("{0}:{1}", username, password))));
string accountName = "<accountname>";
string projectName = "<projectname>";
string apiVersion = "3.0-preview.1"; // use api-version = 2.2-preview.1 for TFS onpremise
// Specify definitionId, alias, instancereference id and name correctly. InstanceReference name is optional for VSTS but madatory for TFS onpremise.
string startReleaseMetaData =
@"{ "
+ "\"definitionId\": 6, "
+ "\"artifacts\": "
+ "[ { \"alias\": \"FabrikamBD\", \"instanceReference\": { \"id\": \"3\", \"name\": \"20160415.2\" }}]}";
var releaseContent = new StringContent(startReleaseMetaData, Encoding.UTF8, "application/json");
using (HttpResponseMessage response = client.PostAsync(string.Format(releaseUri, accountName, projectName, apiVersion), releaseContent).Result)
{
response.EnsureSuccessStatusCode();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
4. How to start a release?
public static async void StartRelease()
{
try
{
var username = "<username>";
var password = "<password>";
string accountName = "<accountName>";
string projectName = "<projectName>";
//One can get the releaseEnvironmentId after doing a GET on the particular release to start
int releaseId = <releaseId>;
int releaseEnvironmentId = <releaseEnvironmentId>;
string apiVersion = "3.0-preview.2"; // use api-version = 2.2-preview.1 for TFS onpremise
var startReleaseUri = "https://{0}.vsrm.visualstudio.com/{1}/_apis/release/releases/{2}/environments/{3}?api-version={4}";
using (HttpClient client = new HttpClient())
{
//Using basic auth for authorization here. https://www.visualstudio.com/en-us/integrate/get-started/auth/overview
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(
System.Text.ASCIIEncoding.ASCII.GetBytes(
string.Format("{0}:{1}", username, password))));
var method = new HttpMethod("PATCH");
string startReleaseMetaData = "{\"status\":2}"; // status = 2 mean InProgress
var request = new HttpRequestMessage(method, string.Format(startReleaseUri, accountName, projectName, releaseId, releaseEnvironmentId, apiVersion))
{
Content = new StringContent(startReleaseMetaData, Encoding.UTF8, "application/json")
};
using (HttpResponseMessage response = client.SendAsync(request).Result)
{
response.EnsureSuccessStatusCode();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
4. How to approve a release?
public static async void ApproveRelease()
{
try
{
var username = "<username>";
var password = "<password>";
string accountName = "<accountName>";
string projectName = "<projectName";
//One can get the approvalid after doing a GET Approval or GET on the release having approvals
int approvalid = 31;
string apiVersion = "3.0-preview.1"; // use api-version = 2.2-preview.1 for TFS onpremise
var approveReleaseUri = "https://{0}.vsrm.visualstudio.com/{1}/_apis/release/approvals/{2}?api-version={3}";
using (HttpClient client = new HttpClient())
{
//Using basic auth for authorization here. https://www.visualstudio.com/en-us/integrate/get-started/auth/overview
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(
System.Text.ASCIIEncoding.ASCII.GetBytes(
string.Format("{0}:{1}", username, password))));
var method = new HttpMethod("PATCH");
string approvveReleaseMetaData = "{\"status\":2, \"comments\":\"Good to go\"}"; // status = 2 mean Approved
var request = new HttpRequestMessage(method, string.Format(approveReleaseUri, accountName, projectName, approvalid, apiVersion))
{
Content = new StringContent(approvveReleaseMetaData, Encoding.UTF8, "application/json")
};
using (HttpResponseMessage response = client.SendAsync(request).Result)
{
response.EnsureSuccessStatusCode();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}