2015-04-10 21 views
6

Ho un GitLab CI runner che viene eseguito ogni volta che inserisco il codice nel mio ramo. Il problema è: io uso npm + bower per avere tutte le dipendenze di cui ho bisogno, ma non voglio scaricare tutte le dipendenze per ogni test: è uno spreco di rete e tempo.Angularjs + grunt + bower + Gitlab CI. Installazione per il test

Quindi mi sono inventato questo script. Ha senso?

touch ~/.bash_profile 
npm config set prefix ~/npm 
export PATH="~/npm/bin:$PATH" 
source ~/.bash_profile 
npm install 
rm -f ~/bower/bower.json 
cp bower.json ~/bower 
pushd ~/bower 
bower update 
bower install 
popd 
mkdir bower_components 
cp -r ~/bower/bower_components bower_components 
grunt test 

In ogni caso, un problema che sto affrontando è che va sempre in timeout con pergolato:

bower angular-cookies#1.2.16     ECMDERR Failed to execute "git ls-remote --tags --heads git://github.com/angular/bower-angular-cookies.git", exit code of #128 fatal: unable to connect to github.com: github.com[0: 192.30.252.128]: errno=Connection timed out 

Inoltre, non ha finito una volta, quindi non sono sicuro, ma sembra scarica di nuovo tutti i pacchetti ogni volta.

Ho provato a cercare in rete, ma non ho trovato nulla. C'è un modo per ottenere ciò che sto cercando di ottenere? (Anche con una strategia completamente diversa. Ho anche accesso ssh al canale)

+0

Hey, sto cercando di fare la stessa cosa e sto usando anche bower, npm e grunt. Ma per me "npm install" non funziona nemmeno. Si annulla dopo 30 minuti, dicendomi che l'esecuzione del comando ha richiesto troppo tempo. "Npm install" funziona per te senza interruzioni? – error1337

+0

@ error1337 sì, funziona. Alla fine ho adattato la sceneggiatura che ho appena postato come risposta, spero che questo possa aiutare – rpadovani

risposta

13

AGGIORNAMENTO 2016

GitLab corridori ora usano .gitlab-ci.yml che ha il supporto per la cache.

Questo è il nostro script ora:

image: *****/frontend 

stages: 
    - test 
    - deploy 

before_script: 
    - npm prune 
    - npm install 
    - bower prune --allow-root 
    - bower install --allow-root 

cache: 
    paths: 
    - node_modules/ 
    - bower_components/ 
    key: "$CI_BUILD_REPO" 

sample_test: 
    stage: test 
    script: 
    - grunt build 
    - grunt test 
    - grunt jscs --force 
    - grunt jshint --force 

sample_deploy: 
    stage: deploy 
    only: 
    - master 
    - development 
    script: 
    - grunt build babel uglify:dist 
    artifacts: 
    paths: 
     - dist/ 

Ora, la cosa interessante è key: "$CI_BUILD_REPO" nella sezione della cache - questo set la cache per essere lo stesso per tutta la configurazione in pronti contro termine. Questo è il motivo per cui usiamo npm prune e bower prune - per essere sicuri che solo i moduli abbiamo veramente bisogno sono nella build, alla fine

RISPOSTA ORIGINALE

Così, alla fine io uso questo script:

rm -f ~/bower/bower.json 
rm -f ~/bower/package.json 
cp bower.json ~/bower 
cp package.json ~/bower 
pushd ~/bower 
npm install 
bower install 
popd 
cp -r ~/bower/bower_components . 
cp -r ~/bower/node_modules . 
grunt build 
grunt test 

Inoltre, per evitare timeout da github utilizzo HTTPS invece di git per scaricare il codice, con il comando

git config --global url."https://".insteadOf git:// 
+0

puoi condividere lo script completo ('scipt.sh' &' .gitlab-ci.yml')? è uno .sh uno, giusto? Inoltre sono curioso di sapere come hai impostato il runner (quali comandi hai usato. –

+0

hi @ el.severo, questa è una vecchia configurazione per una vecchia versione di gitlab, quando non c'era ancora il '.gitlab- ci.yml' - non abbiamo ancora convertito quel server nella nuova versione – rpadovani

+0

ok, ero solo curioso di sapere come sarebbe stato lo script. –

Problemi correlati