SBT基本身份验证问题

时间:2018-07-11 22:25:41

标签: sbt bamboo

我正在我们的构建服务器(bamboo)上为多个buildagent设置SBT。为此,我为每个代理创建了一个单独的目录,其中包含特定于代理的配置和.ivy主页,以确保完全实现代理隔离。 构建本身就是这样的调用:

/sbt-launcher-packaging-0.13.13/bin/sbt -java-home /usr/lib/jvm/jdk1.7.0_79 -Dsbt.override.build.repos=true -Dsbt.repository.config=/data/bamboo/localbuildagents/${bamboo.agentId}/sbt/sbt.conf -Dsbt.ivy.home=/data/bamboo/localbuildagents/${bamboo.agentId}/.ivy2 clean compile dist

凭据(基本领域)存储在启动主服务器的用户主目录下(〜/ .sbt / .credentials和〜/ .sbt / 0.13 / plugins / credentials.sbt)

每个sbt.conf都包含特定于代理的存储库,例如特定于代理的本地Maven存储库和远程工件的URL。

[repositories]
  local-buildagent-mvn:  file:///data/bamboo/home/.m2/AGENT-xxxxxxxx/repository/
  ivy-release:   http://xxx/artifactory/ivy-release/,  [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
  mvn-release:   http://xxx/artifactory/libs-release/
  mvn-snapshot:  http://xxx/artifactory/libs-snapshot/  

[ivy]
  ivy-home:   file:///data/bamboo/localbuildagents/xxxxxxxx/.ivy2/

我在sbt检查远程工件仓库时遇到登录问题(首先出现HTTP错误401,然后出现令人惊讶的403)。具有相同凭据和回购URL的卷毛可以按预期工作(首先是401,然后是200)。

我猜想,如果-D开关用于sbt启动,则不会考虑凭据。我真的被任何忠告深深欢迎...

1 个答案:

答案 0 :(得分:0)

从您的问题中我看不到您是否指定了凭据的定义位置。如果您没有这样做,则必须在构建定义(documentation)中添加以下内容:

function mergeHeader(documentFieldKeys) {
    if (documentFieldKeys.length > 0)
        Word.run(function(context) {
            var key = documentFieldKeys.shift();
            var mySections = context.document.sections;
            context.load(mySections, 'body/style');
            return context.sync().then(function() {
                for (var i = 0; i < mySections.items.length; i++ ) {
                    findAndReplace(key, context, mySections.items[i].getHeader("primary"));
                }

                return context.sync().then(function() {
                        return mergeHeader(documentFieldKeys);
                    })
                    .then(context.sync);
            });
        });
}

function findAndReplace(key, context, body) {
    var results = body.search(key.Code, { matchWholeWord: false, matchCase: false });
    context.load(results);
    return context.sync().then(function() {
            if (results.items.length > 0 && key.Value === "") {
                missingFields.push(key.Description);
            } else {
                for (var i = 0; i < results.items.length; i++) {
                    results.items[i].insertText(key.Value, "replace");
                }
            }
        })
        .then(context.sync);
}