2013-07-28 4 views
6

Я создал конкретную задачу Gradle, которая должна быть вызвана только в системе сборки Jenkins. Мне нужно сделать эту задачу зависеть от другой, которая должна пометить HEAD ведущей ветки после успешной компиляции проекта.Как зафиксировать/нажать тег Git с Gradle?

Я понятия не имею, как я могу совершать/нажимать/добавлять теги к определенной ветке в удаленном репозитории с помощью Gradle. Какой самый простой способ достичь этого?

Любая помощь очень ценится ...

+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

@JBNizet Hum, может быть ... Я должен буду изучить это. –

ответ

3

Вы можете использовать Exec как указано в указанном выше комментарии или использовать JGit нажать тег. Создайте плагин/класс в java и используйте его gradle

+0

Оба решения хороши, но я закончил использовать этот ... Не могу заставить SSH работать с плагином gradle-git, и он просто работал, вызывая командную строку. У меня нет больше времени тратить на это, и мне нужно, чтобы он работал. –

13

Вот как вы можете реализовать свой сценарий с помощью Gradle Git plugin. Ключ должен посмотреть на предоставленный Javadocs плагина.

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

Кажется, это путь, и он работает до определенной степени ... Я не могу аутентифицироваться и нажимать на сервер. Я попросил пароль (нет имени пользователя), поэтому я пытаюсь использовать кодовую фразу для моего SSH-ключа, но он не работает. Любая помощь в получении SSH-аутентификации работает? –

+0

Вы используете GitHub? Если да, зарегистрировал ли ваш SSH-ключ свою учетную запись на странице? Я бы посмотрел раздел [FAQ] GitHub (https://help.github.com/categories/56/articles). Если это не поможет, я бы отправил быстрое письмо автору плагина. Он очень полезен и отзывчив. –

+0

Нет, не используя GitHub для этого? Это внутренняя установка GitLab. Мой ключ SSH работает с моим клиентом Git, но с этим плагином это не так. –

2

Я люблю это:

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

EDIT: более обширная версия

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 
} 

Вы можете обрабатывать исключения.

+0

как бы вы справились с ошибкой, если тег уже существует или не может быть нажат? – kemuri

+0

@kemuri я модифицировал мой ответ. Теперь вы можете обрабатывать исключения. –

+0

Удивительно, я дам ему попробовать – kemuri

Смежные вопросы