Использование ccache с конвейером jenkins

У меня возникли проблемы с получением постоянной выгоды от ccache в моих сборках конвейера jenkins. Я устанавливаю CCACHE_BASEDIR в родительский каталог моего текущего каталога сборки (это получается что-то вроде /opt/jenkins/workspace). Учитывая этот базис, я бы ожидал, что все сборки PR/ветки, которые имеют общий родитель, смогут находить попадания в кеш, но, увы, этого не происходит. Я действительно вижу попадания в кеш для последующих сборок в заданном каталоге (например, если я вручную перестраиваю конкретный PR), что означает, что CCACHE_BASEDIR работает не так, как я ожидал.

Для дальнейшей диагностики я попытался установить CCACHE_LOGFILE, и хотя этот файл создается сборкой, он фактически пуст (содержит только две строки, указывающие версию ccache).

Может ли кто-нибудь предложить конкретные настройки или методы, которые помогли получить максимальную пользу от ccache в конвейерах jenkins, или другие вещи, чтобы попытаться диагностировать проблему? Что может вызвать пустой файл журнала ccache?

Я запускаю ccache 3.3.4.


person Mike Ellery    schedule 21.08.2017    source источник
comment
Не могли бы вы заставить ccache работать вручную? Вы можете проверить статистику ccache с помощью ccache -s, чтобы узнать, кэширует ли он файлы.   -  person Florian Castellane    schedule 14.02.2018
comment
Я также наблюдаю такое же поведение почти пустого файла журнала. Вы когда-нибудь узнавали, почему это было так, @mike-ellery?   -  person Salem Derisavi    schedule 10.03.2021
comment
@SalemDerisavi Я давно перестал работать над этим конкретным проектом и не могу вспомнить, получал ли я когда-либо решение. Совет от Джоэла, приведенный ниже, вероятно, настолько хорош, насколько это возможно ... а также убедитесь, что у вас установлена ​​​​последняя версия ccache. Кроме того, у меня нет конкретных советов. Удачи!   -  person Mike Ellery    schedule 11.03.2021


Ответы (1)


Решение первой части вопроса, вероятно, состоит в том, чтобы установить hash_dir = false (CCACHE_NOHASHDIR=1 при использовании переменных среды) или установить -fdebug-prefix-map=old=new для перемещения отладочной информации в общий префикс (например, -fdebug-prefix-map=$PWD=.). Дополнительные сведения можно найти в разделе "Компиляция в разных каталогах" руководства по ccache.

Что касается CCACHE_LOGFILE: я никогда раньше не слышал об этой проблеме (кстати, я сопровождаю ccache), но если вы установите для CCACHE_LOGFILE относительный путь к файлу, попробуйте вместо этого установить для него абсолютный путь.

person Joel Rosdahl    schedule 13.02.2018