Come configurare Travis CI con più lingue


98

Il mio progetto utilizza sia nodejs che java

Ho provato a iniziare con una build node_js quindi a installare java (poiché questo è un modulo npm)

ma gli script per installare java non sono riusciti, inoltre non credo sia necessario installarlo quando esiste una build con java già esistente.

dovrei iniziare con una build java e poi installare node?

Ci sto provando

language: java
  - oraclejdk8
language: node_js
node_js:
  - "0.10"

che ignora le prime 2 righe sembra e crea una build node_js che ha java 7 e il mio progetto usa java 8

Ho provato questa risposta per Python

utilizzando

language: node_js
node_js:
  - "0.10"
java: oraclejdk8

ma non ha funzionato

Come posso aggiungere java 8?


Risposte:


116

Ora sembra essere possibile eseguire diverse lingue in un file .travis.yml utilizzando la matrix:includefunzionalità. Ad esempio, il mio repository Github è organizzato come segue:

project/ - top-level github directory
project/backend - Python backend
project/backend/tests - Python tests
project/android/AppName - Android app
project/ios/AppName - iOS app

Ecco il .travis.yml, che esegue test in Python, Java e Objective-C:

matrix:
  include:
    - language: python
      python: 2.7
      before_script:
        - cd backend/tests
      script:
        - python -m unittest discover

    - language: android
      dist: trusty
      jdk: oraclejdk8
      android:
        components:
          - tools
          - android-25
          - build-tools-25.0.3
      before_script:
        - cd android/AppName
      script:
        - ./gradlew build connectedCheck

    - language: objective-c
      os: osx
      osx_image: xcode8.3
      before_script:
        - cd ios/AppName
      script:
        - xcodebuild -workspace AppName.xcworkspace -scheme AppName
          -destination 'platform=iOS Simulator,name=iPhone 7,OS=10.3' build test

notifications:
  email:
    - yourname@gmail.com

Sembra che tu possa costruire tutte le configurazioni che desideri usando questa funzione, trattando ogni voce nella matrice come una configurazione di primo livello. Ovviamente, se desideri impostare parametri che si applicano a tutte le lingue, puoi farlo al livello più alto, come faccio qui con la notifications:emailsezione.

Quando è tutto impostato, su ogni build ottieni qualcosa del genere. Boom.

inserisci qui la descrizione dell'immagine


2
Sembrava promettente, ma fallisce lo strumento travis lint: lint.travis-ci.org
meisteg

4
Non posso parlare con lo strumento lanugine, ma posso dire che sto usando una configurazione come questa da diversi mesi e ha funzionato perfettamente.
Codiak

Ho usato questa configurazione per python e nodejs. Invece di usare python: 3.5per impostare la versione, ho usato python:\n - "3.5"(notare che queste sono due righe separate) come consigliato nella pagina ufficiale di travis-ci. La compilazione non è riuscita perché travis cerca di recuperare python-["3.5"](notare [e "). Sai perché potrebbe essere? Il one-liner funziona.
CrazyFrog

3
c'è qualcosa di strano qui: l'OP ha chiesto di impostare più lingue NELLA STESSA BUILD, non di impostare più lingue, una per ogni build.
FuzzyAmi

2
@meisteg quando si utilizza lo strumento ufficiale travis lint, lo convalida correttamente . $ travis lint ~/Desktop/test.yml Hooray, /Users/nathanf/Desktop/test.yml looks valid :)
Nathan F.

23

In un ambiente di compilazione Travis Java, puoi utilizzare nvmper gestire i runtime di Node.js :

.travis.yml

language: java

jdk:
  - oraclejdk8

env:
  - NODE_VERSION="0.12"

before_install:
  - nvm install $NODE_VERSION

Se la tua versione di Node è molto recente, potresti dover aggiornare nvmanche tu .

Per aggiornare nvm, scrivi questo nel tuo .travis.yml:

before_install:
  - wget https://raw.githubusercontent.com/creationix/nvm/v0.31.0/nvm.sh -O ~/.nvm/nvm.sh
  - source ~/.nvm/nvm.sh
  - nvm install 5 # for Node v5
  - node --version

L'esempio sopra mostra come aggiornare prima a nvm v0.31, per poi ottenere Node v5.


Questa è la mia soluzione preferita.
Natim,

13

Il mio progetto ha un backend Python / Django e un frontend JS / Vue come di seguito:

├── backend
│   ├── api
│   │   ├── tests                               
├── daemon                                                          
│   ├── frontend
│   │   ├── test

L'idea è di eseguire ogni suite di test in un lavoro di matrice , una per i test Python / Django e l'altra per quelli JS:

matrix:
  include:
    - language: python
      python: 
        - 3.4
      before_install:
        - cd backend/
      install: 
        - pip install -r requirements.txt
      script:
        - python manage.py test

    - language: node_js
      node_js:
        - 4.8
      before_install:
        - cd daemon/frontend
      install:
        - yarn install
      script:
        - yarn test

notifications:
  email: false

Guarda anche


12

Ho usato questo .yml:

language: java
jdk:
    - oraclejdk8
node_js: "0.10"
install: "npm install"
script: "npm test"

10

Non puoi aggiungere più lingue, il che spiega il comportamento che stai vedendo e l' node_jsimpostazione verrà riconosciuta solo in un progetto di linguaggio del nodo. Quello che puoi fare è utilizzare l'incorporato nvmin TravisCI. Ad esempio, puoi includere - nvm install 0.10 - nvm use 0.10 nella tua before_installsezione il download dell'ultima versione v0.10.x di node.


2
ma sono riuscito a farlo con il file di configurazione con cui ho risposto da solo
Amr Draz
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.