8

Jenkins ビルド システムでのみ呼び出される特定の Gradle タスクを作成しました。プロジェクトのコンパイルが成功した後、マスター ブランチの HEAD にタグを付ける必要がある別のタスクに、このタスクを依存させる必要があります。

Gradle を使用してリモート リポジトリの特定のブランチにタグをコミット/プッシュ/追加する方法がわかりません。これを達成する最も簡単な方法は何ですか?

どんな助けでも本当に感謝しています...

4

3 に答える 3

16

Gradle Git プラグインを使用してシナリオを実装する方法は次のとおりです。重要なのは、提供されているプラ​​グインのJavadocを確認することです。

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]
}
于 2013-07-29T00:00:39.923 に答える
9

これ大好き:

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
}

例外を処理できます。

于 2017-03-09T09:10:27.200 に答える
3

上記のコメントで指摘されているように Exec を使用するか、JGit を使用してタグをプッシュできます。Javaでプラグイン/クラスを作成し、それをgradleで使用する

于 2013-07-28T17:03:08.670 に答える