【问题标题】:How to set up Travis CI with multiple languages如何使用多种语言设置 Travis CI
【发布时间】:2015-02-23 00:36:36
【问题描述】:

我的项目同时使用 nodejs 和 java

我尝试从 node_js 构建开始,然后安装 java(因为这是一个 npm 模块)

但是安装 java 的脚本失败了,而且我认为当已经存在 java 构建时不需要安装它。

我应该从 java 构建开始然后安装节点吗?

我正在尝试这个

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

它忽略了前两行,并构建了一个具有 java 7 的 node_js 构建 我的项目使用 java 8

我为 python 尝试了这个answer

使用

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

但这没有用

如何添加 java 8?

【问题讨论】:

标签: travis-ci


【解决方案1】:

现在似乎可以使用jobs:include 功能在一个 .travis.yml 文件中运行多种语言。举个例子,我的 Github repo 安排如下:

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 部分所做的那样。

设置完成后,在每次构建时,您都会得到类似的结果。轰隆隆。

【讨论】:

  • 这看起来很有希望,但它无法使用 travis lint 工具:lint.travis-ci.org
  • 我无法使用 lint 工具,但我可以说我已经使用这样的设置好几个月了,而且效果很好。
  • 我将此设置用于 python 和 nodejs。我没有使用python: 3.5 来设置版本,而是使用了 travis-ci 官方页面中推荐的python:\n - "3.5"(注意这是两行单独的行)。构建失败,因为 travis 尝试检索 python-["3.5"](注意 [")。你知道为什么会这样吗?单线工作。
  • 这里有些奇怪:OP 询问的是在同一个版本中设置多种语言,而不是设置多种语言,每个版本一种。
  • @meisteg 在使用 the official travis lint tool 时可以很好地验证它。 $ travis lint ~/Desktop/test.yml Hooray, /Users/nathanf/Desktop/test.yml looks valid :)
【解决方案2】:

在 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

【讨论】:

  • 这是我最喜欢的解决方案。
【解决方案3】:

我用过这个.yml

language: java
jdk:
    - oraclejdk8
node_js: "0.10"
install: "npm install"
script: "npm test"

【讨论】:

    【解决方案4】:

    我的项目有一个 Python/Django 后端和一个 JS/Vue 前端,如下所示:

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

    这个想法是在matrix' job 中运行每个测试套件,一个用于 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
    

    另见

    【讨论】:

      【解决方案5】:

      您不能添加多种语言,这解释了您所看到的行为,node_js 设置只会在节点语言项目中被识别。你可以做的是利用 TravisCI 中合并的nvm。 例如,您可以包括 - nvm install 0.10 - nvm use 0.10 before_install 部分下载最新的 v0.10.x 版本的节点。

      【讨论】:

      • 但我确实设法使用我自己回答的配置文件来做到这一点
      【解决方案6】:

      根据documentation

      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
      

      Here 是一个生产示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多