在同一硬件上协调一系列几乎相同的构建的最佳方法

时间:2019-06-07 15:14:55

标签: jenkins jenkins-pipeline

我正在尝试通过Jenkins在裸机上测试OS构建。 现在,我有大约60个作业(每月构建* 3个操作系统* 1个构建作业和一个用于验证的作业)乘以10个左右的主机,每组10个以循环的方式链接在一起。 至少可以这样说。 我正在尝试使用Jenkins Pipeline减少这种情况-我只希望在相关更改的几个git repos中的任何一个开始时才启动第一个构建,但是我想让它们级联。

我在jenkinsfile中尝试了一个循环,但是如果任何一个阶段失败了,那么失败后的所有阶段都会失败。 你有什么建议?

我当前的“计划”是每个主机的每个OS版本都有1个项目,并为每个参数设置“上游监视”。这似乎仍然比它值得的麻烦。

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。

这可能吗?

0 个答案:

没有答案