2016-03-14 3 views
0

Во-первых, немного фона, почему я задаю этот вопрос: ежедневно строить сценарий нашего продукта (как работать под Debian Linux Дженкинс), делает примерно так:Есть ли способ надежно получить automake, чтобы игнорировать временные метки?

  1. Создает и вводит среду сборки используя Debootstrap и корневой
  2. проверяет наши кодовый (включая некоторые библиотеки 3 участника) из SVN
  3. Запускается настраивают и сделать как надо строить весь код
  4. упаковывает результаты в файл установки, которые могут быть загружены на наши безголовые серверные ящики с помощью нашего инструмента установки.

В основном, это работает отлично, но каждый так часто (возможно, один ежедневно строить из 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 во время этой конкретной сборки). Это заставляет скрипт configure думать, что ему необходимо автоматически восстановить файл, поэтому он пытается вызвать «automake», чтобы сделать это, и ошибки, потому что automake не установлен.

Конечно, очевидной задачей здесь было бы установить automake в среде сборки, но среда сборки не является той, которую я могу легко изменить (из-за институциональных причин), поэтому я бы хотел избежать сделайте это, если это возможно. Вместо этого я хотел бы выяснить, как получить скрипты configure (которые я могу изменить), чтобы игнорировать временные метки и всегда делать базовую сборку, которую они выполняют, когда метки времени равны.

Я пытался замять проблему вручную, запустив «касание» на несколько файлов, чтобы заставить их временные метки, чтобы быть таким же, и это, казалось, чтобы проблема происходит реже, но это все еще происходит:

./configure --prefix="$PREFIX" --disable-shared --enable-static && \ 
touch config* aclocal* Makefile* && \ 
make clean && make install) || Failure "libogg" 

Может ли кто-нибудь узнать, как работает automake, некоторые советы о том, как я могу сделать «настраиваемые» вызовы в нашей ежедневной работе надстройкой более надежно, без изменения среды сборки?

ответ

1

Вы можете попробовать forcing SVN to use commit times on checkout на своем сервере Jenkins. Эти моменты фиксации также могут быть установлены в SVN, если по какой-то причине они не работают. Вы можете использовать touch -d или touch -r вместо touch, чтобы избежать условий гонки там.

+0

Похоже, что «touch -r» сделал трюк, спасибо! В частности, я заменил команду простого касания (вверху): touch temp_dummy_file.txt; touch -rtemp_dummy_file.txt config * aclocal * Makefile * –