2016-01-08 13 views
11

Ok. Questo mi sta facendo impazzire lentamente. Ho impostato CI su Travis per uno dei miei progetti. Sto eseguendo alcuni test JUnit e vorrei caricare i risultati dei test sul mio server, quindi è molto più semplice consultarli.Come utilizzare correttamente l'arricciatura nel file di configurazione Travis-CI (YAML)?

In sostanza, tutto quello che voglio fare è chiamare questo:

curl -H 'Authorization: Token someToken' -X POST http://my.server.com -F [email protected] 

Quindi questo è quello che sto cercando di fare in .travis.yml file.

after_script: 
- curl -H 'Authorization: Token someToken' -X POST http://my.server.com -F [email protected] 

Il problema è che per la linea di cui sopra sto ottenendo un errore che assomiglia a questo:

$ {:"curl -H '\"Authorization"=>"Token someToken\"' -X POST http://my.server.com -F [email protected]"} 
/home/travis/build.sh: line 45: Token someToken"' -X POST http://my.server.com -F [email protected]}: No such file or directory 

Ho imparato che in YAML colon rappresenta una coppia di valori-chiave e io Ho scoperto che si può semplicemente usare le virgolette per sfuggire ai due punti.

Bene: questo è il posto in cui sono bloccato. Ho provato ad applicare quelle citazioni in molti modi diversi ma in qualche modo ogni volta continuo a ripetere lo stesso errore.

Ad esempio:

curl -H '"Authorization: Token someToken"' 
curl -H "\"Authorization: Token someToken\"" 
curl -H "'Authorization: Token someToken'" 
curl -H '"Authorization": Token someToken' 

mi sembra di essere stupido e so che la correzione per questo è probabilmente una cosa semplice, ma mi sono sentito in quella cosa "fuga citazioni durante la fuga citazioni" e se chiunque potrebbe indicarmi la giusta direzione, sarei davvero grato.

sto anche il collegamento a queste domande come ho cercato di seguirli per risolvere il mio problema:

Escaping colons in YAML

How to escape indicator characters (i.e. : or -) in YAML

+1

Puoi fare '- "curl 'Autorizzazione: Token someToken' -H -X POST http: //my.server.com -F [email protected] "'? –

+0

Sfortunatamente, sto ricevendo lo stesso errore. Inoltre, nel file di log di Travis, sembra che le virgolette siano ignorate. – scana

+1

Un'altra opzione, probabilmente non preferibile, è quella di utilizzare uno script di shell con tale comando (o generarlo, se applicabile) ed eseguirlo. –

risposta

7

Ok - Sono riuscito a risolvere (o hack) questo problema, con la creazione di semplice script bash:

#!/bin/bash 
curl -H 'Authorization: Token someToken' -X POST http://my.server.com -F [email protected] 

E poi procedo a chiamare lo script in file di .travis.yml:

- ./upload_script.sh 

Tutti i crediti vanno a @ набиячлэвэлиь per avermi suggerito tale soluzione nei commenti.

Qualsiasi altro - più bello - soluzioni sono più che benvenuto.

7

In YAML, i due punti sono delimitatori che separano chiavi e valori di mappa.

quello che hai ora:

curl -H 'Authorization: token someToken' "https://api.github.com/repos/:owner/:repo/releases/tags/$TRAVIS_TAG" 

è una mappa con la chiave e il valore curl -H 'Authorizationtoken someToken' "https://api.github.com/repos/:owner/:repo/releases/tags/$TRAVIS_TAG". Puoi vedere come si insinua nello script di costruzione.

quello che vuoi è una stringa correttamente citato:

after_deploy: 
    - "curl -H 'Authorization: token someToken' \"https://api.github.com/repos/:owner/:repo/releases/tags/$TRAVIS_TAG\"" 
+0

Vedo che questo è stato suggerito in precedenza da набиячлэвэлиь. Come è fallito? – banzaiman

Problemi correlati