Скрипт Jenkins Pipeline из общих ресурсов SCM. Выполнение рабочей области с помощью Syn c внутри скрипта (другой поток / депо) - PullRequest
1 голос
/ 21 января 2020

Мне нужна помощь с нашей настройкой 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"
                            """
                    }
                }
            }
        }
    }
}

Old Jenkins Pipeline Configuration

Из-за внешних требований мы решили переместить все наши файлы сценариев конвейера в отдельное хранилище на том же сервере Perforce и соответственно изменили оформление сценария конвейера. New Jenkins Pipeline Configuration

Теперь на этапе проверки сценария конвейера («Декларативный: 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 на узле ...?

Любые советы приветствуются.

Спасибо, Стефан

...