Чтобы решить эту проблему, используйте функцию git :(exclude)directory'
(спасибо @sbat). Подробности этой функции описаны здесь .
Вот как это можно сделать в деталях (конвейер Jenkins для платформы Windows):
// inside some step:
node('master') {
def diffStat = "undetermined"
try {
diffStat = bat (
returnStdout: true,
script: """@ECHO OFF
cd $repoDirecory
git diff ${PULL_REQUEST_TO_BRANCH} --shortstat -- "." ":(exclude)./FrontendA" ":(exclude)./FrontendB"
""").trim()
if (!diffStat) {
currentBuild.description = "Frontend only"
error("There is no significant changes, build is not required!")
}
} finally {
if (diffStat) {
echo diffStat
} else {
currentBuild.result = 'SUCCESS'
}
notifyBitbucket(commitSha1: PULL_REQUEST_FROM_HASH, ignoreUnverifiedSSLPeer: true)
}
}
Поскольку неткод выхода из: git diff --shortstat <....>
, но git
ничего не печатает, если нет видимых изменений. Таким образом, используя bat returnStdout: true
в groovy, вывод git
присваивается переменной. Затем в groovy-скрипте могут быть предприняты надлежащие действия в зависимости от того, пуста переменная diffStat
или нет.
Теперь, если обнаружены только несущественные изменения (пусто diffStat
), выдается сообщение об ошибке, которое затем обрабатывается. как успех. Bitbucket видит эту сборку как успешную (это было целью). На Jenkins все этапы сборки не выполнены (красный), но для меня это не проблема.
Если были обнаружены значительные изменения, Jenkins печатает статистику различий (реальный пример):
6 files changed, 62 insertions(+), 48 deletions(-)
Вкл. В Windows есть ловушка: '
(символ одинарной кавычки) не может быть использован, но, как вы можете видеть выше "
(двойная кавычка), сделайте свою работу.