@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]) { shell -> // On ajoute le dépôt Vulcain sur la machine et on met // à jour la liste des paquets stage("Add Vulcain '${params.packageRepository}' repository") { shell(""" 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 """) } // On installe le paquet dans la version demandée (si celle ci est fournie) stage("Install package '${params.packageName}${ params.packageVersion?.trim() ? '=' + params.packageVersion?.trim() : ''}'") { hook("pre-install") shell(""" set -xeo pipefail apt-get install -y ${params.packageName}${ params.packageVersion?.trim() ? '=' + params.packageVersion?.trim() : ''} """) hook("post-install") } // Si le template de VM est basé sur EOLE, alors on tente // d'appliquer un CreoleLint sur les dicos/templates qui pourraient être // distribués par le paquet nouvellement installé if (params.vmTemplate.contains('eole')) { stage("Lint Creole templates") { shell(""" set -xeo pipefail TEMPLATES=\$(dpkg -L ${params.packageName} | grep /usr/share/eole/creole/distrib/ || true) if [ -z "\$TEMPLATES" ]; then echo "Aucun template Creole dans le paquet." exit 0 fi for tmpl in \$TEMPLATES; do CreoleLint -t \$(basename \$tmpl) done """) } stage("Lint Creole dictionnaries") { shell(""" set -xeo pipefail DICOS=\$(dpkg -L ${params.packageName} | grep /usr/share/eole/creole/dicos/ || true) if [ -z "\$DICOS" ]; then echo "Aucun dictionnaire Creole dans le paquet." exit 0 fi for dico in \$DICOS; do CreoleLint -d \$(basename \$DICOS) done """) } } } } } } } 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 ) } } } }