Я пытаюсь протестировать сборки ОС на голом железе через 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.
Возможно ли это?