2016-07-07 73 views

risposta

-3

è necessario memorizzare l'url git all'interno del vostro lavoro principale e passare il parametro alla fase bambino

o si può semplicemente clonare il progetto sul vostro lavoro principale e la forma di lavoro lì.

Utilizzare il https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin sua GIT plug-Jenkins

+2

Questo è più per lavori freestyle che per pipeline multibranch. – BitwiseMan

+0

Questo è il modo in cui lavoro con jenkins – CodeWizard

+1

D'accordo, per i lavori freestyle ciò che descrivi è corretto. Ma pipepline multibranch funziona diversamente. Poiché la domanda è specifica per i lavori della pipeline multi-traccia, la tua risposta non si applica. – BitwiseMan

11

Lei ha ragione, l'oggetto scm ha le informazioni necessarie.

Quando si utilizza git come controllo del codice sorgente in un progetto Pipeline (o progetto Pipeline Multibranch), la variabile globale scm sarà un'istanza di GitSCM. Ciò significa che `scm.getUserRemoteConfigs() 'restituirà un elenco di istanze UserRemoteConfig. Queste istanze hanno il nome, l'url e il refspec del git remote. Puoi scorrere su quell'elenco per trovare un telecomando corrispondente, o semplicemente prendere il primo se sei sicuro di avere solo un url.

def scmUrl = scm.getUserRemoteConfigs()[0].getUrl() 

NOTE

  • RejectedAccessException - I getUserRemoteConfigs e getUrl metodi saranno entrambi gettare org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException fino a quando non li approvi manualmente, sotto la voce "Gestione Jenkins -> in-process Script di approvazione". L'unico modo che ho trovato per fare questo è provare a eseguire lo script, fargli lanciare un'eccezione di accesso, approvare l'unico metodo che ha causato l'eccezione e ripetere per ciascun metodo fino a quando non vengono lanciate più eccezioni di accesso. Fortunatamente l'impostazione è a livello di server, quindi devi farlo solo una volta per controller jenkins, non per ogni lavoro di pipeline.

  • GitHub - Durante il test con un GitHub -sourced gasdotto multiramo, getUserRemoteConfigs restituito due istanze UserRemoteConfig, uno per rami regolari e un altro per le richieste di trazione. Questi avevano lo stesso URL quindi non un grosso problema, ma qualcosa da tenere a mente. Per esempio, in un progetto che utilizza una connessione HTTPS-based:

    echo scm.getUserRemoteConfigs() 
    
    "[ 
        +refs/heads/*:refs/remotes/origin/* => https://github.com/bitwiseman/project.git (origin), 
        +refs/pull/*/head:refs/remotes/origin/pr/* => https://github.com/bitwiseman/project.git (origin) 
    ]" 
    
+0

Grazie, questo è esattamente quello che stavo cercando. –

+3

La tua risposta mi ha fatto anche capire che l'url sarebbe disponibile analizzando il file ''. .git/config'''. Questo ha il vantaggio di evitare il problema RejectedAccessException, ma aggiunge più complessità allo script di build. –

+0

da dove viene ottenuto l'URL https da jenkins? 'git remote -v' restituisce l'URL SSH come previsto. Sono piuttosto deluso dal fatto che cose banali come l'aggiornamento di un sottomodulo richiedono soluzioni alternative giganti. gasdotto multiramo non si sente pronto per il prime-time a tutti ... – andsens

8

Ispirato da un commento in risposta da @BitwiseMan, ho trovato un modo (hacky) per ottenere l'URL senza RejectedAccessException:

checkout scm 
def url = sh(returnStdout: true, script: 'git config remote.origin.url').trim() 

Si prega di notare che deve essere fatto dopo checkout scm. Fondamentalmente, devi trovarti in un repository git estratto (ad esempio, contiene il file .git/config)

+0

Questo funziona. Nel mio caso lo sto usando per evitare di configurare l'url all'interno del pom.xml di un progetto maven. Direi che scoprire automaticamente l'url in questo modo è strettamente meno hacky di dover mantenere l'url nel progetto Maven (che può dare errori confusi se è sbagliato). – drrob