13/11/2025

Jenkins – Substutition

Cok fazla problemli özel karakter iceren bir password olsun.

NEXUS_PASSWORD = 3$'"|eefg$

Gördügünüz gibi bu baya problemli bir password. Üstelik bunu birde json ve curl icinde kullanacagimizi düsündügümüzde isler daha da karisacaktir.

def NEXUS_URL = "https://nexus.example.com"
pipeline {
    agent any
    environment {
        NEXUS_URL= "https://nexus.example.com"
        TARGET_URI= "deployment.url.com"
        TARGET_INSTANCE = "myInstance"
    }
    
    stages {
     stage('Secure API Call') {
       steps {
         withCredentials([
           usernamePassword(credentialsId: 'nexus-credentials', 
           usernameVariable: 'NEXUS_USER', 
           passwordVariable: 'NEXUS_PASSWORD' ]) {
        script {
          final String result = sh(returnStdout: true, script: '''
            curl -u $NEXUS_USER:$NEXUS_PASSWORD \\
            -X POST \\
            -d '{"url": "'"$NEXUS_URL"'/delivery"}' \\
            -H "Content-Type: application/json" \\
            $TARGET_URI}/api/v4/$TARGET_INSTANCE ''').trim()
          //result will be a JSON 
          def resultObject = readJSON(text: result)
          echo "Job ID: ${resultObject.job_id}"
          final String JobResult= sh(returnStdout: true, script: '''curl -u $NEXUS_USER:$NEXUS_PASSWORD $TARGET_URI}/api/v4/jobstatus/''' + resultObject.job_id + '''"''').trim()
                        
                    }
                }
            }
        }
    }
}

groovyy icinde script kullanirken ”’ kullandigimizda variable groovy tarafindan islenmiyor ve oldugu gibi bash e aktariliyor ancak groovy variable larini bash icinde kullanamiyoruz bu nedenle variable in ya environment variable olmasi gerekiyor veya da ”’ ile bash disina cikip groovy variable koyup tekrar ”’ ile bashe girmek gerekbiliyor.