2017-03-15 14 views
5

मैं एक परियोजना के लिए सीआई स्थापित करने की कोशिश कर रहा हूं जिस पर मैं काम कर रहा हूं, और मुझे आश्चर्य है कि हमें वास्तव में gradlew और/या gradle.bat फ़ाइलों को काम करने के लिए प्रतिबद्ध करने की आवश्यकता है।क्या ट्रेविस सीआई के लिए काम करना अनिवार्य है?

क्या इसके लिए कोई कामकाज है, या उन फ़ाइलों को करने का एकमात्र तरीका है?

+0

यह सलाह दी जाती है कि https://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:wrapper_generation – petey

+0

पता नहीं है कि यह एकमात्र तरीका है, लेकिन यह तरीका है कि मेरा खुद का रेपो सेट है अप। –

+0

एक दोस्त ने मुझे बताया कि यदि आप अपने सिस्टम और एक सिस्टम चर पर स्थापित है तो इसे चलाने के लिए संभव हो सकता है। लेकिन मुझे नहीं लगता कि यह विभिन्न ग्रेडल संस्करणों के साथ परियोजनाओं के लिए काम करेगा ... – Mauker

उत्तर

4

gradlew स्क्रिप्ट को ट्रेविस सीआई में एक ग्रैडल प्रोजेक्ट बनाने के लिए अनिवार्य नहीं है।

शायद सबसे अच्छा विकल्प एक ग्रेन रैपर स्थापित करने के लिए पूर्व-स्थापित ग्रेड का उपयोग करना है।

apply plugin: 'java' 

check.doFirst { 
    println "Running gradle v${project.gradle.gradleVersion}" 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '3.4.1' 
} 

आप मानक ट्रैविस वर्णनकर्ता के साथ इस बिल्ड फ़ाइल का उपयोग करते हैं, यह काम नहीं करेगा: यह कैसे एक सरल build.gradle लग रहा है की तरह है। यह आपके निर्माण को चलाने के लिए बस gradle का उपयोग करेगा। लेकिन अगर आप वर्णनकर्ता के आवरण कार्य जोड़ने अगर:

language: java 
jdk: 
    - oraclejdk8 
before_install: 
    gradle wrapper 

ट्रैविस सही ढंग से पहली आवरण काम चलेगा और उसके बाद पता लगा कि gradlew मौजूद है और अपने निर्माण को चलाने के लिए इसका इस्तेमाल करते हैं।

हालांकि इस दृष्टिकोण के पास एक नुकसान है जो आपके निर्माण को तोड़ सकता है। यदि आप ग्रैडल में कुछ विशेषताओं का उपयोग करते हैं जिन्हें पूर्व-स्थापित ग्रैडल संस्करण के बाद कार्यान्वित किया गया था, तो gradle wrapper चरण विफल हो जाएगा। ऐसी सुविधा का उदाहरण एस 3 मेवेन रिपोजिटरी है, जिसे मैं मानता हूं v2.4 में पेश किया गया था।

इसे रोकने के लिए, आप एक अलग निर्माण फाइल करने के लिए आवरण कार्य स्थानांतरित कर सकते हैं, मान लीजिए कि wrapper.gradle करते हैं:

task wrapper(type: Wrapper) { 
    gradleVersion = '3.4.1' 
} 

और करने के लिए .travis.yml फ़ाइल बदलने के लिए:

language: java 
jdk: 
    - oraclejdk8 
before_install: 
    gradle -b wrapper.gradle wrapper 

यह करना चाहिए। यह सेटअप आपकी मुख्य बिल्ड स्क्रिप्ट को बदले बिना रैपर इंस्टॉल करने के लिए पूर्व-स्थापित ग्राडल का उपयोग करता है।

आप example build here और this is the whole GitHub repository देख सकते हैं।


नोट: एक और तरीका है। आप डाउनलोड करने योग्य वितरण से आवश्यक ग्रैडल संस्करण स्थापित करने या शायद डेबियन पैकेज सिस्टम का उपयोग करने के लिए before_install चरण का उपयोग कर सकते हैं। हालांकि उसे sudo विशेषाधिकारों की आवश्यकता होगी। ऐसी वर्चुअल मशीनों को शुरू करने में लंबा समय लगता है (लगभग 30s?)।

