2015-11-30 14 views
6

Ich benutze Gradle, um Docker Publishing und Tagging zu automatisieren. Ich habe derzeit die folgenden Aufgaben:Mehrere Bash-Befehle in einzelnen Gradle Exec-Task vs. mehrere Gradle Exec Tasks mit jeweils einem Befehl

task dockerTagLatest(type: Exec) { 
    description "Build a Docker image of the current version and tag it as 'latest'" 
    dependsOn 'docker' 
    group 'Publishing' 

    commandLine(['docker', 'tag', dockerImageName, dockerImageLatest]) 
} 

task dockerPush(type: Exec, overwrite: true) { 
    description 'Push the Docker image of the current version to the internal Docker hub' 
    group 'Publishing' 
    mustRunAfter 'dockerTagLatest' 

    commandLine 'docker', 'push', dockerImageName 
} 

task dockerPushLatestTag(type: Exec) { 
    description "Push the 'latest' tag to the internal Docker hub" 
    group 'Publishing' 
    mustRunAfter 'dockerTagLatest' 

    commandLine 'docker', 'push', dockerImageLatest 
} 

task dockerPublish() { 
    description "Push the Docker image of the current version and the 'latest' tag to the internal Docker hub" 
    dependsOn 'dockerTagLatest' 
    dependsOn 'dockerPush' 
    dependsOn 'dockerPushLatestTag' 
    group 'Publishing' 
} 

Wäre es besser, so etwas zu haben?

task dockerPublish(type: Exec) { 
    commandLine 'bash', '-e', '-c', """ 
     docker tag ... 
     docker push ... 
     docker push ... 
    """ 
} 

Offensichtlich ist der zweite Ansatz ist nicht Windows-freundlich, aber das für den Moment abgesehen, ist es besser, eine Reihe von abhängigen Exec Aufgaben zu haben, oder alle der Befehlszeile eines Topf zu werfen Befehle in eine einzige Aufgabe? Ich habe Feedback bekommen, dass letzteres besser lesbar ist, aber ich denke, der erste Ansatz ist eher Gradle-ähnlich. Gedanken?

+0

Gibt es jemals ein Szenario, in dem Sie nicht alle diese Aufgaben in dieser Reihenfolge ausführen möchten? Kann einer von ihnen durch zukünftige Gradle-Funktionen parallelisiert werden? Wenn die Antwort auf eines dieser beiden Kriterien "Ja" lautet, möchten Sie möglicherweise separate Aufgaben verwenden. sonst ist eine Aufgabe in Ordnung –

+0

Das ist ein guter Punkt. Während die Aufgaben "dockerPush" und "dockerPushLatest" beide von einer "Docker" -Task abhängen, können diese Tasks möglicherweise parallelisiert werden. –

+0

Ich würde mit einer einzigen Aufgabe beginnen und die Anwendungsfälle beobachten. Wenn sich herausstellt, dass mehr spezifizierte Funktionalität benötigt wird, würde ich die einzelnen Aufgaben in kleinere aufteilen und so weiter. – Opal

Antwort

3

Gibt es jemals ein Szenario, in dem Sie nicht alle diese Aufgaben in dieser Reihenfolge ausführen möchten? Kann einer von ihnen durch zukünftige Gradle-Funktionen parallelisiert werden?

Wenn die Antwort auf eine dieser beiden Antworten "Ja" lautet, können Sie separate Aufgaben verwenden. Ansonsten ist eine Aufgabe in Ordnung.

Verwandte Themen