// Jenkinsfile for Rocky Man // This pipeline uses Kubernetes agents to build and run the container pipeline { agent { kubernetes { yaml """ apiVersion: v1 kind: Pod metadata: labels: jenkins: agent spec: containers: - name: docker image: docker:24-dind securityContext: privileged: true volumeMounts: - name: docker-sock mountPath: /var/run command: - dockerd-entrypoint.sh - name: docker-cli image: docker:24-cli command: - cat tty: true volumeMounts: - name: docker-sock mountPath: /var/run - name: b2 image: backblazeit/b2:latest command: - cat tty: true volumes: - name: docker-sock emptyDir: {} """ } } parameters { string( name: 'VERSIONS', defaultValue: '8.10 9.6 10.0', description: 'Rocky Linux versions to build (space-separated)' ) string( name: 'B2_BUCKET_NAME', defaultValue: 'rockyman', description: 'B2 bucket name for uploads' ) } options { buildDiscarder(logRotator(numToKeepStr: '10')) timeout(time: 2, unit: 'HOURS') } stages { stage('Checkout') { steps { checkout scm } } stage('Build Docker Image') { steps { container('docker-cli') { sh ''' docker build -t rocky-man:${BUILD_NUMBER} . docker tag rocky-man:${BUILD_NUMBER} rocky-man:latest ''' } } } stage('Build Man Pages') { steps { container('docker-cli') { sh """ # Create output directories mkdir -p ./html ./tmp # Run the container to build man pages docker run --rm \ -v "\$(pwd)/html:/app/html" \ -v "\$(pwd)/tmp:/data/tmp" \ rocky-man:${BUILD_NUMBER} \ --versions ${params.VERSIONS} \ --verbose """ } } } #stage('Archive Artifacts') { # steps { # archiveArtifacts artifacts: 'html/**/*', fingerprint: true # } #} stage('Upload to B2') { steps { container('b2') { withCredentials([ string(credentialsId: 'b2-app-id', variable: 'B2_APPLICATION_ID'), string(credentialsId: 'b2-app-key', variable: 'B2_APPLICATION_KEY') ]) { sh ''' b2 authorize-account ${B2_APPLICATION_ID} ${B2_APPLICATION_KEY} b2 sync \ --allowEmptySource \ --compareVersions size \ ./html/ \ b2://${B2_BUCKET_NAME}/builds/${BUILD_NUMBER}/ ''' } } } } } post { success { echo 'Build completed successfully and uploaded to B2!' } failure { echo 'Build failed!' } cleanup { container('docker-cli') { sh ''' # Clean up Docker images to save space docker rmi rocky-man:${BUILD_NUMBER} || true docker rmi rocky-man:latest || true ''' } } } }