एक और बात, मैंने gradlew स्क्रिप्ट को प्रतिबद्ध करते हुए एक अन्य उत्तर पर टिप्पणी में इसका उल्लेख किया है, आपको रैपर जार और गुणों की भी आवश्यकता है। जार एक बाइनरी फ़ाइल है और इसे संस्करण नियंत्रण में डालने को कभी-कभी विवादास्पद माना जाता है। तो यदि आप ऊपर वर्णित समाधान का उपयोग करते हैं, तो आप gradle फ़ोल्डर को भी छोड़ सकते हैं।

2

यह अनिवार्य नहीं है क्योंकि यह जावा और एंड्रॉइड प्रोजेक्ट्स के लिए पहले से ही pre-installed है।

हालांकि, यह जाने का अनुशंसित तरीका है क्योंकि स्थापित संस्करण उस तारीख पर निर्भर करता है जब वर्चुअल मशीन बनाई गई थी, शायद पुरानी हो गई थी।

आप इसे आजमा सकते हैं और versiongradle --version कमांड के साथ जांच सकते हैं।


अद्यतन # 1

मैं प्रदर्शन किया है कि मेरे जवाब सही है forking अपने MaterialSearchView:

Gradle संस्करण 2.2.1 पहले से ही पहले से स्थापित है, इसलिए Gradle आवरण, अनिवार्य नहीं है लेकिन यह जाने का अनुशंसा तरीका है क्योंकि आपके प्रोजेक्ट को संस्करण 2.14.1 की आवश्यकता है।

script: 
    - gradle clean build 

मैं यह भी दर्शाता हूं कि सही उत्तर सही गलत धारणा पर आधारित है। एक अनावश्यक फ़ाइल का उपयोग करने और बिल्ड को तोड़ने का प्रयास करें, यह फ़ाइल अनिवार्य नहीं है, केवल इसका उपयोग न करें और chmod लाइन को हटा दें।

enter image description here

आप जाँच कर सकते हैं प्रत्येक Gradle प्लगइन संस्करण के लिए here आवश्यक Gradle संस्करण अपने मामले प्लगइन संस्करण 2.2.3 में की जरूरत है Gradle 2.14.1+

+2

यह जोड़ना महत्वपूर्ण है कि सिफारिश केवल स्क्रिप्ट के बारे में नहीं है। 'जार' और 'गुण' भी प्रतिबद्ध होना चाहिए। बहुत से लोग संस्करण नियंत्रण में काफी बाइनरी फाइलें नहीं करना पसंद करते हैं (काफी समझदारी से)। – sm4

0

हाँ, इन फ़ाइलों की आवश्यकता है।

मैंने इसे थोड़ा परीक्षण और त्रुटि के साथ निर्धारित किया। मैंने उन्हें अपनी निजी परियोजनाओं में से एक शाखा से हटा दिया और उन्हें गिटहब तक पहुंचा दिया, और ट्रैविस निर्माण विफल रहा।

यदि आप उत्सुक हैं कि लॉग कैसा दिखता है, check this gist

chmod: cannot access `gradlew': No such file or directory 
The command "chmod +x gradlew" failed and exited with 1 during . 

माइनर संपादित करें:

आप तल के पास देख सकते हैं, इस में नाकाम रहने त्रुटि है मैं gradlew फ़ाइल नहीं लेकिन gradlew.bat फ़ाइल के साथ यह उपयोग करने की कोशिश। यह एक साधारण साफ/निर्माण के लिए काम करता था, लेकिन जब ट्रेविस ने एक एमुलेटर शुरू करने की कोशिश की, तो यह 10 मिनट से अधिक समय तक लटका।

टीएल; डीआर दोनों फाइलों का उपयोग करें।

+0

ऐसा लगता है, यदि आप अपने सीआई पर्यावरण पर पूर्ण नियंत्रण में हैं, लेकिन ट्रैविस सीआई के लिए यह अनिवार्य प्रतीत नहीं होता है, तो यह अनिवार्य नहीं हो सकता है। परीक्षण के लिए धन्यवाद! – Mauker

+0

कोई समस्या नहीं है। मैं अभी gradlew फ़ाइल के साथ परीक्षण कर रहा हूं लेकिन gradlew.bat के बिना और परिणाम के साथ जल्द ही मेरा जवाब संपादित कर दूंगा। – AdamMc331

+0

@ मॉकर कृपया मेरे अपडेट किए गए उत्तर को पढ़ें और भविष्य के पाठकों के लिए इसे ठीक करें। – albodelu

संबंधित मुद्दे