首先,我要问一下这个问题的一些背景知识:我们的产品每日构建脚本(由Jenkins在Debian Linux下运行)大致如下:
这大部分工作正常,但每隔一段时间(也许每天一次构建10个),构建我们的第三方库的脚本部分将出错,并出现如下错误:
CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash
/root/software/3rdparty/libogg/missing autoconf
/root/software/3rdparty/libogg/missing: line 81: autoconf: command not found
WARNING: 'autoconf' is missing on your system.
You should only need it if you modified 'configure.ac',
or m4 files included by it.
The 'autoconf' program is part of the GNU Autoconf package:
<http://www.gnu.org/software/autoconf/>
It also requires GNU m4 and Perl in order to run:
<http://www.gnu.org/software/m4/>
<http://www.perl.org/>
make: *** [configure] Error 127
据我所知,偶尔会发生这种情况,因为第三方库中文件的时间戳不同(例如,由于签出时间的时间相互关闭了一两秒)特定构建期间的SVN服务器)。这导致配置脚本认为它需要自动重新生成文件,因此它会尝试调用&#39; automake&#39;这样做,并因为没有安装automake而输出错误。
当然,这里显而易见的事情是在构建环境中安装automake,但构建环境不是我可以轻易修改的(由于制度原因),所以我想避免如果可能的话,这样做。我想要做的是弄清楚如何获取配置脚本(我可以修改)以忽略时间戳,并且总是在时间戳相等时执行它们所做的基本构建。
我尝试通过手动运行“触摸”来解决问题。在一些文件上强制他们的时间戳是相同的,这似乎使问题发生的次数减少了,但它仍然会发生:
./configure --prefix="$PREFIX" --disable-shared --enable-static && \
touch config* aclocal* Makefile* && \
make clean && make install ) || Failure "libogg"
任何熟悉automake工作原理的人都能提供一些建议,告诉我如何制作&#34;配置&#34;在不修改构建环境的情况下,更可靠地调用我们的日常构建工作?
答案 0 :(得分:1)
您可以在Jenkins服务器上尝试forcing SVN to use commit times on checkout。如果由于某种原因不能解决这些提交时间,也可以在SVN中设置。您可以使用touch -d
或touch -r
代替touch
来避免竞争条件。