Jak skonfigurować Travis CI z wieloma językami

98

Mój projekt wykorzystuje nodejs i java

Próbowałem zacząć od kompilacji node_js, a następnie zainstalować java (ponieważ jest to moduł npm)

ale skrypty do instalacji javy nie powiodły się, a ponadto nie sądzę, aby trzeba było je instalować, gdy istnieje już kompilacja z java.

powinienem zacząć od kompilacji java, a następnie zainstalować węzeł?

Próbuję tego

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

który ignoruje pierwsze 2 wiersze i tworzy kompilację node_js, która ma java 7, a mój projekt używa java 8

Wypróbowałem tę odpowiedź dla Pythona

za pomocą

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

ale to nie zadziałało

Jak mogę dodać java 8?

Amr Draz
źródło

Odpowiedzi:

116

Wydaje się, że teraz można uruchomić kilka języków w jednym pliku .travis.yml przy użyciu tej matrix:includefunkcji. Na przykład moje repozytorium Github jest ułożone w następujący sposób:

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

Oto plik .travis.yml, który uruchamia testy w językach Python, Java i 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]

Wygląda na to, że możesz zbudować tyle różnych konfiguracji, ile chcesz, używając tej funkcji, traktując każdy wpis w macierzy jako konfigurację najwyższego poziomu. Oczywiście, jeśli masz jakieś parametry, które chcesz ustawić, a które dotyczą wszystkich języków, możesz to zrobić na najwyższym poziomie, tak jak robię to tutaj w notifications:emailsekcji.

Kiedy wszystko jest skonfigurowane, przy każdej kompilacji otrzymujesz coś takiego. Bum.

wprowadź opis obrazu tutaj

Codiak
źródło
2
Wyglądało to obiecująco, ale nie działa narzędzie Travis Lint
meisteg
4
Nie mogę rozmawiać z narzędziem do kłaczków, ale mogę powiedzieć, że używam takiej konfiguracji od kilku miesięcy i działa idealnie.
Codiak
Użyłem tej konfiguracji dla Pythona i nodejs. Zamiast używać python: 3.5do ustawiania wersji, użyłem python:\n - "3.5"(zauważ, że są to dwie osobne linie) zgodnie z zaleceniami na oficjalnej stronie Travis-ci. Kompilacja nie powiodła się, ponieważ Travis próbuje odzyskać python-["3.5"](zwróć uwagę na [i "). Czy wiesz, dlaczego tak może być? Jedna linijka działa.
CrazyFrog
3
jest tu coś dziwnego: OP zapytał o ustawienie wielu języków W TYM SAMYM BUDOWIE, a nie o ustawienie wielu języków, po jednym dla każdej kompilacji.
FuzzyAmi
2
@meisteg podczas korzystania z oficjalnego narzędzia Travis Lint sprawdza poprawność. $ travis lint ~/Desktop/test.yml Hooray, /Users/nathanf/Desktop/test.yml looks valid :)
Nathan F.
23

W środowisku konstrukcyjnym Travis Java możesz nvmzarządzać środowiskami wykonawczymi Node.js :

.travis.yml

language: java

jdk:
  - oraclejdk8

env:
  - NODE_VERSION="0.12"

before_install:
  - nvm install $NODE_VERSION

Jeśli twoja wersja Node jest bardzo nowa, być może będziesz musiał ją zaktualizować nvm.

Aby zaktualizować nvm, napisz to w swoim .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

Powyższy przykład pokazuje, jak najpierw zaktualizować do nvm v0.31, a następnie uzyskać Node v5.

Benny Neugebauer
źródło
To moje ulubione rozwiązanie.
Natim
13

Użyłem tego .yml:

language: java
jdk:
    - oraclejdk8
node_js: "0.10"
install: "npm install"
script: "npm test"
Amr Draz
źródło
13

Mój projekt ma zaplecze Python / Django i nakładkę JS / Vue, jak poniżej:

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

Chodzi o to, aby uruchomić każdy zestaw testów w zadaniu macierzy , jeden dla testów Python / Django, a drugi dla testów 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

Zobacz też

Édouard Lopez
źródło
10

Nie możesz dodać wielu języków, co wyjaśnia zachowanie, które widzisz, a node_jsustawienie zostanie rozpoznane tylko w projekcie języka node. Możesz skorzystać z tego, co jest częścią nvmTravisCI. Na przykład możesz dołączyć - nvm install 0.10 - nvm use 0.10 do swojej before_installsekcji, aby pobrać najnowszą wersję v0.10.x węzła.

kevincolten
źródło
3
ale udało mi się to zrobić z plikiem konfiguracyjnym, z którego sam odpowiedziałem
Amr Draz
0

Zgodnie z dokumentacją ,

jobs:
  include:
    - language: python
      python: 3.8
      script:
      - python -c "print('Hi from Python!')"

    - language: node_js
      node_js: 12
      script:
      - node -e "console.log('Hi from NodeJS!')"

    - language: java
      jdk: openjdk8
      script:
      - javac -help

Oto przykład produkcji.

Alexandre Campos
źródło