使用Azure DevOps REST API将新文件和文件夹添加到Azure Git存储库

时间:2020-08-05 10:06:41

标签: azure-devops azure-devops-rest-api

如何使用Azure DevOps REST API向Azure Git存储库添加新文件和文件夹?

我想使用Azure DevOps REST API将一些静态文件添加到我的存储库中。

https://docs.microsoft.com/en-us/rest/api/azure/devops/git/repositories?view=azure-devops-rest-5.1

是否可以通过REST API使用任何选项?

还是CICD或通过c#提供的其他任何自动化方式?

1 个答案:

答案 0 :(得分:3)

我找到了答案,我们可以使用Git Push REST API uri

https://docs.microsoft.com/en-us/rest/api/azure/devops/git/pushes/create?view=azure-devops-rest-5.1

按照您的C#代码中的以下步骤操作

  1. 致电GetRef REST https://dev.azure.com/{0}/{1}/_apis/git/repositories/{2}/refs{3} 这应该返回存储库分支的对象,您可以用它来推送更改

  2. 接下来,调用Push REST API在文件夹中创建文件夹或文件 https://dev.azure.com/{0}/{1}/_apis/git/repositories/{2}/pushes{3}

               var changes = new List<ChangeToAdd>();
                //Add Files
    
                //pnp_structure.yml
                var jsonContent = File.ReadAllText(@"./static-files/somejsonfile.json");
    
                ChangeToAdd changeJson = new ChangeToAdd()
                {
                    changeType = "add",
                    item = new ItemBase() { path = string.Concat(path, "/[your-folder-name]/somejsonfile.json") },
                    newContent = new Newcontent()
                    {
                        contentType = "rawtext",
                        content = jsonContent
                    }
                };
                changes.Add(changeJson);
    
    
                CommitToAdd commit = new CommitToAdd();
                commit.comment = "commit from code";
                commit.changes = changes.ToArray();
    
                var content = new List<CommitToAdd>() { commit };
                var request = new
                {
                    refUpdates = refs,
                    commits = content
                };
    
         var personalaccesstoken = _configuration["azure-devOps-configuration-token"];
    
        var authorization = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", personalaccesstoken)));
    
        _logger.LogInformation($"[HTTP REQUEST] make a http call with uri: {uri} ");
    
         //here I making http client call 
         // https://dev.azure.com/{orgnizationName}/{projectName}/_apis/git/repositories/{repositoryId}/pushes{?api-version}
        var result = _httpClient.SendHttpWebRequest(uri, method, data, authorization);