Как настроить Travis CI с несколькими языками

99

В моем проекте используются как nodejs, так и java

Я попробовал начать с сборки node_js, а затем установил java (поскольку это модуль npm)

но скрипты для установки java не удались, плюс я не думаю, что есть необходимость устанавливать его, когда уже существует сборка с java.

я должен начать с сборки java, а затем установить узел?

Я пробую это

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

который игнорирует первые 2 строки, кажется, и создает сборку node_js с java 7, а мой проект использует java 8

Я пробовал этот ответ для питона

с помощью

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

но это не сработало

Как добавить Java 8?

Амр Драз
источник
Связанный: stackoverflow.com/questions/18456611/…
dmcc

Ответы:

116

Кажется, теперь можно запускать несколько языков в одном файле .travis.yml, используя эту matrix:includeфункцию. Например, мое репо на Github устроено следующим образом:

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

Вот .travis.yml, запускающий тесты на Python, Java и 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

Похоже, вы можете создать столько разных конфигураций, сколько захотите, используя эту функцию, рассматривая каждую запись в матрице как конфигурацию верхнего уровня. Конечно, если у вас есть какие-либо параметры, которые вы хотите установить, применимые ко всем языкам, вы можете сделать это на верхнем уровне, как я сделал здесь с notifications:emailразделом.

Когда все настроено, то при каждой сборке вы получаете что-то вроде этого. Бум.

введите описание изображения здесь

Codiak
источник
2
Это выглядело многообещающе, но инструмент travis lint не работает: lint.travis-ci.org
meisteg
4
Я не могу говорить с инструментом lint, но могу сказать, что использую такую ​​установку уже несколько месяцев, и она отлично работает.
Codiak 07
Я использовал эту настройку для python и nodejs. Вместо использования python: 3.5для установки версии я использовал python:\n - "3.5"(обратите внимание, что это две отдельные строки), как рекомендовано на официальной странице travis-ci. Сборка не удалась, потому что Трэвис пытается получить python-["3.5"](обратите внимание на [и "). Вы знаете, почему это могло быть? Однострочный работает.
CrazyFrog
3
здесь что-то странное: OP попросил установить несколько языков В ОДНОЙ СТРОКЕ, а не настроить несколько языков, по одному для каждой сборки.
FuzzyAmi
2
@meisteg при использовании официального инструмента travis lint проверяет его нормально. $ travis lint ~/Desktop/test.yml Hooray, /Users/nathanf/Desktop/test.yml looks valid :)
Натан Ф.
23

В среде сборки Travis Java вы можете использовать nvmдля управления средами выполнения Node.js :

.travis.yml

language: java

jdk:
  - oraclejdk8

env:
  - NODE_VERSION="0.12"

before_install:
  - nvm install $NODE_VERSION

Если у вас очень последняя версия Node, возможно, вам также придется обновить nvm.

Чтобы обновить nvm, напишите это в своем .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

В приведенном выше примере показано, как сначала выполнить обновление до nvm v0.31, а затем получить Node v5.

Бенни Нойгебауэр
источник
Это мое любимое решение.
Natim
13

Я использовал это .yml:

language: java
jdk:
    - oraclejdk8
node_js: "0.10"
install: "npm install"
script: "npm test"
Амр Драз
источник
13

В моем проекте есть бэкэнд Python / Django и интерфейс JS / Vue, как показано ниже:

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

Идея состоит в том, чтобы запустить каждый набор тестов в матричном задании , одно для тестов Python / Django, а другое - для тестов 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

Смотрите также

Эдуард Лопес
источник
10

Вы не можете добавить несколько языков, что объясняет наблюдаемое поведение, и этот node_jsпараметр будет распознаваться только в проекте языка узлов. Что вы можете сделать, так это использовать встроенное nvmв TravisCI. Например, вы можете включить - nvm install 0.10 - nvm use 0.10 в свой before_installраздел, чтобы загрузить последнюю версию v0.10.x узла.

Кевинколтен
источник
3
но мне удалось сделать это с помощью файла конфигурации, которым я сам ответил
Амр Драз
0

Согласно документации ,

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

Вот производственный пример.

Александр Кампос
источник