Vincent's Blog

Jenkins en Pelican

Gepubliceerd op

Categorie: misc

Tags: pelican Jenkins

Mijn nieuwe blog is gemaakt met Pelican, een Statische site generator. Elke keer mijn site manueel uploaden is irritant dus heb ik Jenkins opgezet om automatisch mijn site te bouwen en te uploaden.

Dit lukt met de volgende Jenkinsfile:

pipeline {
    agent any

    environment {
        REMOTE_USER = 'vincent'
        REMOTE_HOST = 'rpi5.local'
        REMOTE_DIR  = '/home/vincent/public_html/blog.vincentlammens.be/'
        OUTPUT_DIR  = 'output'
        SSH_CRED_ID = 'ssh-rpi5-jenkins'
    }

    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }

        stage('Prepare Environment') {
            steps {
                sh '''
                    if [ ! -d ".venv" ]; then
                        python3 -m venv .venv
                    fi
                    . .venv/bin/activate
                    pip install --upgrade pip
                    pip install -r requirements.txt
                '''
            }
        }

        stage('Build Site') {
            steps {
                sh '''
                    . .venv/bin/activate
                    make publish
                '''
            }
        }

        stage('Deploy (rsync)') {
            steps {
                // We halen de private key op als een tijdelijk bestand
                withCredentials([sshUserPrivateKey(credentialsId: "${SSH_CRED_ID}", keyFileVariable: 'SSH_KEY')]) {
                    sh '''
                        rsync -avz --delete \
                        -e "ssh -i ${SSH_KEY} -o StrictHostKeyChecking=no" \
                        ${OUTPUT_DIR}/ ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}
                    '''
                }
            }
        }
    }
    post {
        success {
            emailext(
                to: 'vincent@vincentlammens.be',
                subject: "SUCCESS: ${env.JOB_NAME} has been built successfully!",
                body: """Build succeeded.

Job: ${env.JOB_NAME}
Build: #${env.BUILD_NUMBER}
URL: ${env.BUILD_URL}
"""
            )
        }
    }
}

Jenkins dashboard