从 Azure DevOps 任务在 Nexus 上上传文件失败 "cURL"

File upload fail on Nexus from Azure DevOps task "cURL"

我正在尝试使用 "cURL" 任务从 Azure DevOps 管道上传文件 txt 或 .nupkg。但文件未上传并显示 1 条警告消息。

我的配置-

当前输出-

预期结果- 在 Nexus 服务器上上传文件。

请指出我缺少的内容!

正如您从日志中看到的错误消息:Multiple request required,这是由 API 此任务生成的 Nexus 不正确引起的。其实在log的第一行可以看到它的API this cUrl task generated:

您可以在您的本地命令中测试它,并且会看到它失败并出现相同的错误“400 Bad request”。此任务无法用于实现上传文件到 Nexus。参考其source code file

curlRunner.arg('-T')
        // arrayify the arg so vsts-task-lib does not try to break args at space
        // this is required for any file input that could potentially contain spaces
        curlRunner.arg([uploadFiles]);

        curlRunner.arg(url);

        if (redirectStderr) {
            curlRunner.arg('--stderr');
            curlRunner.arg('-');
        }

        if (options) {
            curlRunner.line(options);
        }

        if (username || password) {
            var userPassCombo = "";
            if (username) {
                userPassCombo += username;
            }

            userPassCombo += ":";

            if (password) {
                userPassCombo += password;
            }

            curlRunner.arg('-u');
            curlRunner.arg(userPassCombo);
        }

这是 API 任务生成的 uri。 但是 根据 Nexus 官方文档,正确的 cUrl API 应该是这样的:

curl -v -F r={repostory} -F e={extension} -F g={group id} -F a={artifact id} -F v={version} -F p={packaging} -F file={file path} -u {username}:{password} http://localhost:8081/repository/{repostory}/

对比这个正确的Uri,可以看到生成和使用的任务没有完成。这就是您收到警告消息的原因:400 Bad request - cUrl API body does not completed, it required more multiple requests.

要将文件上传到 Nexus,您可以使用带有 cUrl API 脚本的命令行任务将文件上传到 Nexus 存储库管理器。