【问题标题】:Octopus client, getting version from project name in C#Octopus 客户端,从 C# 中的项目名称获取版本
【发布时间】:2016-06-29 11:51:07
【问题描述】:

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

所以,我已经登陆了这个项目,以更新网页上的版本号,监控我们部署的一些章鱼项目。我一直在环顾章鱼客户,但并没有真正得到任何地方。到目前为止我最好的是:

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

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

我必须使用的现有代码用于从本地文件中解析版本,所以这一切都在窗口之外。此外,现有代码仅处理项目的实际名称,例如“AWOBridge”,而不是它们的ProjectId,即“Projects-27”。

现在我唯一的选择是手动编写一个 keyList 或映射来将我拥有的名称与章鱼客户端中的 ID 关联起来,我当然不会这样做,因为在我看来它不是很好的可扩展性或良好的代码实践.

因此,如果有人对如何直接在章鱼客户端使用名称并从中获取版本号有任何想法,我会非常感谢它。

我会在等待时进入章鱼客户端。看看我能不能打败你!

【问题讨论】:

    标签: c# client octopus-deploy


    【解决方案1】:

    我猜我打败了你!

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

    我最终使用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);
    

    仪表板很棒,因为它包含网络仪表板显示的所有信息。因此,您可以使用 Project、Release、Deployment 和 Environment 以及它们包含的所有信息。

    希望这对将来的某人有所帮助!

    【讨论】:

      【解决方案2】:

      我正在使用LINQPad 使用 Octopus 客户端库为 Octopus 自动化运行 C# sn-ps,并且我想出了以下方法来获取使用正则表达式模式的项目的任何版本。如果您使用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();;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多