5

Этот вопрос в основном такой же, как this one, за исключением того, что я использую subversion, и никакое обновление плагина не сделало трюк для меня.Дублирующие изменения в сценарии сценария jenkins с SVN

Я загружаю сценарий Jenkinsfile с настройкой многоканального конвейера, и журнал изменений дублируется при каждом новом checkout scm.

Поскольку в моей сборке я использую несколько рабочих областей, выделенных через node внутри блоков parallel, я вызываю свежие проверки для каждого из них, а дублирование изменений вызывает раздражение.

ответ

5

Одиночная проблема.

Я делаю следующее, пока не будет исправлено исправление для подключаемого модуля SVN.

currentBuild.getChangeSets().clear() 
checkout scm 

Внимание: возможно, вам придется одобрить вызовы сценариев через страницу «Утверждение сценария процесса».

Это позволит очистить журнал изменений от Jenkins Job. Журнал изменений будет снова заполнен вызовом «checkout scm». UPDATE: Посмотрите мои изменения ниже. Это «решение» не работает, потому что добавляет обратно удаленные ревизии после перезагрузки ... я не понимаю, почему, но ...

EDIT:

Хорошо, теперь я нашел новый способ:

for(i = 0; i < scm.getLocations().length; i++) { 
     def location = scm.getLocations()[i] 
     def svn_url = location.remote 
     checkout changelog: false, poll: false, scm: [$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[credentialsId: '252ad9ab-2f39-46f5-a77a-6196d1679dee', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: svn_url]], workspaceUpdater: [$class: 'UpdateWithRevertUpdater']] 
    } 

Чтобы получить учетные данные, вы должны использовать страницу «Синтаксис трубопровода». я попытался использовать только

checkout changelog: false, scm 

, но это не сработало. Поэтому вам нужно использовать длинную версию, показанную выше.

+0

Спасибо за предложение обходного пути, я попробую, как только вернусь на работу из отпуска. –

+0

Обнаружена неприятная вещь ... Если Jenkins перезагружен, кажется, что он перестраивает изменения и добавляет ранее удаленные обратно в сборку :( Просто обнаружен после обновления и перезагрузки ... –

+0

ok Я нашел новый рабочий способ., См. Выше –

3

Ответ Бен Херфюрт хорош, я просто отправлю окончательную адаптацию для него, потому что я попытался немного его обернуть в одной рабочей функции.

Эта функция работает для меня, как у меня есть только один SVN репозитория для проверки, а все остальное (например, пароли), были настроены уже:

def checkout(){ 
    def svnLocation = scm.locations[0] 
    checkout(changelog: false, scm: [$class: 'SubversionSCM', locations: [svnLocation], workspaceUpdater: [$class: 'UpdateWithCleanUpdater']]) 
} 

Я просто бросить вызов этому везде, где я нужен свежий рабочая копия.

node('linux') {   
    checkout() 
    // ... run ITs on linux ... 
} 

node('windows') { 
    checkout() // doesn't duplicate changelog anymore 
    // ... run ITs on windows .... 
} 

Надеюсь, это поможет другим.

3

Вместо переопределение класс SCM, один все еще может относиться к оригинальному «Scm» объект и отключить журнал изменений так:

checkout(changelog: false, scm: scm) 

Это сохранит намеченную behviour в «кассе ВСМ», а отключение генерация изменений.

+0

Работает сейчас, спасибо :) Не работал тогда, когда я написал ответ. –

Смежные вопросы