Reputation: 271
I'm able to queue a new release in Azure DevOps release pipeline with the next codes:
public async Task QueueRelease(string releaseDefinitionName)
{
string teamProjectName = GetTeamProjectName();
using (var connection = Authenticate())
using (var releaseClient = connection.GetClient<ReleaseHttpClient2>())
using (var buildClient = connection.GetClient<BuildHttpClient>())
{
var releaseDefinition = (await releaseClient.GetReleaseDefinitionsAsync2(teamProjectName, releaseDefinitionName, ReleaseDefinitionExpands.Artifacts)).SingleOrDefault();
var primaryArtifact = releaseDefinition.Artifacts.Where(a => a.IsPrimary).SingleOrDefault();
var projectName = primaryArtifact.DefinitionReference["project"].Id;
var buildDefinitionId = Convert.ToInt32(primaryArtifact.DefinitionReference["definition"].Id);
// Get the latest successful build from the project and build definition id
var lastBuild = buildClient.GetBuildsAsync(projectName, new[] { buildDefinitionId }, statusFilter: BuildStatus.Completed).Result
.OrderByDescending(b => b.Id)
.FirstOrDefault();
// Create the draft release, and associate it to the latest corresponding build
var metadata = new ReleaseStartMetadata
{
DefinitionId = releaseDefinition.Id,
IsDraft = true,
Description = "Draft",
Artifacts = new[]
{
new ArtifactMetadata
{
Alias = primaryArtifact.Alias,
InstanceReference = new BuildVersion
{
Id = lastBuild.Id.ToString(),
Name = lastBuild.BuildNumber
}
}
}
};
var release = await releaseClient.CreateReleaseAsync(metadata, teamProjectName);
// Activate the release
var updateMetadata = new ReleaseUpdateMetadata { Status = ReleaseStatus.Active, Comment = "Test release" };
release = await releaseClient.UpdateReleaseResourceAsync(updateMetadata, teamProjectName, release.Id);
release.Environments[0].Status = EnvironmentStatus.InProgress;
release = await releaseClient.UpdateReleaseAsync(release, teamProjectName, release.Id);
}
}
However the release definition that I want to use, has the trigger setting "Manual only". And I don't want to change the release definition.
After the release has been added to the queue, I still need to go to Azure DevOps portal and click on "Deploy" to start the release process per environment.
Is there a way to start the "manual trigger" via API?
Upvotes: 0
Views: 847
Reputation: 1
you can try the following:
// Activate the release
var updateMetadata = new ReleaseUpdateMetadata { Status = ReleaseStatus.Active, Comment = "Activate Release" };
release = await releaseHttpClient.UpdateReleaseResourceAsync(updateMetadata, teamProjectName, release.Id).ConfigureAwait(false);
// Trigger the deployment on a specific environment
release.Environments[0].Status = EnvironmentStatus.InProgress;
release = await releaseHttpClient.UpdateReleaseAsync(release, teamProjectName, release.Id).ConfigureAwait(false);
Upvotes: 0