autojen/configure_jenkins.groovy

314 lines
6.2 KiB
Groovy

import java.net.URI
import java.nio.file.Paths
def confrepo = 'http://gogs.srt/BaseALT/autojen.git'
def infraConfRepo = 'http://gogs.srt/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 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('AMD64')
columns {
status()
name()
buildButton()
}
jobs {
name("sync-c8")
name("sync-p8")
name("sync-p9")
}
}
listView {
name('MCST e2k')
columns {
status()
name()
buildButton()
}
jobs {
name("sync-e2k-c8")
name("sync-e2k-p8")
name("sync-e2k-p9")
}
}
listView {
name('MIPS32 LE')
columns {
status()
name()
buildButton()
}
}
listView {
name('Aarch64')
columns {
status()
name()
buildButton()
}
}
}
}
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++) {
job("infra/sync-image-${i}") {
displayName("test")
description('Synchronize image')
label('pve')
logRotator {
numToKeep(10)
}
parameters {
stringParam('IMAGES_DEST',
mirrorsDest,
'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=${url} HASH=${hash} /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-${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')
}
}