Как использовать потоки с настраиваемым отображением представления в Perforce и Jenkins - PullRequest
0 голосов
/ 25 апреля 2018

Я использую Perforce, работающую в трубопроводе Jenkins.Я извлекаю из Perforce следующее:

          checkout scm: [
                $class: 'PerforceScm', 
                credential: 'me', 
                populate: [
                    $class: 'AutoCleanImpl', 
                    delete: true, 
                    modtime: false, 
                    pin: '', 
                    quiet: true, 
                    replace: true
                ], 
                workspace: [
                    $class: 'ManualWorkspaceImpl', 
                    charset: 'utf8', 
                    name: 'jenkins-${NODE_NAME}-${JOB_NAME}', 
                    pinHost: false, 
                    spec: [
                      allwrite: true, 
                      clobber: false, 
                      compress: false, 
                      line: 'LOCAL', 
                      locked: false, 
                      modtime: false, 
                      rmdir: false, 
                      streamName: '',
                      view: '''//depot/main/... //jenkins-${NODE_NAME}-${JOB_NAME}/assets/...
                               -//depot/main/pre_ar_archive/... //jenkins-${NODE_NAME}-${JOB_NAME}/assets/pre_ar_archive/...
                               -//depot/main/tools/... //jenkins-${NODE_NAME}-${JOB_NAME}/assets/tools/...'''
                    ]
                ]
            ]

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

После извлечения мойЭтап сборки запускает скрипт Python для обработки активов.Этот скрипт использует p4python.Как только это будет сделано, он будет представлен.Однако при отправке я получаю эту ошибку:

"Нет файлов для отправки. \ N Ошибка отправки - исправьте вышеприведенные проблемы, затем используйте 'p4 submit -c 1234'"

Проблемаэто:

Ошибка выполнения - невозможно отправить из не потокового клиента

Если я запускаю p4 client, я вижу, что у меня не определен поток,Если я изменю свою проверку, чтобы определить 'streamName', то обнаружу, что она будет использовать представление по умолчанию, которое по существу

//depot/main/... //jenkins-${NODE_NAME}-${JOB_NAME}/...

Таким образом, я теряю свое отображение.

Есть ли какое-то решение для этого?

Одна вещь, которую я мог бы сделать, это просто использовать p4v для создания нужного мне клиента, но затем это заставляет меня просто вызывать все мои команды выполнения, которые в противном случае выполняет плагин.

Я пытался использовать клиент p4, чтобы отобразить его, но когда я это делаю, он также меняет представление.Документация p4 указывает, что это будет сделано (используйте представление по умолчанию).

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Хорошо, добавив к этому. Это работает. Класс рабочей области должен быть StreamWorkspaceImpl

           checkout scm: [
                $class: 'PerforceScm', 
                credential: 'me', 
                populate: [
                    $class: 'AutoCleanImpl', 
                    delete: true, 
                    modtime: false, 
                    pin: '', 
                    quiet: true, 
                    replace: true
                ], 
                workspace: [
                    $class: 'StreamWorkspaceImpl', 
                    charset: 'utf8', 
                    format: 'jenkins-${NODE_NAME}-${JOB_NAME}', 
                    pinHost: false, 
                    streamName: '//depot/main-jenkins-test'
                ]
            ]

Спецификация потока, которую Сэм Стаффорд перечислил выше, работает.

0 голосов
/ 25 апреля 2018

Я собираюсь предположить, что //depot/main - это поток (хотя есть много вещей в этом вопросе, которые не имеют смысла, если это поток, например, почему вы когда-либо пытались создать ручное представление клиента в первомместо, если ваше основное депо является потоковым депо).Если это не так, то здесь возникает какая-то другая проблема, которая заключается в том, что ваш клиент Jenkins извлекает файлы, которые находятся в каком-то несвязанном потоке и вне вашего клиентского представления (что может указывать на некоторую неверную конфигурацию на стороне Jenkins,или действительно плохая ошибка в вашем скрипте, или плохой триггер на сервере, или что-то в этом роде.


С помощью потоков вы создаете представление в форме спецификации потока, которая затем может использоваться несколькимиклиентов.Итак, ваше мнение:

//depot/main/... //client/assets/...
-//depot/main/pre_ar_archive/... //client/assets/pre_ar_archive/...
-//depot/main/tools/... //client/assets/tools/...

должно быть представлено в виде потока, который выглядит примерно так:

Stream: //depot/main-jenkins
Parent: //depot/main
Type: virtual
Paths:
    share ...
    exclude pre_ar_archive/...
    exclude tools/...
Remapped:
    ... assets/...

Тогда вы настроите свой клиент Jenkins следующим образом (я думаю, я неничего не знаю о конфигурации Jenkins):

            workspace: [
                $class: 'StreamWorkspaceImpl', 
                charset: 'utf8', 
                name: 'jenkins-${NODE_NAME}-${JOB_NAME}', 
                pinHost: false, 
                spec: [
                  allwrite: true, 
                  clobber: false, 
                  compress: false, 
                  line: 'LOCAL', 
                  locked: false, 
                  modtime: false, 
                  rmdir: false, 
                  streamName: '//depot/main-jenkins'
                ]
            ]

Указание потока //depot/main-jenkins дает автоматически сгенерированное представление для этого потока.

...