From 3b6e1e0f725fdd5ba48052a2be8f10192ac936e2 Mon Sep 17 00:00:00 2001 From: William Petit Date: Fri, 1 Mar 2019 15:16:42 +0100 Subject: [PATCH] =?UTF-8?q?S=C3=A9paration=20des=20jobs=20d'empaquetage=20?= =?UTF-8?q?en=202=20phases?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pipelines/debian-packaging.jenkinsfile | 47 ++++-------- pipelines/debian-test-package.jenkinsfile | 87 +++++++++++++++++++++++ 2 files changed, 99 insertions(+), 35 deletions(-) create mode 100644 pipelines/debian-test-package.jenkinsfile diff --git a/pipelines/debian-packaging.jenkinsfile b/pipelines/debian-packaging.jenkinsfile index 65e18de..bdbd6db 100644 --- a/pipelines/debian-packaging.jenkinsfile +++ b/pipelines/debian-packaging.jenkinsfile @@ -109,7 +109,6 @@ pipeline { // Pour chaque construction de paquets... result.each { r -> - // On essaye de trouver un template de VM compatible // avec la distribution cible de la construction def vmTemplate = findMatchingVMTemplate(r.distrib) @@ -120,24 +119,19 @@ pipeline { // Pour chaque paquets construits... r.packages.each { p -> - def packageName = new File(p).getName() + def packageFullName = new File(p).getName() + def packageRepository = r.distrib.split('-')[1] + '-' + r.env + def packageNameParts = packageFullName.split('_') + def packageName = packageNameParts[0] + def packageVersion = packageNameParts[1] + stage("Test package '${packageName}' installation") { - try { - // On démarre une nouvelle VM et on lance l'installation du paquet publié - testPackageInstallation(vmTemplate, r.distrib, r.env, packageName) - } catch(e) { - currentBuild.result = 'UNSTABLE' - rocketSend ( - avatar: 'https://jenkins.cadol.es/static/b5f67753/images/headshot.png', - message: """ - [Installation du paquet `${packageName}` échouée sur `${vmTemplate}`](${env.RUN_DISPLAY_URL}) - - @${env.sender_login} - """.stripIndent(), - rawMessage: true - ) - error("Installation du paquet `${packageName}` échouée.") - } + build job: 'Test de paquet Debian', wait: false, parameters: [ + [$class: 'StringParameterValue', name: 'packageName', value: packageName], + [$class: 'StringParameterValue', name: 'packageVersion', value: packageVersion], + [$class: 'StringParameterValue', name: 'packageRepository', value: packageRepository], + [$class: 'StringParameterValue', name: 'vmTemplate', value: vmTemplate] + ] } } } @@ -166,21 +160,4 @@ def findMatchingVMTemplate(String distrib) { 'eole-2.6.2': 'eolebase-2.6.2-cadoles' ] return vmTemplatesMap.get(distrib, null) -} - -// Cette fonction démarre une nouvelle VM, configure les dépôts tiers pour ajouter -// celui de Cadoles correspondant à la cible du paquet et tente d'installer celui ci. -def testPackageInstallation(String vmTemplate, String distrib, String env, String packageName) { - def version = distrib.split('-')[1] - def packageNameParts = packageName.split('_') - nebula.runInNewVM([ - vmTemplate: vmTemplate, - script: """ - set -xeo pipefail - wget -qO - https://vulcain.cadoles.com/cadoles.gpg | apt-key add - - echo 'deb https://vulcain.cadoles.com ${version}-${env} main' > /etc/apt/sources.list.d/${version}-${env}.list - apt-get update -y - apt-get install -y ${packageNameParts[0]}=${packageNameParts[1]} - """ - ]) } \ No newline at end of file diff --git a/pipelines/debian-test-package.jenkinsfile b/pipelines/debian-test-package.jenkinsfile new file mode 100644 index 0000000..ec4dbfa --- /dev/null +++ b/pipelines/debian-test-package.jenkinsfile @@ -0,0 +1,87 @@ +@Library("cadoles") _ + +pipeline { + + agent { + label 'common' + } + + parameters { + string( + name: 'packageName', + description: 'Nom du paquet à installer' + ) + string( + name: 'packageVersion', + defaultValue: '', + description: 'Version du paquet à installer' + ) + string( + name: 'packageRepository', + description: 'Dépôt de paquets à utiliser sur Vulcain' + ) + string( + name: 'vmTemplate', + description: 'Template OpenNebula de la VM à utiliser pour le test d\'installation' + ) + } + + stages { + + stage("Check parameters") { + steps { + script { + if (!params.packageName?.trim()) { + error("Le nom du paquet n'est pas défini !") + } + if (!params.vmTemplate?.trim()) { + error("Le template de VM n'est pas défini !") + } + if (!params.packageRepository?.trim()) { + error("Le dépôt de paquets n'est pas défini !") + } + } + } + } + + stage("Test package installation") { + steps { + script { + nebula.runInNewVM([ + vmTemplate: params.vmTemplate, + script: """ + set -xeo pipefail + wget -qO - https://vulcain.cadoles.com/cadoles.gpg | apt-key add - + echo 'deb https://vulcain.cadoles.com ${params.packageRepository} main' > /etc/apt/sources.list.d/${params.packageRepository}.list + apt-get update -y + apt-get install -y ${params.packageName}${ params.packageVersion?.trim() ? '=' + params.packageVersion?.trim() : ''} + """ + ]) + } + } + } + } + + post { + failure { + wrap([$class: 'BuildUser']) { + rocketSend ( + avatar: 'https://jenkins.cadol.es/static/b5f67753/images/headshot.png', + message: """ + Le test d'installation du paquet `${params.packageName}` a échoué: + + - Version `${params.packageVersion}` + - Dépôt `${params.packageRepository}` + - Template de la VM `${params.vmTemplate}` + + [Voir le job](${env.RUN_DISPLAY_URL}) + + @${env.BUILD_USER_ID ? env.BUILD_USER_ID : 'here'} + """.stripIndent(), + rawMessage: true + ) + } + } + } + +} \ No newline at end of file