在travis上运行child_process.exec失败,而不是在本地

时间:2015-03-15 07:38:33

标签: node.js git travis-ci

我在travis上运行命令来计算当前正在测试的分支的主分支点(保证不是主分支)。

运行此命令:

function execute(cmd, cb) {
  exec(cmd, function (err, stdout, stderr) {
    if(err) {
      console.error('err', err);
    }

    if(stderr) {
      console.error('err', err);
    }

    cb(stdout.split('\n').join(''));
  });
}

execute('git rev-parse --short HEAD', cb)

运行,并在Travis上给我当前分支的简短回报。

当我跑步时

var command = "bash -c 'diff -u <(git rev-list --all bf2a1b7b7cf97f5df0618830f63d535db1a5dca6) "+
"<(git rev-list --first-parent master)' "+
"| sed -ne 's/^ //p' | head -1";

execute(command, cb);

这正是我想要的本地回报,但在travis上会导致错误。 我从execute命令中的console.error中得不到任何有价值的信息,只需:err null

由于这在本地工作,即使在像travis原因的分离HEAD中,我的猜测是它与环境有关。 在Travis上运行的git版本是什么?

你能想到什么会导致这种情况无效吗? bash不可用吗?这个和其他有效的git命令之间的主要区别是bash -c部分和进程替换。

您可以在此处查看构建页面https://travis-ci.org/VisualTesting/test-example/builds/54427942

1 个答案:

答案 0 :(得分:1)

问题在于,由于travis只从git克隆了一个特定的分支,因此命令部分git rev-list --first-parent master失败,因为它不知道master分支。

git fetch origin master:master添加到我的before_install解决了这个问题。