八达通客户端,从C#中的项目名称获取版本

Octopus client, getting version from project name in C#

首先,我是章鱼客户端的新手,在发帖前第一次使用它。

所以,我已经着手这个项目来更新网页上的版本号,该网页监控我们的一些章鱼部署项目。我一直在四处寻找章鱼客户端,但没有真正找到任何地方。到目前为止我最好的是:

OctopusServerEndpoint endPoint = new OctopusServerEndpoint(server, apiKey);
OctopusRepository repo = new OctopusRepository(endPoint);
var releases = repo.Releases.FindAll();

从这些版本中我可以获得 ProjectId 甚至 Version,问题是 releases 是 600 强,我只寻找其中的 15 个。

我必须使用的现有代码用于解析来自本地文件的版本,所以这就是 window。此外,现有代码仅处理项目的实际名称,如 "AWOBridge",而不是它们的 ProjectId,即 "Projects-27".

现在我唯一的选择是手动编写一个 keyList 或 map 以将我拥有的名称与章鱼客户端中的 ID 相关联,我当然不愿意这样做,因为它不是很好的可扩展性或良好的代码实践我的意见。

因此,如果有人知道如何直接使用章鱼客户端的名称并从中获取版本号,我将非常感激。

我会在等待的时候进入章鱼客户端。让我们看看我是否打败了你!

猜猜我比你早了!

如果有人遇到同样的问题,我会在这里留下答案。

我最终使用 dashboard 来获得我需要的东西:

OctopusServerEndpoint endPoint = new OctopusServerEndpoint(server, apiKey);
OctopusRepository repo = new OctopusRepository(endPoint);
DashboardResource dash = repo.Dashboards.GetDashboard();
List<DashboardItemResource> items = dash.Items;
DashboardItemResource item = new DashboardItemResource();
List<DashboardProjectResource> projs = dash.Projects;
var projID = projs.Find(x => x.Name == projectName).Id;
item = items.Find(x => x.ProjectId == projID && x.IsCurrent == true);

仪表板很棒,因为它包含网络仪表板显示的所有信息。因此,您可以使用项目、发布、部署和环境及其包含的所有信息。

希望这对以后的人有所帮助!

我正在使用 LINQPad to run C# snippets for Octopus automation using the Octopus Client library and I have come up with following to get any version of a project making use of Regular expression pattern. It works quite well if you use Pre-release 语义版本控制。

例如获取项目的最新版本:

var project = Repo.Projects.FindByName("MyProjectName");
var release = GetReleaseForProject(project);

要获取版本中具有 'rc1' 的特定版本,例如(如果您在发布到 Octopus 的版本中使用源代码分支名称也很有用:

var release = GetReleaseForProject(project, "rc1");

public ReleaseResource GetReleaseForProject(ProjectResource project, string versionPattern = "")
{
    // create compiled regex expression to use for search
    var regex = new Regex(versionPattern, RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
    var releases = Repo.Projects.GetReleases(project);
    if (!string.IsNullOrWhiteSpace(versionPattern) && !releases.Items.Any(r => regex.IsMatch(r.Version)))
    {
        return null;
    }
    return (!string.IsNullOrWhiteSpace(versionPattern)) ? releases.Items.Where(r => regex.IsMatch(r.Version))?.First() : releases.Items?.First();;
}