Como configurar o Travis CI com vários idiomas

98

Meu projeto usa nodejs e java

Tentei começar com um build node_js e depois instalar o java (já que este é um módulo npm)

mas os scripts para instalar o java falharam, além disso, não acho que haja necessidade de instalá-lo quando há uma compilação com o java que já existe.

devo começar com uma compilação java e depois instalar o nó?

Estou tentando isso

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

que ignora as 2 primeiras linhas que parecem e constrói uma construção node_js que tem java 7 e meu projeto usa java 8

Eu tentei esta resposta para python

usando

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

mas isso não funcionou

Como posso adicionar java 8?

Amr Draz
fonte

Respostas:

116

Parece que agora é possível executar vários idiomas em um arquivo .travis.yml usando o matrix:includerecurso. Por exemplo, meu repositório Github é organizado da seguinte maneira:

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

Aqui está o .travis.yml, que executa testes em Python, Java e 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 você pode construir quantas configurações diferentes quiser usando este recurso, tratando cada entrada na matriz como uma configuração de nível superior. Claro, se você tiver quaisquer parâmetros que deseja definir que se apliquem a todos os idiomas, você pode fazer isso no nível superior, como faço aqui com onotifications:email seção.

Quando tudo estiver configurado, em cada construção, você obterá algo assim. Estrondo.

insira a descrição da imagem aqui

Codiak
fonte
2
Isso parecia promissor, mas falha na ferramenta travis lint: lint.travis-ci.org
meisteg
4
Não posso falar com a ferramenta lint, mas posso dizer que estou usando uma configuração como essa há vários meses e tem funcionado perfeitamente.
Codiak
Usei essa configuração para python e nodejs. Em vez de usar python: 3.5para definir a versão, usei python:\n - "3.5"(observe que são duas linhas separadas) como recomendado na página oficial do travis-ci. A construção falhou porque travis tenta recuperar python-["3.5"](observe o [e "). Você sabe por que isso pode ser? O one-liner funciona.
CrazyFrog
3
há algo estranho aqui: o OP perguntou sobre a configuração de vários idiomas NO MESMO BUILD, não sobre a configuração de vários idiomas, um para cada construção.
FuzzyAmi
2
@meisteg ao usar a ferramenta travis lint oficial, ela valida bem. $ travis lint ~/Desktop/test.yml Hooray, /Users/nathanf/Desktop/test.yml looks valid :)
Nathan F.
23

Em um ambiente de construção Travis Java, você pode usar nvmpara gerenciar Node.js tempos de execução do

.travis.yml

language: java

jdk:
  - oraclejdk8

env:
  - NODE_VERSION="0.12"

before_install:
  - nvm install $NODE_VERSION

Se a sua versão do Node for muito recente, pode ser necessário atualizar nvm também.

Para atualizar nvm, escreva isto em .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

O exemplo acima mostra como primeiro atualizar para nvm v0.31, para então obter Node v5.

Benny Neugebauer
fonte
Essa é minha solução favorita.
Natim de
13

Meu projeto tem um back-end Python / Django e um front-end JS / Vue como abaixo:

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

A ideia é executar cada suíte de teste em um trabalho de matriz , um para Python / Django e outro para 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

Veja também

Édouard Lopez
fonte
12

Eu usei este .yml:

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

Você não pode adicionar vários idiomas, o que explica o comportamento que você está vendo, e a node_jsconfiguração só será reconhecida em um projeto de linguagem de nó. O que você pode fazer é utilizar o incorporado nvmno TravisCI. Por exemplo, você pode incluir - nvm install 0.10 - nvm use 0.10 em sua before_installseção o download da versão v0.10.x mais recente do node.

Kevincolten
fonte
2
mas consegui fazê-lo com o arquivo de configuração com o qual respondi
Amr Draz