如何让Bamboo的Mercurial源码检出结果与命令行hg clone完全一致?
我来帮你梳理下可能的原因和解决办法,之前也碰到过类似Mercurial和Bamboo配合的问题:
检查Bamboo的分支过滤配置
首先去看你的Bamboo「Source Code Checkout」任务里,Mercurial的分支设置是不是做了限制。默认情况下,Bamboo有时候会只拉取默认分支或者指定分支,而你本地用hg clone是会拉取所有命名分支的。进入任务配置的Mercurial选项,确保没勾选「仅拉取指定分支」这类过滤项,如果要同步所有分支,就设置为拉取全部分支(有些版本里是选择「所有分支」或者留空让它自动拉取全部分支)。强制Bamboo执行完整克隆而非增量更新
Bamboo默认可能用增量更新(比如hg pull而非hg clone),如果之前的构建有分支过滤残留,就会导致分支不全。你可以在任务的高级设置里,勾选「检出前清理仓库」或者「强制完整克隆」(不同Bamboo版本的措辞可能略有不同),这样每次构建都会像你本地一样从头执行完整的hg clone操作,彻底避免增量更新带来的差异。对比Bamboo和本地执行的Mercurial命令
Bamboo会在构建日志里输出它实际执行的Mercurial命令,你可以去构建日志里找类似hg clone ...的语句,和你本地执行的hg clone <你的仓库地址>对比,看看Bamboo是不是多了额外参数(比如-b指定分支、--noupdate之类的)。如果发现有多余的分支限制参数,直接在配置里去掉就好。确认Mercurial版本一致
有时候Bamboo服务器上的Mercurial版本和你本地的版本不一样,也可能导致克隆行为有差异。你可以在Bamboo服务器上执行hg --version,和你本地的版本对比,如果版本差得比较多,考虑把Bamboo服务器上的Mercurial升级到和你本地一致的版本。
备注:内容来源于stack exchange,提问作者Zaphod B.

