Ich möchte einen Jenkins-Build automatisch auslösen, wenn es einen Push zu Github gibt. Darüber hinaus möchte ich basierend auf der Verzweigung und den modifizierten Dateien die Argumente einer anderen Funktion an die API SaltStack senden und auf anderen Ziel-VMs ausführen."fatal: bad object" beim Aufruf von `git diff-tree` über grooviges Skript?
Hier ist mein Code in der "Umwelt Bauen" - "Umgebungsvariablen an den Build-Prozess Inject" Schritt:
def map = [:]
println "env:"
def env = System.getenv()
env.each{
println it
}
println "envVarsMap:"
def thr = Thread.currentThread()
def build = thr?.executable
def envVarsMap = build.parent.builds[0].properties.get("envVars")
envVarsMap.each{
println it
}
def envlist = [];
env.each() { k,v -> envlist.push("$k=$v") }
envVarsMap.each { k,v -> envlist.push("$k=$v") }
switch (envVarsMap['GIT_BRANCH']) {
case "origin/development":
map['DEPLOY_SERVER'] = "admin-dev-1,admin-staging-2"
break
case "origin/master":
map['DEPLOY_SERVER'] = "admin-prod-1"
break
}
println "GIT_COMMIT: ${envVarsMap['GIT_COMMIT']}"
println "WORKSPACE: ${envVarsMap['WORKSPACE']}"
def sout = new StringBuilder()
def serr = new StringBuilder()
proc1 = "git diff-tree --no-commit-id --name-only -r ${envVarsMap['GIT_COMMIT']}".execute(envlist, new File("${envVarsMap['WORKSPACE']}"))
proc1.waitForProcessOutput(sout, serr)
println "sout: $sout"
println "serr: $serr"
println "proc1: ${proc1.text}"
und den Fehler:
GIT_COMMIT: c56ba02156bcf23598db09b9a02407316bf554dc
WORKSPACE: /var/lib/jenkins/workspace/deploy-admin-app
sout:
serr: fatal: bad object c56ba02156bcf23598db09b9a02407316bf554dc
Das Ausführen dieses Befehls manuell jenkins
Benutzer auf dem CI-Server hat einwandfrei funktioniert:
su - jenkins -s /bin/bash -c 'cd /var/lib/jenkins/workspace/deploy-admin-app; git diff-tree --no-commit-id --name-only -r c56ba02156bcf23598db09b9a02407316bf554dc'
package.json
Meine Frage ist also: Warum habe ich diesen Fehler? Wie kann ich dies reproduzieren, wenn es manuell ausgeführt wird?
Wenn die Revision nicht existiert, sollten wir eine "unbekannte Version" Fehler:
fatal: ambiguous argument 'c56ba02156bcf23598db09b9a02407316bf554dx': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
> Wenn die Revision nicht existiert, sollten wir eine „unbekannte Revision“ Nicht wahr, in Ihrem Beispiel 'c56ba02156bcf23598db09b9a02407316bf554dx' ist keine gültige git commit Hash bekommen, weil es' x' Zeichen enthält, versuchen Sie mit einem beliebigen gültigen git commit hash und es wird einen fehlerhaften Objektfehler in der Ausgabe zurückgeben (ersetzen Sie 'x' durch ein Zeichen von af). – favadi
OK, danke. Upvoted. Aber die Frage ist: Warum ist es passiert mit 'c56ba02156bcf23598db09b9a02407316bf554dc'? – quanta
Ich sehe eine Variable mit dem Namen WORKSPACE, aber es ist nicht klar, dass Ihr aktuelles Arbeitsverzeichnis etwas mit dieser Variablen zu tun hat, und selbst wenn es in Ihrer Umgebung ist, ist es keine Variable, die Git verwendet (Git verwendet $ GIT_DIR und $ GIT_WORK_TREE oder '--git-dir' und' --work-tree' Argumente. Andererseits kenne ich keine Details von Jenkins. – torek