Javascript 从jenkins下载zip

Javascript 从jenkins下载zip,javascript,typescript,jenkins,azure-pipelines-build-task,Javascript,Typescript,Jenkins,Azure Pipelines Build Task,我正在构建一个VSTS任务,并试图从jenkins服务器下载一个zip。我知道我的URL是写b/c如果我点击日志输出中的链接(用于调试),它会下载。我知道我的凭据是正确的b/.c我能够查询服务器,并遍历所有的内部版本号。以下是我到目前为止的情况。错误是当我打开zip时,我得到了一个意外的文件结尾。如果我将var-blob=xhr.responseText更改为var-blob=xhr.response我的zip存储仅为1KB(预计为14583)。如果我把它留给xhr.responseText,那

我正在构建一个VSTS任务,并试图从jenkins服务器下载一个zip。我知道我的URL是写b/c如果我点击日志输出中的链接(用于调试),它会下载。我知道我的凭据是正确的b/.c我能够查询服务器,并遍历所有的内部版本号。以下是我到目前为止的情况。错误是当我打开zip时,我得到了一个意外的文件结尾。如果我将
var-blob=xhr.responseText
更改为
var-blob=xhr.response
我的zip存储仅为1KB(预计为14583)。如果我把它留给
xhr.responseText
,那么我的下载量是27393KB。文档中说应该是
xhr.response
,那么我做错了什么

export async function DownloadArtifact(build, buildDefName: string, targetDir: string, auth: string){

let requestUrl = `${build.url}artifact/${buildDefName}/*zip*/${buildDefName}_${build.id}.zip`;
console.log(`Download request: ${requestUrl}`);
console.log(`target directory: ${targetDir}`);

let xhr = new XMLHttpRequest();

xhr.open("GET", requestUrl, false);
xhr.setRequestHeader("Content-type", "Application/zip");
xhr.setRequestHeader("Authorization", `Basic ${auth}`);
xhr.responseType = 'arraybuffer';
xhr.onload = async function(e){

    let tmpName : string = tmp.tmpNameSync();
    tmpName = tmpName + ".zip";
    console.log(`File Name: ${tmpName}`);

    var blob = xhr.responseText;
    await fs.writeFile(tmpName, blob, function(err){
        if(err)
        {
            console.log(err);
            return;
        }

        console.log(`Writing file ${tmpName}`);

        console.log(`##vso[task.setvariable variable=gameZipPath;isSecret=false;isOutput=true;]${tmpName}`);

    });
}

xhr.send();
}

您的任务是打算用作生成任务还是用作发布任务?如果是发布任务,为什么不直接使用Jenkins的工件?

您能用文本编辑器查看下载内容吗?有时,它会变成一条实际有用的消息,指示web服务器遇到了什么错误。有时它只是二进制的废话,但值得一试。当将blob分配给responseText时,它是二进制的无意义的,带有两个ANSII字符和工件名称/路径。当分配给响应时,它只是“未定义”写入文件。因此,使用response时可能没有设置blob?虽然这通常是正确的答案,但我们的文件大小在2 Gb的范围内,并且将在本地传递,而不是公开传递,我们不希望每次都必须从VST下载,因为我们可以将其保留在网络中。但除此之外,是的,这是一个非常好的回答。代理将从Jenkins下载工件,因此据我所知,它们不会通过VST。只要Jenkins服务器和VSTS代理在同一个网络中,传输将有效地在本地进行。我看不出创建自己的下载工件任务与使用Microsoft提供的默认工件任务有什么区别。看见