ItFlyingStart
ItFlyingStart

Reputation: 271

How to trigger the manual deployment in Azure DevOps release pipeline from API

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.

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.

Manual trigger

Is there a way to start the "manual trigger" via API?

Upvotes: 0

Views: 847

Answers (1)

Huntz
Huntz

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

Related Questions