nikoladsp

ldap

Aug 16th, 2025 (edited)
1,860
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Groovy 2.82 KB | Source Code | 0 0
  1. pipeline {
  2.    
  3.     agent { label 'SDK Linux CI (CentOS 7)' }
  4.    
  5.     parameters { booleanParam(name: 'FORCE_BUILD', defaultValue: false, description: 'Force LDAP image build') }
  6.    
  7.     stages {
  8.         stage('Build and run LDAP') {
  9.             steps {
  10.                 script {
  11.                     withCredentials([usernamePassword(credentialsId: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
  12.                         sh "curl --insecure -u \"$USERNAME:$PASSWORD\" -L -o Dockerfile https://mysrever/dap/Dockerfile"
  13.                     }
  14.                    
  15.                     buildAndRun("ldap:latest")
  16.                 }
  17.             }
  18.         }
  19.     }
  20. }
  21.  
  22. def buildAndRun(String imageName, int certThresholdDays = 30) {
  23.     def forceBuild = params.FORCE_BUILD ?: false
  24.  
  25.     // Check if image exists
  26.     def imageExists = sh(
  27.         script: "docker images -q ${imageName}",
  28.         returnStdout: true
  29.     ).trim() != ""
  30.  
  31.     // Check if cert expiring soon
  32.     def certExpiringSoon = {
  33.         try {
  34.             def nowUtc = sh(script: "date +%s", returnStdout: true).trim().toLong()
  35.             def certExpiryUtc = sh(
  36.                 script: "docker run --rm --entrypoint cat ${imageName} /artifacts/expiry_timestamp",
  37.                 returnStdout: true
  38.             ).trim().toLong()
  39.             def daysLeft = (certExpiryUtc - nowUtc) / 86400
  40.             echo "Cert expires in ${daysLeft} days"
  41.             return daysLeft < certThresholdDays
  42.         } catch (Exception e) {
  43.             echo "No cert info found in ${imageName}, assuming rebuild needed"
  44.             return true
  45.         }
  46.     }
  47.    
  48.     def opts = [["valid", "389", "636"], ["expired", "1389", "1636"], ["invalid", "2389", "2636"]]
  49.  
  50.     if (forceBuild || !imageExists || certExpiringSoon()) {
  51.         echo "Building image ${imageName}..."
  52.         sh "docker build -t ${imageName} ."
  53.        
  54.         def names = opts.collect{ "ldap-${it[0]}" }
  55.         def containers = names.join(" ")
  56.         echo "Stopping ${containers}..."
  57.         sh "docker stop ${containers} 2> /dev/null"
  58.     } else {
  59.         echo "Image ${imageName} is valid — no rebuild"
  60.     }
  61.  
  62.     // Always start three containers with different CERT_TYPE
  63.     opts.each { tuple ->
  64.         def type = tuple[0]
  65.         def port = tuple[1]
  66.         def sslPort = tuple[2]
  67.         def hostname = type != "valid" ? type : "ldap"
  68.         def name = "ldap-${type}"
  69.  
  70.         echo "Ensuring container ${name} is running..."
  71.  
  72.         sh """
  73.            docker ps --filter name=${name} --format '{{.Names}}' | grep -q "^${name}\$" || \
  74.            docker start ${name} || \
  75.            docker run -d --name ${name} -p ${port}:1389 -p ${sslPort}:1636 --hostname=${hostname}.sdk.local -e CERT_TYPE=${type} ${imageName}
  76.        """
  77.     }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment