在travis上运行child_process.exec失败,而不是在本地运行
我正在travis上运行一个命令来计算从我当前testing的分支的主分支点(保证不是主)。
运行这个命令:
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)
运行,并返回我目前的分支短的特拉维斯很好。
当我跑步
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导致一个错误。 我没有从执行命令中的console.error中获得任何有价值的信息,只是: err null
。
既然这在当地是有效的,即使是像特拉维斯原因那样的独立头部,我的猜测也是与环境有关。 在Travis上运行的git版本是什么?
有没有什么你能想到的,会导致这个不工作? bash不可用? 这和其他git命令的主要区别在于bash -c
部分和进程replace。
你可以在这里看到构build页面https://travis-ci.org/VisualTesting/test-example/builds/54427942
问题是,因为travis克隆只有一个特定的分支git,命令部分git rev-list --first-parent master
失败,因为它不知道master
分支。
添加git fetch origin master:master
到我的before_install解决了这个问题。