Мне нужна помощь с нашей настройкой Jenkins Pipeline. У меня была хорошо работающая конвейерная работа Jenkins, где сценарий groovy был извлечен из потока Perforce (на этапе "Декларативный: Checkout SCM") и затем запущен. Сам скрипт выполняет по своей сути p4 sync
и p4 reconcile
.
pipeline {
agent {
node {
customWorkspace "workspaces/MY_WORKSPACE"
}
}
stages {
stage('Sync') {
steps {
script {
p4sync(
charset: 'none',
credential: '1',
format: "jenkins-${NODE_NAME}-MY_WORKSPACE",
populate: syncOnly(force: false, have: true, modtime: false, parallel: [enable: false, minbytes: '1024', minfiles: '1', threads: '4'], pin: '', quiet: true, revert: true),
source: streamSource('//depot/STREAM')
)
}
}
}
stage('Reconcile') {
steps {
script {
withCredentials([usernamePassword(credentialsId: '1', passwordVariable: 'SVC_USER_PW', usernameVariable: 'SVC_USER_NAME')]) {
bat label: 'P4 reconcile', true, script:
"""
p4 -c "%P4_CLIENT%" -p "%P4_PORT%" -u ${SVC_USER_NAME} -P ${SVC_USER_PW} -s reconcile -e -a -d -f "//depot/STREAM/some/folder/location/*.file"
"""
}
}
}
}
}
}
Из-за внешних требований мы решили переместить все наши файлы сценариев конвейера в отдельное хранилище на том же сервере Perforce и соответственно изменили оформление сценария конвейера.
Теперь на этапе проверки сценария конвейера («Декларативный: Checkout SCM») будет создано новое рабочее пространство с именем jenkins-NODE_NAME-buildsystems
(для депо сценария конвейера //buildsystems
), которое будет использовать то же локальное рабочее пространство root каталог D:\some\path\workspaces\MY_WORKSPACE
на узле сборки, что и фактическое рабочее пространство jenkins-NODE_NAME-MY_WORKSPACE
, созданное и синхронизированное на первом шаге конвейера с помощью p4sync
. Это означает, что Perforce создает два рабочих пространства с одним и тем же локальным каталогом root рабочего пространства (что само по себе может вызывать всевозможные проблемы). Кроме того, в сценарии конвейера переменная среды P4 P4_CLIENT
указывает на неправильное рабочее пространство jenkins-NODE_NAME-buildsystems
(поэтому согласование не будет работать), которое должно было использоваться только проверкой сценария конвейера, а не самим конвейером. .
Что подводит меня к моему вопросу. Как я могу отделить рабочие области проверки сценария конвейера и p4sync
в сценарии конвейера? В конвейере я могу указать customWorkspace
, но не в конфигурации Jenkins для проверки скрипта конвейера, и последний, как ни странно, следует за этим оператором customWorkspace
, возможно, потому что jenkins-NODE_NAME-MY_WORKSPACE
уже был открыт Perforce на узле ...?
Любые советы приветствуются.
Спасибо, Стефан