八达通客户端,从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();;
}
首先,我是章鱼客户端的新手,在发帖前第一次使用它。
所以,我已经着手这个项目来更新网页上的版本号,该网页监控我们的一些章鱼部署项目。我一直在四处寻找章鱼客户端,但没有真正找到任何地方。到目前为止我最好的是:
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();;
}