pipeline { agent { label 'docker-lehrer' } options { buildDiscarder(logRotator(artifactNumToKeepStr: '0')) skipDefaultCheckout(true) } parameters { string( name: 'REPOSITORY', defaultValue: 'https://itsp.htl-leoben.at/git/Hg/HTLLE-DA-Vorlage.git', description: 'URL git-Repository DA//' ) string( name: 'GIT_PATH', defaultValue: './', description: "Pfad zur DA in git (z.B.: dipl/)" ) string( name: 'GIT_BRANCH', defaultValue: '*/master', description: "Expert: Wenn Sie einen anderen als den 'master' Branch bauen möchten" ) } stages { stage('Set some variables and clean workspace'){ steps{ cleanWs() script { // set template values env.TEMPLATE_URL = 'https://itsp.htl-leoben.at/git/Hg/HTLLE-DA-Vorlage.git' env.TEMPLATE_NAME = 'HTLLE-DA-Vorlage' // add https to the url if not present env.REPOSITORY = params.REPOSITORY if(!env.REPOSITORY.startsWith("https://")) { env.REPOSITORY = "https://" + env.REPOSITORY } // sanitize git dir path env.GIT_PATH = params.GIT_PATH if(!env.GIT_PATH.endsWith("/")) { env.GIT_PATH += "/" } if(env.GIT_PATH.startsWith("/")) { env.GIT_PATH = env.GIT_PATH.substring(1) } if(env.GIT_PATH.startsWith("~/")) { env.GIT_PATH = env.GIT_PATH.substring(2) } if(env.GIT_PATH.contains("../")) { error("GIT_PATH must not contain '../'") } // be sure branch is set env.GIT_BRANCH = params.GIT_BRANCH ?: '*/master' } } } stage('Checkout DA') { when { expression { env.TEMPLATE_URL != env.REPOSITORY } } steps { // checkout out the repository including submodules // builduser acc used in git checkout([ $class: 'GitSCM', branches: [[name: "${env.GIT_BRANCH}"]], doGenerateSubmoduleConfigurations: false, extensions: [[ $class: 'SubmoduleOption', disableSubmodules: true, parentCredentials: true, recursiveSubmodules: false, shallow: true, reference: '', trackingSubmodules: false ]], submoduleCfg: [], userRemoteConfigs: [[ credentialsId: 'd65d903b-21ee-4055-98aa-ef82a903e287', url: "${env.REPOSITORY}" ]] ]) } } stage('Checkout template') { steps { // remove template folder and fresh checkout sh "rm -rf ${env.GIT_PATH}${env.TEMPLATE_NAME}" checkout([ $class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[ $class: 'RelativeTargetDirectory', relativeTargetDir: "${env.GIT_PATH}${env.TEMPLATE_NAME}" ]], submoduleCfg: [], userRemoteConfigs: [[ credentialsId: 'd65d903b-21ee-4055-98aa-ef82a903e287', url: "${env.TEMPLATE_URL}" ]] ]) } } stage('Build DA') { when { expression { env.TEMPLATE_URL != env.REPOSITORY } } steps { dir(env.GIT_PATH) { sh "make pdf -C ${env.TEMPLATE_NAME} SOURCEDIR=`pwd`" sh "hunspell -d de_AT,de_AT_frami,en_US -l -t *.md > diplomarbeit.pdf.spellcheck.txt" } } } stage('Build only template') { when { expression { env.TEMPLATE_URL == env.REPOSITORY } } steps { // build the template with the examples from DA point of view sh """#!/bin/bash cp -rv ${env.TEMPLATE_NAME}/example/. . make pdf -C ${env.TEMPLATE_NAME} SOURCEDIR=`pwd` """ } } stage('Test if diplomarbeit.pdf exists') { steps { dir(env.GIT_PATH) { sh "test -f diplomarbeit.pdf" } } } } post { always { script { env.RECIPIENTS = "" // get mail addresses metadata = readFile(file: "${env.GIT_PATH}metadata.yaml").split('\n').each { line -> if(line.contains("- build-notification:")) { // remove yaml comments if(line.contains('#')) { line = line.substring(0, line.indexOf('#')) } def mailMatch = line =~ /[_A-Za-z0-9-]+(.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(.[A-Za-z0-9]+)*(.[A-Za-z]{2,})/ if(mailMatch) { env.RECIPIENTS += (mailMatch[0][0] + ";") } } } } dir(env.GIT_PATH) { emailext attachmentsPattern: "diplomarbeit.pdf*", to: "${env.RECIPIENTS}", subject: "[${currentBuild.currentResult}] Diplomarbeit Build #${env.BUILD_NUMBER}", body: "Job ${env.JOB_NAME}: ${env.JOB_URL}" } } } }