如何使用NodeJS中的azure-devops-node-api库将文件推送到TFS?

时间:2019-12-04 08:13:04

标签: node.js azure azure-devops azure-devops-rest-api azure-repos

我正在尝试将文件推送到Azure Repos中的存储库。我正在使用azure-devops-node-api库来连接文件并将文件推送到存储库。我是NodeJS的新手。请找到下面的代码。我不确定如何继续进行下去。

请帮助!

const orgUrl = "https://dev.azure.com/orgname";
const azure = require('azure-devops-node-api');
var accessToken = "ACCESS_TOKEN";
var authHandler = azure.getPersonalAccessTokenHandler(accessToken);
var connection = new azure.WebApi(orgUrl, authHandler);
connection.getGitApi().then( gitapi1 => {
    // I don't know how to use gitapi1 to commit and push the file
});

1 个答案:

答案 0 :(得分:2)

  

如何使用NodeJS中的azure-devops-node-api库将文件推送到TFS?

要将文件推送到Azure Repos中的存储库,我们可以使用git.createPush将代码推送到Azure Repos中的存储库。要使用git.createPush,我们需要获取repostoryId。您可以在下面的示例演示中查看更多详细信息:

import * as azdev from "azure-devops-node-api";
import * as gitclient from "azure-devops-node-api/GitApi"
//import { GitRepository } from 'azure-devops-node-api/interfaces/TfvcInterfaces';
import { GitRepository, GitPush,GitCommitRef,GitCommit, GitChange, ItemContent, GitItem, GitRefUpdate } from 'azure-devops-node-api/interfaces/GitInterfaces';
let orgUrl = 'https://dev.azure.com/yourorg'
let repostories:GitRepository[];
let token: string = "PATTokne";//patToken 
let project:string = 'projectName'
let repostoryName = 'repostoryName';
let authHandler = azdev.getPersonalAccessTokenHandler(token); 
let connection = new azdev.WebApi(orgUrl, authHandler);
let file:string = 'C:\\Users\\xxx\\typescript-node\\test.png';
let refName:string = 'refs/heads/master';
var fs = require('fs');
var base64str = base64_encode(file);
console.log(base64str);
// function to encode file data to base64 encoded string
function base64_encode(filePath:string) {
    // read binary data
    var bitmap = fs.readFileSync(file);
    // convert binary data to base64 encoded string
    return new Buffer(bitmap).toString('base64');
}
async function run(filePath:string,refName:string,project:string,repostoryName:string)
{  
    let git:gitclient.IGitApi = await connection.getGitApi();
    repostories = await git.getRepositories(project);
    let gitrepo = repostories.find(element => element.name === repostoryName);
    let repostoryId = gitrepo?.id;
    let gitChanges:GitChange[] = [<GitChange>{
        changeType:1,
        newContent:<ItemContent>{content:base64str,contentType:1 }, //0-> RawText = 0, Base64Encoded = 1,
        item:<GitItem>{
            path:'/testUpdate.png'
        }
    }];
    if(typeof(repostoryId) ==="string")
    {
    let ref = (await git.getRefs(repostoryId,project)).find(element => element.name === refName)
    let refUpdates:GitRefUpdate[] = [<GitRefUpdate> {
        name:ref?.name,
        oldObjectId:ref?.objectId //get ref->object id
      }];

    let gitCommitRef:GitCommitRef[] = [
        <GitCommitRef>{
            changes:gitChanges,
            comment:'Add a file'
        }
    ]
    let gitPush:GitPush = <GitPush>{
        commits:gitCommitRef,
        refUpdates:refUpdates,
        repository:gitrepo
    };
     console.log(repostoryId)
    await git.createPush(gitPush,repostoryId,project);

    }


}
run(file,refName,project,repostoryName);
console.log("test");

希望这会有所帮助。