2016-04-16 29 views
5

Sto cercando di ottenere Jenkins per eseguire un comando di shell, ma permetto comunque di utilizzare i caratteri jolly. Ecco quello che sto cercando di fare per riferimento:Jenkins - Esegue comandi di shell con caratteri jolly

mvn deploy:deploy-file -Dpackaging=jar -DrepositoryId=snapshots -Durl=http://nexus.example.net/content/repositories/snapshots -DpomFile=Spigot/Spigot-Server/pom.xml -Dfile=Spigot/Spigot-Server/target/spigot-*.jar 

ho bisogno di essere in grado di implementare questo barattolo tramite il comando sopra, perché il repository git per quel progetto non è di proprietà o gestiti da me, quindi ho bisogno essere in grado di distribuirlo direttamente nella mia istanza Nexus. Per garantire che supporterà tutte le possibili versioni del barattolo compilato, devo usare una wild card. Sfortunatamente, quando Jenkins tenta di eseguire il comando, prende letteralmente il jolly. Non sono sicuro di come risolvere questo problema, sarei grato per qualsiasi aiuto tu possa fornire. Grazie!

risposta

2

Se si tratta di un semplice file .jar singola prova questo:

mvn deploy:deploy-file -Dpackaging=jar -DrepositoryId=snapshots -Durl=http://nexus.example.net/content/repositories/snapshots -DpomFile=Spigot/Spigot-Server/pom.xml -Dfile=$(find Spigot/Spigot-Server/target/ -name 'spigot-*.jar') 

Se si tratta di più file, è un po 'più complicato :

Il deploy-file di Maven parametri file, classificatori e tipi vengono utilizzati quando si desidera distribuire più artefatti sotto la stessa (groupId, artifactId, versione) - ad esempio, un .jar e -sources.jar

Anche per questo use case, la sintassi è alquanto controintuitiva - è necessario utilizzare file = file1.jar per il primo artefatto e quindi file = file1-sources.jar, file1-test-sources.zip, .. per il resto , durante l'utilizzo di classificatore/classificatori (e imballaggio/tipi) nello stesso modo (posizionale) per specificare classificatore/tipo di ogni artefatto che sta caricando.

Se il vostro caso d'uso è manufatti caricamento di versioni diverse, sarà necessario fare un esperto di chiamata deploy-file per ogni versione.

Si potrebbe anche prendere in considerazione alcune alternative:

  1. (a seconda di quanti manufatti, e la frequenza con quelli nuovi si imbatte) - caricare questi artefatti manualmente al Nexus

  2. fate Nexus proxy un altro repository Nexus che serve questi artefatti.

+0

Grazie mille! Per la cronaca, stavo solo cercando di distribuire un singolo file. – mattrick

1

Se vuoi dire si desidera solo il * da passare su direttamente, basta usare le virgolette singole per evitare il guscio di applicare globbing:

mvn deploy:deploy-file [...] '-Dfile=Spigot/Spigot-Server/target/spigot-*.jar' 
+0

In realtà volevo il contrario. Non è il globulo che è il problema. – mattrick

+0

@mattrick: Ah. Probabilmente varrebbe la pena di chiarirlo. Potrebbe essere necessario farlo in più comandi ... non è sicuro. –

+0

@JonSkeet, FWIW, il post indica "prende letteralmente il carattere jolly" :-) È interessante notare che se il comando viene eseguito in bash all'esterno di Jenkins, la shell tenta effettivamente di glob prima di eseguire il comando, a meno che non venga seguito il suggerimento. Non sono sicuro del perché la shell di Jenkins non segua lo stesso comportamento. –

0

Se si sta tentando di distribuire più file penso problema è non con comando Jenkins o bash, ma con l'utilizzo di Maven Deploy Plugin.

documentazione afferma

file File - File to be deployed. 
User property is: file. 

e se si desidera distribuire manufatti in più, utilizzare

files  String - A comma separated list of files for each of the 
        extra side artifacts to deploy. If there is a 
        mis-match in the number of entries in types or 
        classifiers, then an error will be raised. 
User property is: files. 

Così sarebbe meglio se si specifica file aggiuntivi a distribuire in modo esplicito utilizzando ulteriori files, types, classifies parametri, es .:

... -Dfile=Spigot/Spigot-Server/target/main-spigot.jar \ 
-Dfiles=$(ls -1d Spigot/Spigot-Server/target/spigot-*.jar | paste -sd ,) -Dtypes=... -Dclassifiers=...