So richten Sie Travis CI in mehreren Sprachen ein

98

Mein Projekt verwendet sowohl NodeJS als auch Java

Ich habe versucht, mit einem Build von node_js zu beginnen und dann Java zu installieren (da dies ein npm-Modul ist).

Aber die Skripte zur Installation von Java sind fehlgeschlagen. Außerdem muss es nicht installiert werden, wenn bereits ein Build mit Java vorhanden ist.

Soll ich mit einem Java-Build beginnen und dann den Knoten installieren?

Ich versuche das

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

Dies ignoriert anscheinend die ersten beiden Zeilen und erstellt einen node_js-Build mit Java 7, und mein Projekt verwendet Java 8

Ich habe diese Antwort für Python versucht

mit

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

aber das hat nicht funktioniert

Wie kann ich Java 8 hinzufügen?

Amr Draz
quelle
Siehe auch
dmcc

Antworten:

115

Mit dieser Funktion scheint es jetzt möglich zu sein, mehrere Sprachen in einer .travis.yml-Datei auszuführen matrix:include. Als Beispiel ist mein Github-Repo wie folgt angeordnet:

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

Hier ist die .travis.yml, die Tests in Python, Java und Objective-C ausführt:

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]

Es scheint, dass Sie mit dieser Funktion so viele verschiedene Konfigurationen erstellen können, wie Sie möchten, indem Sie jeden Eintrag in der Matrix als Konfiguration der obersten Ebene behandeln. Wenn Sie Parameter festlegen möchten, die für alle Sprachen gelten, können Sie dies natürlich auf der obersten Ebene tun, wie ich es hier mit dem notifications:emailAbschnitt tue .

Wenn alles eingerichtet ist, erhalten Sie bei jedem Build so etwas. Boom.

Geben Sie hier die Bildbeschreibung ein

Codiak
quelle
2
Dies sah vielversprechend aus, aber es schlägt das Travis Lint Tool fehl: lint.travis-ci.org
meisteg
4
Ich kann nicht mit dem Flusenwerkzeug sprechen, aber ich kann sagen, dass ich seit einigen Monaten ein solches Setup verwende und es perfekt funktioniert hat.
Codiak
Ich habe dieses Setup für Python und NodeJS verwendet. Anstatt python: 3.5die Version python:\n - "3.5"festzulegen , habe ich sie verwendet (beachten Sie, dass dies zwei separate Zeilen sind), wie auf der offiziellen Seite von travis-ci empfohlen. Der Build ist fehlgeschlagen, da Travis versucht, ihn abzurufen python-["3.5"](beachten Sie das [und "). Weißt du warum das sein könnte? Der Einzeiler funktioniert.
CrazyFrog
3
Hier gibt es etwas Seltsames: Das OP fragte nach dem Einrichten mehrerer Sprachen im selben Gebäude, nicht nach dem Einrichten mehrerer Sprachen, eine für jeden Build.
FuzzyAmi
2
@meisteg Wenn Sie das offizielle Travis Lint Tool verwenden, wird es einwandfrei validiert. $ travis lint ~/Desktop/test.yml Hooray, /Users/nathanf/Desktop/test.yml looks valid :)
Nathan F.
23

Auf einer Build - Umgebung Travis Java, können Sie nvmverwalten Node.js Runtimes:

.travis.yml

language: java

jdk:
  - oraclejdk8

env:
  - NODE_VERSION="0.12"

before_install:
  - nvm install $NODE_VERSION

Wenn Ihre Knotenversion sehr aktuell ist, müssen Sie möglicherweise auch aktualisieren nvm.

Um dies zu aktualisieren nvm, schreiben Sie Folgendes in .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

Das obige Beispiel zeigt, wie zuerst aktualisiert nvm v0.31und dann abgerufen wird Node v5.

Benny Neugebauer
quelle
Das ist meine Lieblingslösung.
Natim
13

Mein Projekt hat ein Python / Django-Backend und ein JS / Vue-Frontend wie folgt:

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

Die Idee ist, jede Testsuite in einem Matrixjob auszuführen , einen für Python / Django-Tests und einen für JS-Tests:

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

Siehe auch

Édouard Lopez
quelle
12

Ich habe das benutzt .yml:

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

Sie können nicht mehrere Sprachen hinzufügen, was das angezeigte Verhalten erklärt. Die node_jsEinstellung wird nur in einem Knotensprachenprojekt erkannt. Was Sie tun können, ist die nvmin TravisCI integrierte. Sie können beispielsweise - nvm install 0.10 - nvm use 0.10 in Ihren before_installAbschnitt aufnehmen, um die neueste Version v0.10.x des Knotens herunterzuladen.

kevincolten
quelle
2
aber ich habe es geschafft mit der Konfigurationsdatei, mit der ich selbst geantwortet habe
Amr Draz