2016-02-17 24 views
11

Ho un'API sviluppata in NodeJS e ho impostato correttamente l'integrazione continua tramite un file .gitlab-ci.yml. La fase successiva prevede l'installazione continua su Heroku se tutti i test passano sul ramo principale.Distribuzione continua di un NodeJS utilizzando GitLab

Esistono numerose esercitazioni per la distribuzione di app Ruby e Python ma nulla su NodeJS. Attualmente il mio file .gitlab-ci.yml assomiglia a questo:

image: node:latest 

job1: 
    script: "ls -l" 

test: 
    script: "npm install;npm test" 

production: 
    type: deploy 
    script: 
    - npm install 
    - npm start 
    - gem install dpl 
    - dpl --provider=heroku --app=my-first-nodejs --api-key=XXXXXXXXXX 
    only: 
    - master 

I tutorial Ruby e Python utilizzare lo strumento dpl da distribuire ma come posso avviare lo script NodeJS sul server una volta distribuito?

Dopo aver aggiunto la sezione di produzione e averlo premuto, i test vengono eseguiti e passati ma la fase di implementazione rimane bloccata in sospeso. La console è vuota. Qualcuno ha creato uno script per CD di successo per NodeJS?

+1

Ciao, potresti condividere la tua attuale soluzione a questo? Grazie :) –

risposta

6

Bene, questa non sarà la risposta più lunga di sempre, ma questo may help you.

Ecco il contenuto se mai sparire:

image: node:argon 

    before_script: 
    - apt-get -qq update 
    - apt-get -qq install -y python2.7 python2.7-dev build-essential make gcc g++ libicu-dev 
    - npm -g install npm --silent 
    - "echo -e \"export default {CLIENT_ID: '$CLIENT_ID'}\" > app/scripts/settings.js" 
    - npm set progress=false 
    - npm install --silent 

    stages: 
    - test 
    - build 
    - clean_up 

    run_tests: 
    stage: test 
    script: 
     - npm test 

    build_and_deploy_prod: 
    stage: build 
    script: 
     - npm run build 
     - mkdir dist/build 
     - tar czfC dist/build/latest.tar.gz dist/$CI_BUILD_REF_NAME/ . 
     - tar czfC dist/build/$CI_BUILD_REF.tar.gz dist/$CI_BUILD_REF_NAME/ . 
     - apt-get install -yqq ruby ruby-dev 
     - gem install dpl 
     - dpl --skip_cleanup --provider=s3 --region=eu-west-1 --access-key-id=$AWS_ACCESS_KEY --secret-access-key=$AWS_SECRET_KEY --bucket=$AWS_BUCKET --local-dir=dist/build/ --upload-dir=$CI_BUILD_REF_NAME 
    artifacts: 
     paths: 
     - dist/$CI_BUILD_REF_NAME/ 
    only: 
     - master 
     - develop 

    clean_up_job: 
    stage: clean_up 
    script: 
     - rm -rf node_modules 
     - rm -rf ~/.node-gyp 
    when: on_failure 
6

si potrebbe utilizzare uno script YAML molto più semplice in cui è possibile definire le tappe per il CI (per l'esecuzione di test prima di implementare la produzione) è possibile quindi utilizzare un immagine diversa nella fase di schieramento di Heroku. Quindi per un'app di nodo definisci l'immagine predefinita come nodo: l'ultima. Quindi per la distribuzione di produzione usando dpl puoi usare l'immagine ruby.

image: node:latest 

stages: 
    - job1 
    - test 
    - production 

job1: 
    stage: job1 
    script: "ls -l" 

test: 
    stage: test 
    script: 
    - npm install 
    - npm test 
    artifacts: 
    paths: 
     - dist/ 

production: 
    type: deploy 
    stage: production 
    image: ruby:latest 
    script: 
    - apt-get update -qy 
    - apt-get install -y ruby-dev 
    - gem install dpl 
    - dpl --provider=heroku --app=my-first-nodejs --api-key=XXXXXXXXXX 
    only: 
    - master 
+0

xam, ho una domanda, il '' '--api-key''' è allegato al mio account in heroku, quindi se ho un progetto open source in gitlab chiunque può distribuire ai miei server heroku. Come posso assicurarmi che solo MY gitlab.ci possa essere distribuito con la mia chiave-api? –

+2

@CynthiaSanchez è possibile aggiungere variabili che vengono visualizzate solo da te in gitlab. controlla le impostazioni del tuo progetto è lì da qualche parte – Ced

+0

al momento (gitlab> = v10) i suoi ambienti in> ci/cd>, ma sì li crei come variabili di ambiente e li fai riferimento dal file con '$ ENV_NAME' – xam

Problemi correlati