Cara mengatur Travis CI dengan beberapa bahasa

98

Proyek saya menggunakan nodejs dan java

Saya mencoba memulai dengan membangun node_js kemudian menginstal java (karena ini adalah modul npm)

tetapi skrip untuk menginstal java gagal, ditambah lagi saya rasa tidak perlu menginstalnya jika sudah ada build dengan java yang sudah ada.

haruskah saya memulai dengan membangun java lalu menginstal node?

Saya mencoba ini

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

yang mengabaikan 2 baris pertama dan membangun node_js yang memiliki java 7 dan proyek saya menggunakan java 8

Saya mencoba jawaban ini untuk python

menggunakan

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

tapi itu tidak berhasil

Bagaimana cara menambahkan java 8?

Amr Draz
sumber

Jawaban:

116

Tampaknya sekarang dimungkinkan untuk menjalankan beberapa bahasa dalam satu file .travis.yml menggunakan matrix:includefitur tersebut. Sebagai contoh, repo Github saya diatur sebagai berikut:

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

Berikut ini .travis.yml, yang menjalankan pengujian dengan Python, Java, dan 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]

Tampaknya Anda dapat membuat konfigurasi berbeda sebanyak yang Anda suka menggunakan fitur ini, dengan memperlakukan setiap entri dalam matriks sebagai konfigurasi tingkat atas. Tentu saja, jika Anda memiliki parameter yang ingin Anda setel yang berlaku untuk semua bahasa, Anda dapat melakukannya di tingkat atas, seperti yang saya lakukan di sini dengan notifications:emailbagian.

Ketika semuanya sudah diatur, maka pada setiap build, Anda mendapatkan sesuatu seperti ini. Ledakan.

masukkan deskripsi gambar di sini

Codiak
sumber
2
Ini tampak menjanjikan, tetapi gagal alat lint travis: lint.travis-ci.org
meisteg
4
Saya tidak dapat berbicara dengan alat lint, tetapi saya dapat mengatakan bahwa saya telah menggunakan penyiapan seperti ini selama beberapa bulan sekarang, dan ini telah bekerja dengan sempurna.
Codiak
Saya menggunakan pengaturan ini untuk python dan nodejs. Alih-alih menggunakan python: 3.5untuk mengatur versi, saya menggunakan python:\n - "3.5"(perhatikan ini adalah dua baris terpisah) seperti yang direkomendasikan di halaman resmi travis-ci. Build gagal karena travis mencoba mengambil python-["3.5"](perhatikan [dan "). Tahukah Anda mengapa hal itu bisa terjadi? Pekerjaan satu baris.
CrazyFrog
3
ada yang aneh di sini: OP bertanya tentang menyetel beberapa bahasa DALAM BANGUNAN YANG SAMA, bukan tentang menyiapkan banyak bahasa, satu untuk setiap versi.
FuzzyAmi
2
@meisteg saat menggunakan alat lint travis resmi, ini memvalidasinya dengan baik. $ travis lint ~/Desktop/test.yml Hooray, /Users/nathanf/Desktop/test.yml looks valid :)
Nathan F.
23

Di lingkungan build Travis Java, Anda dapat menggunakan nvmuntuk mengelola runtime Node.js :

.travis.yml

language: java

jdk:
  - oraclejdk8

env:
  - NODE_VERSION="0.12"

before_install:
  - nvm install $NODE_VERSION

Jika versi Node Anda sangat baru, Anda mungkin harus memperbarui nvmjuga.

Untuk memperbarui nvm, tulis ini di .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

Contoh di atas menunjukkan cara memperbarui ke nvm v0.31, untuk kemudian mendapatkan Node v5.

Benny Neugebauer
sumber
Itu solusi favorit saya.
Natim
13

Proyek saya memiliki backend Python / Django dan frontend JS / Vue seperti di bawah ini:

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

Idenya adalah untuk menjalankan setiap rangkaian pengujian dalam pekerjaan matriks , satu untuk pengujian Python / Django dan yang lainnya untuk yang 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

Lihat juga

Édouard Lopez
sumber
12

Saya menggunakan ini .yml:

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

Anda tidak dapat menambahkan beberapa bahasa, yang menjelaskan perilaku yang Anda lihat, dan node_jspengaturan tersebut hanya akan dikenali dalam proyek bahasa node. Apa yang dapat Anda lakukan adalah memanfaatkan yang tergabung nvmdalam TravisCI. Misalnya, Anda dapat menyertakan - nvm install 0.10 - nvm use 0.10 di before_installbagian Anda untuk mendownload rilis node v0.10.x terbaru.

kevincolten.dll
sumber
2
tetapi saya berhasil melakukannya dengan file konfigurasi yang saya jawab sendiri
Amr Draz
0

Sesuai dokumentasi ,

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

Berikut adalah contoh produksinya.

Alexandre Campos
sumber