2013-07-28 9 views
6

मैंने एक विशिष्ट ग्रैडल कार्य बनाया है जिसे केवल जेनकींस बिल्ड सिस्टम में ही बुलाया जाना चाहिए। मुझे यह कार्य किसी अन्य व्यक्ति पर निर्भर करने की आवश्यकता है जिसे परियोजना के सफल संकलन के बाद मास्टर शाखा के सिर को टैग करना चाहिए।ग्रैडल के साथ गिट टैग को कैसे दबाएं/दबाएं?

मुझे नहीं पता कि मैं ग्रैडल का उपयोग करके रिमोट रिपोजिटरी में किसी विशिष्ट शाखा में टैग कैसे जोड़/पुश/जोड़ सकता हूं। इसे हासिल करने का सबसे आसान तरीका क्या है?

किसी भी मदद वास्तव में सराहना की है ...

+0

Exec का उपयोग कर? http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.Exec.html –

+1

[gradle-git प्लगइन] (https://github.com/ajoberstar/gradle-git) दिखता है अच्छा। –

+0

@ जेबीनिज़ेट हम, शायद ... मुझे उसमें देखना होगा। –

उत्तर

3

आप Exec उपयोग कर सकते हैं, जैसा कि ऊपर टिप्पणी में बताया या JGit का उपयोग टैग पुश करने के लिए। जावा में एक प्लगइन/कक्षा बनाएं और इसका उपयोग करें

+0

दोनों समाधान अच्छे हैं लेकिन मैं इसका उपयोग कर समाप्त हुआ ... एसएसएच को ग्रेडल-गिट प्लगइन के साथ काम नहीं कर सकता और यह सिर्फ कमांड लाइन को कॉल करने में काम करता है। इस पर बर्बाद करने के लिए और समय नहीं है और मुझे इसे काम करने की ज़रूरत है। –

13

यहां बताया गया है कि आप Gradle Git plugin के साथ अपने परिदृश्य को कैसे कार्यान्वित कर सकते हैं। कुंजीपटल प्लगइन के प्रदत्त Javadocs को देखना है।

private void createReleaseTag() { 
    def tagName = "release/${project.version}" 
    ("git tag $tagName").execute() 
    ("git push --tags").execute() 
} 

संपादित करें: एक और अधिक व्यापक संस्करण

private void createReleaseTag() { 
    def tagName = "release/${version}" 
    try { 
     runCommands("git", "tag", "-d", tagName) 
    } catch (Exception e) { 
     println(e.message) 
    } 
    runCommands("git", "status") 
    runCommands("git", "tag", tagName) 
} 

private String runCommands(String... commands) { 
    def process = new ProcessBuilder(commands).redirectErrorStream(true).start() 
    process.waitFor() 
    def result = '' 
    process.inputStream.eachLine { result += it + '\n' } 
    def errorResult = process.exitValue() == 0 
    if (!errorResult) { 
     throw new IllegalStateException(result) 
    } 
    return result 
} 

आप अपवाद संभाल कर सकते हैं

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'org.ajoberstar:gradle-git:0.6.1' 
    } 
} 

import org.ajoberstar.gradle.git.tasks.GitTag 
import org.ajoberstar.gradle.git.tasks.GitPush 

ext.yourTag = "REL-${project.version.toString()}" 

task createTag(type: GitTag) { 
    repoPath = rootDir 
    tagName = yourTag 
    message = "Application release ${project.version.toString()}" 
} 

task pushTag(type: GitPush, dependsOn: createTag) { 
    namesOrSpecs = [yourTag] 
} 
+0

ऐसा लगता है कि यह जाने का तरीका है और यह एक बिंदु पर काम कर रहा है ... मैं प्रमाणीकरण और सर्वर को धक्का नहीं लग रहा हूं। मुझे पासवर्ड (कोई उपयोगकर्ता नाम नहीं) के लिए कहा जाता है, इसलिए मैं अपने एसएसएच कुंजी के लिए पासफ्रेज का उपयोग करने की कोशिश करता हूं लेकिन यह काम नहीं कर रहा है। एसएसएच प्रमाणीकरण काम करने में कोई मदद? –

+0

क्या आप गिटहब का उपयोग कर रहे हैं? यदि हां, तो क्या आपने पृष्ठ पर अपने खाते के साथ अपनी एसएसएच कुंजी पंजीकृत की है? मैं [गिटहब के एफएक्यू अनुभाग] (https://help.github.com/categories/56/articles) के साथ जांच करूंगा। अगर इससे मदद नहीं मिलती है तो मैं प्लगइन लेखक को त्वरित ईमेल भेजूंगा। वह बहुत उपयोगी और उत्तरदायी है। –

+0

नहीं, इसके लिए गिटहब का उपयोग नहीं कर रहे हैं? यह गिटलैब की आंतरिक स्थापना है। मेरी एसएसएच कुंजी मेरे गिट क्लाइंट के साथ काम कर रही है, केवल इस प्लगइन के साथ नहीं है। –

2

मैं इस प्यार करता हूँ।

+0

जब टैग पहले से मौजूद है या धक्का नहीं दिया जा सकता है तो आप त्रुटि को कैसे संभालेंगे? – kemuri

+0

@ केमुरी मैंने अपनी प्रतिक्रिया में संशोधन किया। अब आप अपवादों को संभाल सकते हैं। –

+0

कमाल, मैं इसे आज़मा दूंगा – kemuri

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