如何使用Travis CI配置多种编程语言

105

我的项目同时使用了Node.js和Java。

我尝试先使用Node.js构建,然后安装Java(因为这是一个npm模块)。

但安装Java的脚本失败了,而且我认为既然已经有包含Java的构建版本,就没有必要再安装它。

我应该从Java构建开始,然后安装Node.js吗?

我正在尝试这样做。

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

似乎忽略了前两行,构建了一个带有Java 7的node_js构建版本,而我的项目使用Java 8。

我尝试了这个回答来处理Python依赖。

使用

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

但那并没有起作用

我怎样添加Java 8?


相关:https://dev59.com/6WMl5IYBdhLWcg3wXWAT - dmcc
6个回答

122

现在似乎可以使用 jobs:include 功能在一个 .travis.yml 文件中运行多种语言。例如,我的 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 的测试:

jobs:
  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部分一样。

设置完成后,在每次构建时,您会得到类似于这样的东西。Boom。

输入图像描述


2
这看起来很有前途,但它未通过travis lint工具的检查:http://lint.travis-ci.org - meisteg
4
我不知道您所说的“lint tool”,但我可以说我已经使用类似的设置几个月了,而且一直运行得非常好。 - Codiak
这应该是被接受的解决方案!它可以在我的一个代码库中无问题地运行(包括C++、C、Python、JS和Go)。 - Daniel Schütte
6
这里有些奇怪:OP询问的是如何在同一构建中设置多种语言,而不是为每个构建设置一个语言。 - FuzzyAmi
2
使用官方的travis lint工具进行验证时,@meisteg可以正常通过验证。 $ travis lint ~/Desktop/test.yml 太好了,/Users/nathanf/Desktop/test.yml看起来是有效的 :) - Nathan F.
显示剩余6条评论

28
在Travis Java构建环境中,你可以使用nvm来管理Node.js运行时:

.travis.yml


.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


1
那是我最喜欢的解决方案。 - 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设置仅在Node语言项目中被识别。您可以利用TravisCI中内置的nvm。例如,在before_install部分中包含以下内容:

- nvm install 0.10 - nvm use 0.10

以下载最新的 v0.10.x 版本的 Node。


3
但是我成功地使用自己回答的配置文件完成了它。 - Amr Draz

1
根据文档
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

这里有一个生产实例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接