我正在我们的构建服务器(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启动,则不会考虑凭据。我真的被任何忠告深深欢迎...
答案 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);
}