Comment configurer Travis CI avec plusieurs langues

98

Mon projet utilise à la fois nodejs et java

J'ai essayé de commencer avec une construction node_js puis d'installer java (puisqu'il s'agit d'un module npm)

mais les scripts pour installer java ont échoué, en plus je ne pense pas qu'il soit nécessaire de l'installer quand il y a une compilation avec java qui existe déjà.

devrais-je commencer avec une construction java puis installer un nœud?

J'essaye ça

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

qui ignore les 2 premières lignes il semble et construit un build node_js qui a java 7 et mon projet utilise java 8

J'ai essayé cette réponse pour python

en utilisant

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

mais cela n'a pas fonctionné

Comment puis-je ajouter Java 8?

Amr Draz
la source

Réponses:

116

Il semble maintenant possible d'exécuter plusieurs langues dans un seul fichier .travis.yml en utilisant cette matrix:includefonctionnalité. À titre d'exemple, mon dépôt Github est organisé comme suit:

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

Voici le .travis.yml, qui exécute des tests en Python, Java et 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:
    - [email protected]

Il semble que vous puissiez créer autant de configurations différentes que vous le souhaitez en utilisant cette fonctionnalité, en traitant chaque entrée de la matrice comme une configuration de niveau supérieur. Bien sûr, si vous avez des paramètres que vous souhaitez définir et qui s'appliquent à toutes les langues, vous pouvez le faire au niveau supérieur, comme je le fais ici avec la notifications:emailsection.

Quand tout est configuré, puis sur chaque build, vous obtenez quelque chose comme ça. Boom.

entrez la description de l'image ici

Codiak
la source
2
Cela semblait prometteur, mais cela échoue à l'outil Travis Lint
meisteg
4
Je ne peux pas parler de l'outil de charpie, mais je peux dire que j'utilise une configuration comme celle-ci depuis plusieurs mois maintenant, et cela a parfaitement fonctionné.
Codiak
J'ai utilisé cette configuration pour python et nodejs. Au lieu d'utiliser python: 3.5pour définir la version, j'ai utilisé python:\n - "3.5"(notez que ce sont deux lignes distinctes) comme recommandé sur la page officielle de travis-ci. La construction échoue car travis tente de récupérer python-["3.5"](notez le [et "). Savez-vous pourquoi cela pourrait être? Le one-liner fonctionne.
CrazyFrog
3
il y a quelque chose d'étrange ici: l'OP a posé la question de définir plusieurs langues DANS LE MÊME BUILD, pas de configurer plusieurs langues, une pour chaque build.
FuzzyAmi
2
@meisteg lors de l'utilisation de l'outil officiel travis lint, il le valide correctement . $ travis lint ~/Desktop/test.yml Hooray, /Users/nathanf/Desktop/test.yml looks valid :)
Nathan F.
23

Dans un environnement de génération Travis Java, vous pouvez utiliser nvmpour gérer les environnements d' exécution Node.js :

.travis.yml

language: java

jdk:
  - oraclejdk8

env:
  - NODE_VERSION="0.12"

before_install:
  - nvm install $NODE_VERSION

Si votre version de Node est très récente, vous devrez peut-être nvmégalement mettre à jour .

Pour mettre à jour nvm, écrivez ceci dans votre .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'exemple ci-dessus montre comment d'abord mettre à jour nvm v0.31, puis obtenir Node v5.

Benny Neugebauer
la source
C'est ma solution préférée.
Natim
13

Mon projet a un backend Python / Django et un frontend JS / Vue comme ci-dessous:

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

L'idée est d'exécuter chaque suite de tests dans un job de matrice , un pour les tests Python / Django et l'autre pour les tests 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

Voir également

Édouard Lopez
la source
12

J'ai utilisé ceci .yml:

language: java
jdk:
    - oraclejdk8
node_js: "0.10"
install: "npm install"
script: "npm test"
Amr Draz
la source
10

Vous ne pouvez pas ajouter plusieurs langues, ce qui explique le comportement que vous voyez, et le node_jsparamètre ne sera reconnu que dans un projet de langage de nœud. Ce que vous pouvez faire, c'est utiliser l'incorporé nvmdans TravisCI. Par exemple, vous pouvez inclure - nvm install 0.10 - nvm use 0.10 dans votre before_installsection pour télécharger la dernière version v0.10.x de node.

kevincolten
la source
2
mais j'ai réussi à le faire avec le fichier de configuration avec
lequel