我正在尝试通过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。
这可能吗?