import java.net.URI import java.nio.file.Paths def confrepo = 'http://gogs.smb.basealt.ru/BaseALT/autojen.git' def infraConfRepo = 'http://gogs.smb.basealt.ru/BaseALT/infra-conf.git' def infraRepo = 'https://github.com/altlinuxteam/infra.git' def stackSamba = [ 'jenkins-samba-1x3', 'jenkins-samba-3x3', 'jenkins-samba-8sp-1x3-pub', 'jenkins-samba-8sp-3x3-pub', 'jenkins-samba-9-3x3-pub', 'jenkins-samba-sisyphus-1x3', 'jenkins-samba-sisyphus-1x3-pub', 'jenkins-samba-sisyphus-3x3-pub', 'jenkins-samba-sisyphus-3x3' ] def stackKerberos = [ 'jenkins-krb5-sisyphus-1x1' ] folder('samba') { displayName('Samba Team') description('Jobs for Samba AD DC testing and deployment') views { listView('Samba stacks') { description('Samba AD DC tests') filterBuildQueue() filterExecutors() columns { status() name() buildButton() } jobs { stackSamba.each { stack -> name(stack) } } } listView('Kerberos stacks') { description('Kerberos stacks') filterBuildQueue() filterExecutors() columns { status() name() buildButton() } jobs { stackKerberos.each { stack -> name(stack) } } } } } def mirrorsDest = '/data/mirrors/alt' def imageMirrorsDest = '/data/shared/iso' def mirrorsSrc = 'mirror.yandex.ru' def platforms = [ 'c8', 'p8', 'p9' ] def elbrusBracnhes = [ 'c8', 'p8', 'p9', 'sisyphus' ] def images = [ 'http://ftp.altlinux.org/pub/distributions/ALTLinux/p8/images/workstation/alt-workstation-8.2.1-20190906-x86_64-ru-install-dvd5.iso', 'http://ftp.altlinux.org/pub/distributions/ALTLinux/p8/images/server/alt-server-8.2.1-20190906-x86_64-ru-install-dvd5.iso', 'http://ftp.altlinux.org/pub/distributions/ALTLinux/p8/images/kworkstation/alt-kworkstation-8.3-install-x86_64.iso', 'http://ftp.altlinux.org/pub/distributions/ALTLinux/p9/images/server/alt-server-20191009_rc4-x86_64.iso', 'http://ftp.altlinux.org/pub/distributions/ALTLinux/p9/images/server/alt-server-20191009_rc4-aarch64.iso', 'http://ftp.altlinux.org/pub/distributions/ALTLinux/p9/images/workstation/x86_64/alt-workstation-8.991_rc2-x86_64.iso', 'http://ftp.altlinux.org/pub/distributions/ALTLinux/p9/images/workstation/aarch64/alt-workstation-8.991_rc2-aarch64.iso', 'http://ftp.altlinux.org/pub/distributions/ALTLinux/p9/images/workstation/mipsel/tavolga-alt-workstation-8.920_beta2-mipsel.recovery.tar' ] folder('infra') { displayName('Infrastructure') description('Run Jenkins Job DSL to reconfigure master') views { sectionedView('File synchronization') { description('File synchronization') filterBuildQueue() filterExecutors() sections { listView { name('Images') columns { status() name() buildButton() } jobs { regex('sync-image-.*') } } listView { name('Repos') columns { status() name() buildButton() } jobs { regex("sync-pub-.*") } } listView { name('Elbrus repos') columns { status() name() buildButton() } jobs { regex("sync-e2k-.*") } } } } listView('Backups') { description('Jobs to backup various artifacts') filterBuildQueue() filterExecutors() columns { status() name() buildButton() } jobs { name('switch-backup') } } listView('etc') { description('Uncategorized jobs') filterBuildQueue() filterExecutors() columns { status() name() buildButton() } jobs { name('configure-jenkins') } } } } /* * Job to configure Jenkins job('infra/configure-jenkins') { displayName('Configure Jenkins') description('Apply Jenkins configuration') scm { git { remote { name('origin') url(confrepo) } branch('master') extensions { cleanAfterCheckout() } } } } */ for (i = 0; i < images.size(); i++) { filename = Paths.get(new URI(images[i]).getPath()).getFileName().toString() job("infra/sync-image-${i}") { displayName("${filename}") description("Synchronize image: ${images[i]}") label('pve') logRotator { numToKeep(10) } parameters { stringParam('IMAGES_DEST', imageMirrorsDest, 'Directory to save images to') } scm { git { remote { name('origin') url(confrepo) } branch('master') extensions { cleanAfterCheckout() } } } triggers { // Make a pause for sync during working hours //cron('H 3,7,9,20,23 * * *') } steps { shell("/usr/bin/env IMAGES_DEST=" + '${IMAGES_DEST}' + " IMAGE=${images[i]} FILE=${filename} /bin/sh ./scripts/sync_image") } } } /* * Generate jobs to syncrinize various repos. The process looks like * this: * 1) Checkout this repo; * 2) Run synchronization script with paths set via environment * variables; * 3) Cleanup workspace; */ platforms.each { platform -> job("infra/sync-pub-${platform}") { displayName("Synchronize ALT Linux repos for ${platform}") description('Runs synchronization script on PVE') // The job must be run on pve node label('pve') logRotator { numToKeep(10) } parameters { stringParam('MIRRORS_DEST', mirrorsDest, 'Directory to save repository to') stringParam('MIRRORS_SRC', mirrorsSrc, 'Host to download files from') } scm { git { remote { name('origin') url(confrepo) } branch('master') extensions { cleanAfterCheckout() } } } triggers { // Make a pause for sync during working hours cron('H 3,7,9,20,23 * * *') } steps { shell('/usr/bin/env MIRRORS_DEST=${MIRRORS_DEST} MIRRORS_SRC=${MIRRORS_SRC} PLATFORM=' + platform + ' /bin/sh ./scripts/sync_alt_repo') } } } job('infra/switch-backup') { displayName('Backup switch configuration') description('Signals switches to dump active configuration to central storage') label('pve') logRotator { numToKeep(20) } scm { git { remote { name('origin') url(confrepo) } branch('master') extensions { cleanAfterCheckout() } } } triggers { // Synchronize every 5 hours cron('H 5,10,15,20 * * *') } steps { shell('echo test') } }