2016-03-14 196 views
0

首先,背景的,爲什麼我問這個問題一點:我們的產品的每日構建腳本(如詹金斯在Debian Linux上運行),做大致是這樣的:有沒有辦法可靠地讓automake忽略時間戳?

  1. 創建並進入構建環境使用的debootstrap和chroot的
  2. 檢查了我們的代碼庫(包括一些第三方庫)從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服務器檢出)。這會導致配置腳本認爲它需要自動重新生成一個文件,因此它會嘗試調用'automake'來執行此操作,並且出錯,因爲automake未安裝。

當然,這裏要做的很明顯的事情是在構建環境中安裝automake,但構建環境不是我可以輕易修改的(由於體制原因),所以我想避免必須儘可能做到這一點。我想要做的是找出如何獲得配置腳本(我可以修改)來忽略時間戳,並且始終在時間戳相同時執行基本構建。

我試圖通過手動運行「觸摸」上的一些文件,迫使它們的時間戳是相同的,以巧妙的問題,這似乎使問題發生較少,但它仍然發生:

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

熟悉automake工作方式的人能否提供一些建議,告訴我如何在不修改構建環境的情況下更可靠地在日常構建工作中進行「配置」調用?

回答

1

你可以試試你的Jenkins服務器上的forcing SVN to use commit times on checkout。這些提交時間也可以在SVN中設置,如果它們由於某種原因而不能解決的話。您可以使用touch -dtouch -r而不是touch來避免那裏的競爭條件。

+0

看起來像「touch -r」做的伎倆,謝謝!特別是,我用下面的命令替換了純觸摸命令(上面):touch temp_dummy_file.txt; touch -rtemp_dummy_file.txt config * aclocal * Makefile * –

相關問題