2013-07-28 24 views
6

Utworzono konkretne zadanie Gradle, które powinno być wywoływane tylko w systemie kompilacji Jenkins. Muszę uczynić to zadanie zależnym od innego, które powinno oznaczać HEAD oddziału głównego po udanej kompilacji projektu.Jak zatwierdzić/wypchnąć tag Git za pomocą Gradle?

Nie mam pojęcia, jak mogę zatwierdzić/wypchnąć/dodać znaczniki do określonego oddziału w zdalnym repozytorium za pomocą Gradle. Jaki jest najłatwiejszy sposób na osiągnięcie tego?

Każda pomoc jest bardzo mile widziane ...

+0

Korzystanie z Exec? http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.Exec.html –

+1

[wtyczka gradle-git] (https://github.com/ajoberstar/gradle-git) wygląda dobry. –

+0

@JBNizet Hum, może ... Będę musiał się nad tym zastanowić. –

Odpowiedz

3

Można użyć Exec jak wskazano w powyższym komentarzu lub użyj JGit naciskać tag. Utwórz wtyczkę/klasę w języku Java i używaj jej gradle

+0

Oba rozwiązania są fajne, ale skończyło się na tym ... Nie mogę sprawić, aby SSH działało z wtyczką gradle-git i działało po prostu wywołując linię poleceń. Nie marnuj więcej czasu na to i potrzebuję działać. –

13

Oto jak możesz zaimplementować swój scenariusz za pomocą Gradle Git plugin. Kluczem jest przyjrzenie się dostarczonej Javadocs wtyczki.

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

Wydaje się, że jest to droga, która działa aż do pewnego momentu ... Nie mogę się uwierzytelnić i przesłać na serwer. Pytam o hasło (brak nazwy użytkownika), więc próbuję użyć hasła do mojego klucza SSH, ale nie działa. Czy istnieje jakaś pomoc w uwierzytelnianiu SSH? –

+0

Czy używasz GitHub? Jeśli tak, czy zarejestrowałeś swój klucz SSH na swoim koncie na stronie? Sprawdziłbym w sekcji [Najczęściej zadawane pytania na GitHubie] (https://help.github.com/categories/56/articles). Jeśli to nie pomoże, wyślę szybką wiadomość e-mail do autora wtyczki. Jest bardzo pomocny i reaguje. –

+0

Nie, nie używając GitHub do tego? To wewnętrzna instalacja GitLab. Mój klucz SSH działa z moim klientem Git, tylko z tą wtyczką nie jest. –

2

Kocham to:

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

EDIT: A szerszą wersję

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 
} 

można obsłużyć wyjątek.

+0

jak obsługiwałbyś błąd, gdy tag już istnieje lub nie można go przekazać? – kemuri

+0

@kemuri Zmodyfikowalem moją odpowiedź. Teraz możesz obsługiwać Wyjątki. –

+0

niesamowite, spróbuję – kemuri

Powiązane problemy