什么:
使用jenkins我想定期处理来自SVN的已更改文件,并将处理的输出提交回SVN.
原因:
我们将二进制文件提交到SVN(我们正在使用Oracle Forms并提交fmb-Files).我创建了一个脚本,它将fmb导出到xml(使用Oracle的原始Fmb2XML工具),而不是将XML转换为我们也想提交的普通源.这让我们可以欣赏,查看变化,....
问题:
目前我只能检查所有内容,转换整个目录并将整个目录提交回SVN.但由于所有纯文本文件都是新生成的,因此它们在SVN中显示为已更改.我只想提交更改后的内容.
谁能帮我这个?
我安装了 Groovy 插件,配置了 Groovy 语言并创建了一个我作为“系统 Groovy 脚本”执行的脚本。脚本如下所示:
import java.lang.ProcessBuilder.Redirect
import hudson.model.*
import hudson.util.*
import hudson.scm.*
import hudson.scm.SubversionChangeLogSet.LogEntry
// uncomment one of the following def build = ... lines
// work with current build
def build = Thread.currentThread()?.executable
// for testing, use last build or specific build number
//def item = hudson.model.Hudson.instance.getItem("Update_SRC_Branch")
//def build = item.getLastBuild()
//def build = item.getBuildByNumber(35)
// get ChangesSets with all changed items
def changeSet= build.getChangeSet()
List<LogEntry> items = changeSet.getItems()
def affectedFiles = items.collect { it.paths }
// get filtered file names (only fmb) without path
def fileNames = affectedFiles.flatten().findResults {
if (it.path.substring(it.path.lastIndexOf(".") + 1) != "fmb") return null
it.path.substring(it.path.lastIndexOf("/") + 1)
}.sort().unique()
// setup log files
def stdOutFile = "${build.rootDir}\\stdout.txt"
def stdErrFile = "${build.rootDir}\\stderr.txt"
// now execute the external transforming
fileNames.each {
def params = [...]
def processBuilder = new ProcessBuilder(params)
// redirect stdout and stderr to log files
processBuilder.redirectOutput(new File(stdOutFile))
processBuilder.redirectError(new File(stdErrFile))
def process = processBuilder.start()
process.waitFor()
// print log files
println new File(stdOutFile).readLines()
System.err.println new File(stdErrFile).readLines()
}
Run Code Online (Sandbox Code Playgroud)
之后我使用带有“svn commit”的命令行来提交更新的文件。
| 归档时间: |
|
| 查看次数: |
5827 次 |
| 最近记录: |