Cómo configurar Travis CI con varios idiomas

98

Mi proyecto usa nodejs y java

Intenté comenzar con una compilación de node_js y luego instalar java (ya que este es un módulo npm)

pero los scripts para instalar java fallaron, además no creo que sea necesario instalarlo cuando hay una compilación con java que ya existe.

¿Debería comenzar con una compilación de Java y luego instalar el nodo?

Estoy intentando esto

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

que ignora las primeras 2 líneas que parece y crea una compilación de node_js que tiene java 7 y mi proyecto usa java 8

Probé esta respuesta para Python

utilizando

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

pero eso no funcionó

¿Cómo puedo agregar java 8?

Amr Draz
fuente

Respuestas:

116

Parece que ahora es posible ejecutar varios idiomas en un archivo .travis.yml usando la matrix:includefunción. Como ejemplo, mi repositorio de Github está organizado de la siguiente manera:

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

Aquí está el .travis.yml, que ejecuta pruebas en Python, Java y 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]

Parece que puede crear tantas configuraciones diferentes como desee utilizando esta función, tratando cada entrada en la matriz como una configuración de nivel superior. Por supuesto, si tiene algún parámetro que desee establecer que se aplique a todos los idiomas, puede hacerlo en el nivel superior, como lo hago aquí con la notifications:emailsección.

Cuando todo está configurado, en cada compilación, obtienes algo como esto. Auge.

ingrese la descripción de la imagen aquí

Codiak
fuente
2
Esto parecía prometedor, pero falla la herramienta de travis lint: lint.travis-ci.org
meisteg
4
No puedo hablar con la herramienta de pelusa, pero puedo decir que he estado usando una configuración como esta durante varios meses y ha funcionado perfectamente.
Codiak
Usé esta configuración para python y nodejs. En lugar de usar python: 3.5para configurar la versión, usé python:\n - "3.5"(observe que estas son dos líneas separadas) como se recomienda en la página oficial de travis-ci. La compilación falla porque travis intenta recuperar python-["3.5"](observe el [y "). ¿Sabes por qué podría ser eso? El one-liner funciona.
CrazyFrog
3
hay algo extraño aquí: el OP preguntó sobre la configuración de varios idiomas EN LA MISMA CONSTRUCCIÓN, no sobre la configuración de varios idiomas, uno para cada compilación.
FuzzyAmi
2
@meisteg cuando usa la herramienta oficial de travis lint , la valida bien. $ travis lint ~/Desktop/test.yml Hooray, /Users/nathanf/Desktop/test.yml looks valid :)
Nathan F.
23

En un entorno de compilación Travis Java, puede usar nvmpara administrar los tiempos de ejecución de Node.js :

.travis.yml

language: java

jdk:
  - oraclejdk8

env:
  - NODE_VERSION="0.12"

before_install:
  - nvm install $NODE_VERSION

Si su versión de Node es muy reciente, es posible que nvmtambién deba actualizar .

Para actualizar nvm, escriba esto en su .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

El ejemplo anterior muestra cómo actualizar primero a nvm v0.31y luego obtener Node v5.

Benny Neugebauer
fuente
Esa es mi solución favorita.
Natim
13

Mi proyecto tiene un backend Python / Django y un frontend JS / Vue como se muestra a continuación:

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

La idea es ejecutar cada suite de pruebas en un trabajo de matriz , una para las pruebas de Python / Django y la otra para las de 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

Ver también

Édouard López
fuente
12

Usé esto .yml:

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

No puede agregar varios idiomas, lo que explica el comportamiento que está viendo, y la node_jsconfiguración solo se reconocerá en un proyecto de idioma de nodo. Lo que puede hacer es utilizar el incorporado nvmen TravisCI. Por ejemplo, puede incluir - nvm install 0.10 - nvm use 0.10 en su before_installsección para descargar la última versión v0.10.x de node.

kevincolten
fuente
2
pero logré hacerlo con el archivo de configuración con el que respondí yo mismo
Amr Draz