У нас есть многоотраслевое конвейерное задание Jenkins.
Задание было ограничено, так что только один экземпляр (включая branches
, tags
, trunk
) может быть запущен одновременно, так как им нужно обновитьконкретный файл revisions.db
в определенном хранилище, которым они все делятся.
Проблема в том, что когда несколько экземпляров задания ставятся в очередь, они не извлекают последнюю версию revisions.db
Я нашел обходной путь, сначала извлеките хранилище.Затем вручную перейдите в папку и позвоните svn up
.Тогда я получаю последнюю версию.
Я также попытался добавить таймер сна в конце Jenkinsfile (до снятия блокировки), чтобы убедиться, что это не так, потому что сервер SVN работал слишком медленно.Но это не помогло.
Я также пытался вручную удалить папку revision
перед извлечением.Но это тоже не сработало.
Мы специально не очищаем рабочее пространство.
Вот фрагмент кода Jenkinsfile:
lock(resource: 'Entire_Build'){
checkoutSVN(false, 'paramdb', "https://someserver/svn/param/${BRANCH_NAME}", 'UpdateWithCleanUpdater')
checkoutSVN(false, 'revision', "https://someserver/svn/revisions/test/trunk", 'CheckoutUpdater')
sh '''
cd revision
svn up
cd .. '''
// ...
}
Функция извлечения - это просто оболочка, которую мы используем:
def checkoutSVN(Boolean ignoreExternalsOption, String local, String remote, String updater) {
checkout([$class: 'SubversionSCM',
additionalCredentials:
[[credentialsId: 'someID',
realm: '<https://someserver/> CollabNet Subversion Repository']],
excludedCommitMessages: '',
excludedRegions: '',
excludedRevprop: '',
excludedUsers: '',
filterChangelog: false,
ignoreDirPropChanges: false,
includedRegions: '',
locations: [[credentialsId: 'someID',
depthOption: 'infinity',
ignoreExternalsOption: ignoreExternalsOption,
local: local,
remote: remote]],
quietOperation: false,
workspaceUpdater: [$class: updater]])
}
При запуске Jenkinsfile выдает следующий вывод:
15:13:58 Checking out https://someserver/svn/revisions/test/trunk at revision '2019-05-23T15:13:49.973 +0200'
15:13:59 A revisions.db
15:13:59 At revision 8511
15:14:04 + cd revision
15:14:04 + svn up
15:14:04 Updating '.':
15:14:04 At revision 8512.
Как вы ясно видите, извлечение относится к ревизии 8511
, но при вызове svn up
мы получаем ревизию 8512
Почему это происходит?Я ожидаю, что касса будет последней ревизии.Особенно когда вызывается с CheckoutUpdater