Как заставить проект вниз по течению строиться только один раз в jenkins? - PullRequest
0 голосов
/ 28 мая 2020

Я использую декларативный конвейер Дженкинса для создания своих проектов. Всего 3 проекта: A , B и C. Проект A находится непосредственно ниже по течению от B и C. Каждый раз, когда срабатывают проекты B или C (через коммиты в Subversion), они создают артефакт (SNAPSHOT), который затем будет использоваться проектом A . По соображениям производительности я хотел бы принудительно создать проект A только один раз, когда проекты B и C строятся или когда они ждут в очереди.

Как я могу добиться этого с помощью декларативных конвейеров?

Вот мои исходные коды конвейера:

A :

pipeline {
  agent any
  tools {
    maven "maven"
  }
  stages {
    stage('Build') {
      steps {
        sh "mvn clean install"
      }
    }
  }
}

B :

pipeline {
  agent any
  tools {
    maven "maven"
  }
  stages {
    stage('Build') {
      steps {
        sh "mvn clean install"
      }
    }
  }
  post {
    success {
      build job: 'A', wait: false
    }
  }
}

C:

pipeline {
  agent any
  tools {
    maven "maven"
  }
  stages {
    stage('Build') {
      steps {
        sh "mvn clean install"
      }
    }
  }
  post {
    success {
      build job: 'A', wait: false
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Наконец-то я нашел способ, как Дженкинс справляется с этой проблемой, и это использование quietPriod(<time-to-wait-in-seconds>). Таким образом, конвейер A будет выглядеть так:

pipeline {
  agent any
  tools {
    maven "maven"
  }
  options {
    quietPeriod(30)
  }
  stages {
    stage('Build') {
      steps {
        sh "mvn clean install"
      }
    }
  }
}

Например, если Project B запускает последующий проект A , A не сразу начинает сборку, а ждет 30 секунд, а затем начинает сборку. Если в течение этих 30 секунд проект C (или снова проект B ) запускается и запускает проект A , A будет можно построить только один раз. Я нашел этот пост полезным

0 голосов
/ 28 мая 2020

Как обсуждалось в комментариях, публикация базового c фрагмента кода конвейера оболочки:

pipeline {
    stages {
        stage('Trigger'){
            // Initial trigger if needed
        }
        stage('Build B and C'){
            parallel BuildB: {
                when{
                    // Condition to evaluate
                }
                steps {
                    // Trigger pipeline B
                }
            },
            BuildC: {
                when{
                    // Condition to evaluate
                }
                steps {
                    // // Trigger pipeline C
                }
            }
        }
        stage('Build A'){
            // Trigger pipeline A
        }
    }
}

Этот конвейер оболочки будет выполнять B и C параллельно, и только после завершения обоих будет запускаться А.

...