Ускоряване на компилацията на проекта чрез използване на Gradle кеш — трета част

Radoslav Yordanov
paysafe-bulgaria
Published in
3 min readJun 4, 2021

В предишната серия на поредицата разгледахме как кешът влияе върху проекти с повече от един модул. Освен това, показахме как да пуснем локален и отдалечен build кеш. В тази серия ще разгледаме как да конфигурираме правилно Gradle кеша и също така ще разгледаме gradle кеш сървъра.

Конфигурации на Gradle кеш

На фигурата е показан препоръчителният начин, по който може да конфигурираме Gradle кеша. При тази конфигурация програмистът може да взима и записва данни в локалния кеш. Също така той може да взима данни и от отдалечения кеш, но там не може да записва данни. Единствено CI сървърът може да записва данни на отдалечения кеш. Така ако имаме програмист, който работи по feature A, когато компилира проекта, данните ще бъдат взети от локалния кеш. След като програмистът пусне Pull Request и го мърджне в develop branch-a, тогава CI сървърът ще компилира проекта и ще запише данните в отдалечения кеш. По-късно, когато някой програмист вземе най-новите промени от develop, при компилиране на проекта, данните ще бъдат взети от отдалечения кеш, спестявайки му време за компилиране на проекта локално.

За да постигнем този примерен подход трябва да дефинираме environment variable на нашата CI машина. В случая environment variable-а, който сме дефинирали е „CI”. След като сме направили това, трябва да създадем локална променлива — isCiServer, която да проверява дали съществува тази environment variable на машината, от която се изпълнява компилацията. Така, когато компилация върви на CI машината, променливата isCiServer ще бъде true, a когато компилацията върви на машината на някой програмист — ще бъде false. Последното нещо, което остава да направим, е към конфигурацията да добавим свойството push и неговата стойност да бъде isCiServer. Това свойство определя дали можем да записваме данни на отдалечения кеш. Можете да погледнете на кода по-долу как сме постигнали желания ефект:

Gradle кеш сървър

Досега си говорихме за локален и отдалечен кеш. Обаче за да използваме отдалечен кеш, то ние трябва да имаме първо кеш сървър към който да се свържем. Затова трябва да използваме Gradle кеш сървър. Той ни позволява да се свържем към него използвайки HTTP протокола. Кеш сървърът се дистрибутира като изпълним JAR файл или docker image. Също така има безплатна и платена версия. Безплатната версия има доста ограничения, докато платената версия ни позволява да използваме повече от един node и да ги синхронизираме. Така че, ако имаме два екипа, които работят по един и същ проект, в Канада и България, то ние можем да се възползваме от това да имаме два node-a. По този начин всеки node ще бъде близко до всеки екип и скоростта на сваляне от кеша ще бъде по-добра. Също така платената версия предлага инструменти за анализиране на задачите за кеширане и целия процес на компилиране на проекта.

Кеш сървърът разполага с уеб интерфейс. През него може да конфигурираме големината на кеша, както и големината на единичен запис. Също така може да контролираме и достъпа до него. Може да добавяме потребители и да задаваме какъв достъп да имат — четене и запис или само четене.

Полезни връзки:
Gradle кеш:
https://docs.gradle.org/current/userguide/build_cache.html

Gradle build cache node:
https://docs.gradle.com/build-cache-node/

Top Android build issues:
https://gradle.com/blog/top-android-build-issues/

Accelerate clean builds with the build cache:
https://developer.android.com/studio/build/build-cache

Надявам се с тази поредица от серии да сте добили представа защо ни е необходим Gradle кеш, как да го пуснете и конфигурирате във вашите проекти, какви са ползите от него и как влияе върху проекти с повече от един модул.

--

--