【发布时间】:2018-05-14 16:12:23
【问题描述】:
情况:
我目前正在通过 bitbucket -> vsts -> azure 自动化 CI/CD 配置。
我的理想结果是能够将我的配置值复制粘贴(或手动输入)到它们各自的控制台程序中,并让应用程序配置整个 CI/CD 考验,而无需单击所有 Web 界面。现在可以在 Bitbucket 和 Azure 中使用,但通过 REST API 创建 VSTS CI/CD 配置被证明是困难的。
Azure resources 和 Bitbucket 配置当前是通过与 REST API 对话的简单 .NET 控制台应用程序创建的。基本上将所有值(azure input values/bitbucket input values)复制粘贴(或手动输入)到控制台应用程序中,它将在 5 分钟内配置所有内容。
问题:
现在我面临着尝试在 VSTS 中自动化构建配置和发布配置的困难部分。 Microsoft Docs 在documentation of VSTS client libraries 上不是很好。
老实说,我不知道如何通过 API 或客户端库create a build definition。
-
BuildHttpClient 有三种我可以使用的方法:
public virtual Task<BuildDefinition> CreateDefinitionAsync(BuildDefinition definition, Guid project, int? definitionToCloneId = null, int? definitionToCloneRevision = null, object userState = null, CancellationToken cancellationToken = default(CancellationToken)); public virtual Task<BuildDefinition> CreateDefinitionAsync(BuildDefinition definition, int? definitionToCloneId = null, int? definitionToCloneRevision = null, object userState = null, CancellationToken cancellationToken = default(CancellationToken)); public virtual Task<BuildDefinition> CreateDefinitionAsync(BuildDefinition definition, string project, int? definitionToCloneId = null, int? definitionToCloneRevision = null, object userState = null, CancellationToken cancellationToken = default(CancellationToken)); -
BuildDefinition 具有以下属性。
namespace Microsoft.TeamFoundation.Build.WebApi { [DataContract] public class BuildDefinition : BuildDefinitionReference { public BuildDefinition(); public List<string> Tags { get; } public PropertiesCollection Properties { get; } public List<RetentionPolicy> RetentionRules { get; } public List<Demand> Demands { get; } public IDictionary<string, BuildDefinitionVariable> Variables { get; } public List<BuildTrigger> Triggers { get; } public ProcessParameters ProcessParameters { get; set; } public BuildRepository Repository { get; set; } public List<BuildOption> Options { get; } public List<BuildDefinitionStep> Steps { get; } public bool BadgeEnabled { get; set; } public int JobTimeoutInMinutes { get; set; } public BuildAuthorizationScope JobAuthorizationScope { get; set; } public string DropLocation { get; set; } public string Description { get; set; } public string Comment { get; set; } public string BuildNumberFormat { get; set; } public Build LatestBuild { get; } public Build LatestCompletedBuild { get; } } }
如您所见,构建定义的最重要属性是只读的。
如何通过 REST API 创建构建定义?是否有更好的 VSTS 替代方案可以让我这样做?
【问题讨论】:
-
你考虑过使用 YAML 构建吗?那么您的构建定义只是源代码控制的 YAML 文件。
-
YAML 的缺点是目前不支持任务组/模板。而且它只支持TFS Git & GitHub,不支持bitbucket。 :)
标签: c# continuous-integration azure-pipelines build-definition azure-devops-rest-api