Как запустить параллельные этапы в изолированных модулях для декларативного конвейера Дженкинса - PullRequest
3 голосов
/ 27 марта 2019

Я пытаюсь запустить несколько сквозных тестов параллельно и на РАЗЛИЧНЫХ блоках kubernetes в декларативном конвейере jenkins, однако, похоже, что jenkins пытается запустить параллельные этапы на ЖЕ kubernetes pod. Это приводит к блокировкам базы данных , поскольку оба процесса пытаются вставить / усечь / обновить / запросить одни и те же таблицы. Есть ли способ, которым я могу раскрутить разные капсулы для каждого из параллельных этапов?

Конфигурация плагина kubernetes:

  agent {
  kubernetes {
    label 'my-label'
    defaultContainer 'jnlp'
    yaml """
apiVersion: v1
kind: Pod
metadata:
  name: dind
spec:
  containers:
    - name: < default container >
      image: < image >
      securityContext:
          privileged: true
          fsGroup: 1000
      command:
      - cat
      tty: true
      volumeMounts:
        - name: jenkins-bundle-gems
          mountPath: /usr/local/bundle


    - name: <tests-container-name>
      image: < image > 
      securityContext:
          privileged: true
          fsGroup: 1000
      volumeMounts:
        - name: jenkins-bundle-gems
          mountPath: /usr/local/bundle
      command:
      - cat
      tty: true
"""
 }
   }

Параллельный этап:

      stage('Test'){
        parallel {
          stage("Branch 1") {
              steps {
                container('<tests-container-name>') {
                  sh "jenkins/scripts/initdb.sh"
                  sh 'bundle exec rspec --exclude-pattern "spec/features/*_spec.rb" spec'
                }
              }
            }
            stage("Branch 2") {
              steps {
                container('<tests-container-name>') {
                  sh "jenkins/scripts/initdb.sh"
                  sh "bundle exec rspec `jenkins/scripts/split_features.sh 0`"
                }
              }
            }
        }
      }

ОЖИДАНИЕ: Я бы хотел, чтобы Дженкинс раскрутил две разные капсулы для каждой из параллельных ступеней. Это позволило бы мне использовать разные базы данных для каждого из тестов.

АКТУАЛЬНЫЙ РЕЗУЛЬТАТ: Дженкинс запускает оба этапа одновременно на одном модуле.

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Попробуйте что-то вроде этого

stage("Run additional parallel tests") {
        parallel( 
            "parallel stage 1": {
                [INSERT YOUR CODE HERE]
            },

            "parallel stage 2": {
                [INSERT YOUR CODE HERE]
            }
        )
    }
}
0 голосов
/ 17 июля 2019

Вы можете установить agent {} для каждого параллельного этапа, чтобы запускать модуль на каждом этапе.

...