Лучший способ организовать серию практически идентичных сборок на одном и том же оборудовании - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь протестировать сборки ОС на голом железе через Jenkins. Прямо сейчас у меня получилось около 60 или около того работ (ежемесячные сборки * 3 ОС * 1 работа для сборки и одна для проверки), умноженные на 10 или около того хостов, каждый набор из десяти был связан в цикл. Это ... громоздко, если не сказать больше. Я пытаюсь использовать Jenkins Pipeline, чтобы сократить это - и я бы предпочел, чтобы первая сборка запускалась только тогда, когда какие-либо релевантные репозитории git меняются, но тогда я бы хотел, чтобы они каскадировались.

Я пробовал цикл в моем файле jenkinsfile, но затем, если какой-либо отдельный этап завершается неудачей, все этапы после сбоя. Что вы предлагаете?

Мой текущий «план» - иметь 1 проект для каждой версии ОС на хост и параметризировать «watch upstream» для каждого. Это все еще кажется больше хлопот, чем стоит.

pipeline {
  agent any
  options {
    ansiColor('xterm')
  }
  //properties([
    //pipelineTriggers([
    //  [$class: "SCMTrigger", scmpoll_spec: "H/5 * * * *"],
    //])
  //])
  stages {
    stage ('Checkout Build Script') {
      steps {
        checkout([$class: 'GitSCM',
        branches: [[name: '*/master']],
        extensions: [],
        userRemoteConfigs: [[credentialsId: 'xxx', url: 'xxx/host_rebuild.git']]])
      }
    }
    stage ("Build Test OS") {
      steps {
        sh """./build.py -H ${TARGET_HOST} -p ${PROFILE}"""
        archiveArtifacts allowEmptyArchive: true, artifacts: 'messages,anamon,ipaclient,hardware_info,firmware_info', caseSensitive: true, defaultExcludes: true, fingerprint: false, onlyIfSuccessful: false
      }
    }
    stage ('Checkout Validation Code') {
      steps {
        checkout([$class: 'GitSCM',
+------  3 lines: branches: [[name: 'master']],-----------------------------------------------------------------------------------------------------------------------------------------------------------
        ])
      }
    } 
    stage ("Validate OS") {
      steps {
        sh """kinit  xxx.COM -k -t /var/lib/jenkins/secrets/xxx.keytab"""
        withEnv(["TARGET_OS=${MAJ_OS}", "TARGET_HOST=${TARGET_HOST}"]){
          sh """rake spec"""
        }
      }
    }
  }
}

Попытка объяснить «короткую» форму: Я хочу запустить серию проектов, используя один объект за другим (удаленный хост с открытым исходным кодом). Я хочу, чтобы каждый был вызван перед ним. Я хочу использовать декларативный конвейер. Я хочу, чтобы последующие проекты запускались независимо от конечного состояния предыдущего проекта. Я бы предпочел, чтобы первый проект был запущен проверкой SCM. Я бы предпочел, чтобы на всех работах использовался один и тот же jenkinsfile.

Возможно ли это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...