我创建了一个特定的 Gradle 任务,该任务只能在 Jenkins 构建系统中调用。我需要使此任务依赖于另一个任务,该任务应在项目成功编译后标记 master 分支的 HEAD。
我不知道如何使用 Gradle 将标签提交/推送/添加到远程存储库中的特定分支。实现这一目标的最简单方法是什么?
非常感谢任何帮助...
以下是如何使用 Gradle Git 插件 实现您的场景。关键是看插件提供的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]
}
我喜欢这个:
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
}
您可以处理异常。
您可以使用上面评论中指出的 Exec 或使用 JGit 来推送标签。在java中创建一个插件/类并在gradle中使用它
您可以使用 exec轻松实现此目的。
val myTag = "foo"
tasks.register<Task>("gitTag") {
exec { commandLine("git", "tag", myTag) }
exec { commandLine("git", "push", "origin", "tag", myTag) }
}
只需在管道中调用
gitTag
任务即可。