Многоотраслевой конвейер Jenkins: как оформить заказ только один раз? - PullRequest
0 голосов
/ 17 декабря 2018

Я создал очень простой многоотраслевой конвейер для своего локального Jenkins через интерфейс BlueOcean.Из конфигурации по умолчанию я удалил почти все варианты поведения, кроме одного для обнаружения веток.Конфигурация выглядит следующим образом:

config

В пределах Jenkinsfile Я пытаюсь настроить следующий сценарий:

  • Оформить заказответвление
  • (опционально) Объединить его с master ответвление
  • Сборка Back-end
  • Сборка Front-end

Фрагмент из моего Jenkinsfile:

pipeline {
  agent none   
  stages {    
    stage('Setup') {
      agent {
        label "master"
      }    
      steps {
        sh "git checkout -f ${env.BRANCH_NAME}"
      }
    }

    stage('Merge with master') {
      when {
        not {
          branch 'master'
        }
      }    
      agent {
        label "master"
      }    
      steps {
        sh 'git checkout -f origin/master'
        sh "git merge --ff-only ${env.BRANCH_NAME}"
      }
    }

    stage('Build Back-end') {
      agent {
        docker {
          image 'openjdk:8'
        }
      }

      steps {
          sh './gradlew build'              
      }
    }

    stage ('Build Front-end') {
      agent {
        docker {
          image 'saddeveloper/node-chromium'
        }
      }

      steps {
        dir ('./front-end') {
          sh 'npm install'              
          sh 'npm run buildProd'
          sh 'npm run testHeadless'
        }
      }
    }
  }
}

Сам конвейер и шаги сборки работают нормально, но проблема в том, что Дженкинс добавляет шаг «Проверка из контроля версий» перед каждым этапом.Шаг ищет новые ветви, выбирает ссылки, но также проверяет текущую ветку.Вот соответствующий вывод из полного журнала сборки:

// stage Setup
 > git checkout -f f067047bbdd3a5d5f9d1f2efae274bc175829595
sh git checkout -f my-branch
// stage Merge with master
 > git checkout -f f067047bbdd3a5d5f9d1f2efae274bc175829595
sh git checkout -f origin/master
sh git merge --ff-only my-branch
// stage Build Back-end
 > git checkout -f f067047bbdd3a5d5f9d1f2efae274bc175829595
sh ./gradlew build
// stage Build Front-end
 > git checkout -f f067047bbdd3a5d5f9d1f2efae274bc175829595
sh npm install
sh npm run buildProd
sh npm run testHeadless

Таким образом, как вы видите, он эффективно сбрасывает рабочий каталог в конкретный коммит перед каждым этапом git checkout -f f067...595.

Есть ли способ отключить этоповедение проверки по умолчанию?Или какой-нибудь жизнеспособный вариант, как реализовать такое необязательное слияние с основной веткой?

Спасибо!

1 Ответ

0 голосов
/ 17 декабря 2018

По умолчанию git scm будет выполняться в конвейере Jenkins.Вы можете отключить его, выполнив:

pipeline {
    agent none
    options {
        skipDefaultCheckout true
    }
    ...

Кроме того, я рекомендую взглянуть на другие полезные параметры конвейера https://jenkins.io/doc/book/pipeline/syntax/#options

...