Это мой собственный ответ, вдохновленный ответом @Martin Zeitler.
У нас есть универсальный скрипт сборки, который применяется ко всему проекту build.gradle
с настройкой общих параметров, настроек и задач.Мы хотим добавить эту логику, но сделать ее необязательной и не нарушать существующие сценарии сборки.
Логика будет активироваться и управляться свойством project.ext.buildJenkinsWithLatest
, равным true
или false
. * 1009.*
При активной логике будут использоваться зависимости от файлов проекта dependencies-production.gradle
или dependencies-jenkins.gradle
.Зависимости Jenkins будут использоваться только в том случае, если свойство имеет значение true и среда CI обнаруживается с помощью переменной среды BUILD_NUMBER
.
Общий сценарий сборки содержит следующее:
if (project.ext.has('buildJenkinsWithLatest')) {
println "Using conditional dependency management..."
//BUILD_NUMBER is not null if this is a Jenkins build
if(project.ext.buildJenkinsWithLatest == true && System.getenv("BUILD_NUMBER") != null) {
println "--- Using alternative dependencies..."
apply from: "dependencies-jenkins.gradle"
}
else {
println "--- Using production dependencies..."
apply from: "dependencies-production.gradle"
}
}
else {
println "Conditional dependency management is not active"
}
Теперь любой проект build.gradle
, который уже применяет этот скрипт, будет печатать его при запуске:
Conditional dependency management is not active
Чтобы использовать эту функцию, нам нужно будет сделать следующее для нашего проекта:
- Создайте
dependencies-jenkins.gradle
, который содержит предложение dependencies {}
для библиотек, которые мы хотим динамически выбирать версию. - Создайте
dependencies-production.gradle
, который содержит предложение dependencies {}
для техбиблиотеки, но с заданной версией. - Удалите библиотеки из всех
dependencies {}
, которые остаются в проекте build.gradle
. - Установите для свойства
project.ext.buildJenkinsWithLatest
значение true
или false
. - Применение универсального сценария сборки (после задания свойства!).
Например, в dependencies-jenkins.gradle
используйте последнюю версию 2.xx:
dependencies {
compile 'example:my-library:2+'
}
Как указать версии в динамикеmic way see the answer CantSleepNow.
А в dependencies-production.gradle
используйте конкретную версию:
dependencies {
compile 'example:my-library:2.3.4'
}
Затем в build.gradle
установите свойство и примените универсальный сценарий сборки:
...
project.ext.buildJenkinsWithLatest = true;
apply from: '../bxgradle/bx-std.gradle'
...
Теперь, когда сборка выполняется на Jenkins, будут использоваться альтернативные зависимости.Если вы хотите построить его на Jenkins с производственными зависимостями, тогда установите project.ext.buildJenkinsWithLatest
в false
.