2

我有一个库,我用 FAKE 构建、打包并推送到 NuGet。工作正常。

现在,我想通过 Travis CI 以连续模式完成所有这些工作,包括“推送”部分。我知道存在安全问题,但似乎我可以通过将 NuGet API 密钥放在 Travis 环境变量中安全地(至少在原则上)做到这一点,因此它不适用于外部拉取请求,并且仅在构建特殊时推送专门的分支。

当 FAKE 遇到 Travis 时,问题就来了。

  1. 事实证明,当我使用Paket.Push 助手时,整个paket.exe命令行作为 FAKE 的输出发出,并带有我的 NuGet API 密钥。
  2. 同时,事实证明,Travis 允许任何未经身份验证的爱管闲事的人查看任何项目的完整构建日志。我的 NuGet API 密钥就在那里。

我知道我可以通过将 FAKE 重定向到/dev/null(in .travis.yml) 来禁用 FAKE 的整个输出,但我想保留大部分输出,只需用密钥隐藏该特定部分。

PaketPushParams我在结构中找不到任何相关参数,谷歌也没有找到任何东西。下一步是查看 FAKE 源代码,看看输出是否是有条件的,但我想我会先问。我不能成为第一个打这个的人。:-)

4

1 回答 1

2

我也没有通过谷歌找到答案,但我确实或多或少知道在哪里查看 FAKE 源代码,所以我继续这样做。

看起来Paket.Push 帮助程序调用ExecProcess实际运行相关任务。ExecProcess最终调用ExecProcessWithLambdas来完成工作,并且ExecProcessWithLambdas将进程名称和参数打印到 FAKE 日志的行首先检查enableProcessTracing变量,如果该变量为假,则不会输出进程名称和参数。该enableProcessTracing变量未记录,但可变,因此您应该能够设置它。我自己还没有尝试过,但原则上你应该能够做到:

ProcessHelper.enableProcessTracing <- false // Logging off
// Do security-sensitive work here
ProcessHelper.enableProcessTracing <- true  // Logging back on for rest of build

这能满足你的需要吗?

于 2016-09-26T04:05:35.687 回答