Come posso convincere Jenkins a eseguire uno script estratto da Git?


12

Sto usando Jenkins per innescare e gestire una serie di lavori di importazione. Voglio mettere il mio script di importazione in Github e quando Jenkins crea il lavoro, dovrebbe (a) estrarre lo script controllato dalla versione da Github e (b) eseguire lo script.

Il problema in cui mi imbatto è che non so come fare riferimento al nome dello script da eseguire all'interno del lavoro. Suppongo che il codice sorgente sia inserito nella directory dell'area di lavoro. Questa ipotesi è corretta? (Se solo ci fosse documentazione!)

Ecco cosa ho fatto finora:

  1. Ho installato Jenkins (ovviamente) sul mio Windows Server (no, non avevo scelta al riguardo)
  2. Creato un repository sul mio account github e inserito il mio codice
    • È pubblico all'indirizzo https://github.com/mcholl/SARS-Import/
    • Vedrai che ho due script, roottest.py e omniture-video \ test.py. Il codice è sotto brevetto di Apple, ne sono sicuro :)
    • L'idea è che vorrei eseguire roottest.py
  3. Installato il plug-in Github
  4. Creato un lavoro come segue:
  5. Eseguire manualmente il lavoro

Quello che ottengo, tuttavia, è un messaggio di errore che non è possibile individuare il file. Questo è strano, perché presumo che il flusso di lavoro sarebbe "estrarre una copia locale della sorgente nella directory ... (Lavoro) / area di lavoro /, quindi eseguire il comando batch nel contesto della directory dell'area di lavoro.

Ecco l'output della console completa:

Iniziato dall'utente anonimo Creazione nello spazio di lavoro C: \ Programmi (x86) \ Jenkins \ jobs \ Testing Github Integration \ workspace [workspace] $ cmd / c call C: \ Windows \ TEMP \ hudson1966342425043540895.bat

C: \ Programmi (x86) \ Jenkins \ jobs \ Testing Github Integration \ workspace> python roottest.py python: impossibile aprire il file 'roottest.py': [Errno 2] Nessun file o directory

C: \ Programmi (x86) \ Jenkins \ jobs \ Testing Github Integration \ workspace> exit 2 Passaggio di costruzione 'Esegui comando batch di Windows' contrassegnato come errore Terminato: FAILURE

Ovviamente mi aspettavo di vedere i risultati della mia dichiarazione di stampa nella console.

Cosa ho sbagliato? E perché la mia sceneggiatura non è già lì?


Vediamo il codice da C: \ Windows \ TEMP \ hudson1966342425043540895.bat stai usando git pull?

Jenkins crea automaticamente quindi lo elimina. Puoi vedere l'intero contenuto nell'output della console, tuttavia: è il comando "python roottest.py" a cui ho fatto riferimento in precedenza
Affable Geek

roottest.py non è nel tuo percorso. Vedi il file nella directory dell'area di lavoro o viene eliminato anche automaticamente? Quando si esegue git pull, è necessario trovarsi nella copia locale del repository clonato, credo, quindi dovrebbe inserire tutte le nuove modifiche nel repository locale. È difficile aiutarti quando non riesco a vedere nessuno dei comandi in esecuzione.

Hai seguito queste istruzioni per il plugin github wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin- ? Hai impostato la variabile ambientale GIT_HOME ecc.?

D'oh! Un motivo in più per odiare Windows. Grazie - penso che potrebbe essere il problema
Affable Geek

Risposte:


5

Per la mia build (su un host Linux), faccio qualcosa del genere (come passaggio di build in Jenkins) per eseguire uno script di build dallo spazio di lavoro appena estratto:

Esegui comando shell:

 sh -x $WORKSPACE/build/myproject.build

Presumo che funzionerebbe in modo simile su Windows, tranne ovviamente che useresti \ piuttosto che / e stai usando python anziché sh per eseguire il tuo script.


2

Puoi scrivere due righe nella tua build:

chmod 777 ./my_script.sh
./my_script.sh

1
I permessi di scrittura nel mondo potrebbero non essere la migliore idea! Perché non 755 (il proprietario scrive, tutti gli altri leggono / eseguono.
kmarsh

777 non è davvero la migliore idea, ma questa risposta mi ha davvero aiutato.
Robin Dijkhof,

0

È possibile memorizzare alcuni script in Git, ad esempio test.sh:

#!/bin/bash
_test_func(){ 
 echo 'test'
}

Quindi nell'input "Esegui shell", inserisci l'importazione di quello script e chiama "_test_func":

source test.sh
_test_func

Risultato:

 + source test.sh
 + _test_func
 test
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.