2016-06-01 10 views
0

Ich verwende das Groovy-Plugin in Jenkins, und möchte einige Git-Repositories manipulieren.Git-Bearbeitung aus einem Groovy-System-Skript in Jenkins

möchte ich mag:

  • in Repo A, Kasse X verpflichten
  • in Repo B, Kasse verpflichten Y
  • in Repo C, machen eine Festschreibung und schieben

Ich freue mich, wenn mir jemand zeigen kann, wie man das mit dem Git-Plugin (in Groovy) macht oder wie man anruft Systembefehle in einem bestimmten Pfad (etwas wie "git checkout X".execute(in_this_path) wäre fantastisch.

Antwort

0

Die Herausforderung besteht darin, das Arbeitsverzeichnis zu ändern, also können Sie an mehreren Git-Repositories in verschiedenen Pfaden arbeiten. Um es zu lösen, benutze ich java.lang.ProcessBuilder, das Verzeichnis (Dateiverzeichnis) -Methode hat, das das Arbeitsverzeichnis ändert. Hier ist ein vollständiges Beispiel:

//executes the command in the working dir 
//and prints the output to a log file 
def runProcess(workingDir, command) { 
    ProcessBuilder procBuilder = new ProcessBuilder(command); 
    procBuilder.directory(workingDir); 
    procBuilder.redirectOutput(new File("${workingDir}/groovyGit.log")) 

    Process proc = procBuilder.start(); 

    def exitVal = proc.waitFor() 
    println "Exit value: ${exitVal}" 

    return proc 
} 

//configuring the working dir for each git repository 
def repoA = "repo A working dir" 
def repoB = "repo B working dir" 
def repoC = "repo C working dir" 

//configuring the wanted revision to checkout for each repository 
def repoARevision = "repo a revision" 
def repoBRevision = "repo b revision" 

def commitMsg = "commit msg" 

//checkout A 
runProcess(new File(repoA), ["git", "checkout", repoARevision]) 

//checkout B 
runProcess(new File(repoB), ["git", "checkout", repoBRevision]) 

//check status before commit 
runProcess(new File(repoC), ["git", "status"]) 

//commit 
runProcess(new File(repoC), ["git", "commit", "-a", "-m", commitMsg]) 
Verwandte Themen