I’m trying to create a release for a project but i can’t seem to create the release. I Get the following error message: “There was a problem with your request. - No package version was specified for <our package name”
But the package is found and added in the selectedPackes for the release as you can see in the screenshot. It fails when i call the create release
“// # Create release
release = repositoryForSpace.Releases.Create(release, false);”
In order to dig in on this one, would you be able to private message me the full code that you’re running so I can dig in and try to reproduce it? If you are more comfortable with emailing it to support, you can do that as well with support@octopus.com.
I can send you the code i’m using right now, but you can’t call our octopus server which is on a private network, so i don’t know how much you can do with the code, when it’s the same as in the example. Everything until creating the release works.
Could it be an error in the version that we are running on our servers?
class Program
{
static void Main(string[] args)
{
OctopusRepository _repository;
OctopusConfiguration _octopusConfig = OctopusConfiguration.GetInstance();
var endpoint = new OctopusServerEndpoint(_octopusConfig.OctopusUrl, _octopusConfig.OctopusApiKey);
_repository = new OctopusRepository(endpoint);
// Get the space to work in
var space = _repository.Spaces.FindByName(_octopusConfig.OctopusSpaceName);
Console.WriteLine($"Using Space named {space.Name} with id {space.Id}");
// Create space specific repository
var repositoryForSpace = _repository.ForSpace(space);
// Get project by name
var project = repositoryForSpace.Projects.FindByName(_octopusConfig.OctopusProjectName);
Console.WriteLine($"Using Project named {project.Name} with id {project.Id}");
// Get channel by name
var channel = repositoryForSpace.Channels.FindByName(project, _octopusConfig.OctopusChannelName);
Console.WriteLine($"Using Channel named {channel.Name} with id {channel.Id}");
// Get environment by name
var environment = repositoryForSpace.Environments.FindByName(_octopusConfig.OctopusEnvironmentName);
Console.WriteLine($"Using Environment named {environment.Name} with id {environment.Id}");
// Get the deployment process template
Console.WriteLine("Fetching deployment process template");
var process = repositoryForSpace.DeploymentProcesses.Get(project.DeploymentProcessId);
var template = repositoryForSpace.DeploymentProcesses.GetTemplate(process, channel);
var release = new Octopus.Client.Model.ReleaseResource
{
ChannelId = channel.Id,
ProjectId = project.Id,
Version = template.NextVersionIncrement
};
// Set the package version to the latest for each package
// If you have channel rules that dictate what versions can be used
// you'll need to account for that by overriding the selected package version
Console.WriteLine("Getting action package versions");
foreach (var package in template.Packages)
{
var feed = repositoryForSpace.Feeds.Get(package.FeedId);
var latestPackage = repositoryForSpace.Feeds.GetVersions(feed, new[] { package.PackageId }).FirstOrDefault();
var selectedPackage = new Octopus.Client.Model.SelectedPackage
{
ActionName = package.ActionName,
Version = latestPackage.Version,
};
Console.WriteLine($"Using version {latestPackage.Version} for step {package.ActionName} package {package.PackageId}");
release.SelectedPackages.Add(selectedPackage);
}
// # Create release
release = repositoryForSpace.Releases.Create(release, false); // pass in $true if you want to ignore channel rules
Console.WriteLine($"Release id is: {release.Id}");
}
}
class OctopusConfiguration
{
private static OctopusConfiguration OctopusConfig;
private OctopusConfiguration()
{
OctopusUrl = ConfigurationManager.AppSettings["octopusUrl"];
OctopusApiKey = ConfigurationManager.AppSettings["octopusApiKey"];
OctopusSpaceName = ConfigurationManager.AppSettings["octopusSpaceName"];
OctopusProjectName = ConfigurationManager.AppSettings["octopusProjectName"];
OctopusChannelName = ConfigurationManager.AppSettings["octopusChannel"];
OctopusEnvironmentName = ConfigurationManager.AppSettings["octopusEnvironmentName"];
}
public string OctopusUrl { get; }
public string OctopusApiKey { get; }
public string OctopusSpaceName { get; }
public string OctopusProjectName { get; }
public string OctopusChannelName { get; }
public string OctopusEnvironmentName { get; }
public static OctopusConfiguration GetInstance()
{
if (OctopusConfig == null)
{
OctopusConfig = new OctopusConfiguration();
}
return OctopusConfig;
}
}
That script may have been created before PackageReferenceName was a variable within Octopus.
I added PackageReferenceName = package.PackageReferenceName
to
var selectedPackage = new Octopus.Client.Model.SelectedPackage
{
ActionName = package.ActionName,
Version = latestPackage.Version,
};
to get
var selectedPackage = new Octopus.Client.Model.SelectedPackage
{
ActionName = package.ActionName,
Version = latestPackage.Version,
PackageReferenceName = package.PackageReferenceName
};
And the script now works. I can’t confirm that this will work in all cases as I only tested it for one use-case, but please test it and let me know if it works for you.
I think its pretty powershell/rest api heavy, but the examples may be worth it just for converting to C#/Octo.Client if you want to stick with that combination.