2016-04-27 94 views
9

Come posso prelevare un repository Subversion che richiede credenziali utente, tramite uno script groovy della pipeline Jenkins? Sembra che il built-in svn comando non supporta le credenziali, così ho provato il codice come questo:Checkout SVN con credenziali nella pipeline Jenkins?

node { 
    stage 'checkout' 
    withCredentials([[$class: 'UsernamePasswordMultiBinding', 
         credentialsId: '34761a89-1402-47d7-96e2-aec22ffdc50b', 
         usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) { 
     sh "svn co https://trac.nci.org.au/svn/cable/branches/$SVN_BRANCH --username $USERNAME --password $PASSWORD cable_branch" 
    } 
} 

Ma questo non riesce con

groovy.lang.MissingPropertyException: No such property: USERNAME for class: groovy.lang.Binding 
    at groovy.lang.Binding.getVariable(Binding.java:63) 
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:224) 
    at org.kohsuke.groovy.sandbox.impl.Checker$4.call(Checker.java:241) 
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:238) 
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:221) 
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:221) 
    at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:23) 
    at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:17) 
    at WorkflowScript.run(WorkflowScript:5) 
    at ___cps.transform___(Native Method) 
    ... 

Che cosa mi manca?

risposta

19

È possibile utilizzare il generatore di snippet per SCM. Mostra le familiari opzioni di configurazione di Subversion e prende le credenziali come parametri come al solito.

Il frammento Generator produrrà una brutta rappresentazione tantino delle selezioni dei parametri e simile a questa:

checkout([$class: 'SubversionSCM', 
      additionalCredentials: [], 
      excludedCommitMessages: '', 
      excludedRegions: '', 
      excludedRevprop: '', 
      excludedUsers: '', 
      filterChangelog: false, 
      ignoreDirPropChanges: false, 
      includedRegions: '', 
      locations: [[credentialsId: '34761a89-1402-47d7-96e2-aec22ffdc50b', 
         depthOption: 'infinity', 
         ignoreExternalsOption: true, 
         local: 'cable_branch', 
         remote: "https://trac.nci.org.au/svn/cable/branches/$SVN_BRANCH"]], 
      workspaceUpdater: [$class: 'UpdateUpdater']]) 

Si noti che il remota sezione utilizza le doppie virgolette, in modo che il $ SVN_BRANCH variabile viene sostituita correttamente .

+0

Hrm .. sembra che funzioni, ma $ SVN_BRANCH (che è un parametro di build) non si espande, quindi non sono riuscito a farlo funzionare ancora. Una volta capito che // – naught101

+0

Ok, funziona, quando uso 'remote: 'https://trac.nci.org.au/svn/cable/branches/' + SVN_BRANCH'. Grazie! – naught101

+3

Come ho detto alla fine del post, è necessario utilizzare "virgolette" per Groovy per espandere la variabile all'interno della stringa. – OltzU