2015-11-30 13 views
6

Używam gradle do automatyzacji procesu publikowania i tagowania dockingu. Obecnie mam następujący zestaw zadań:Wiele poleceń basha w pojedynczym zadaniu Gradle Exec i wiele zadań Gradle Exec, każdy z jednym poleceniem

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' 
} 

Czy byłoby lepiej mieć coś takiego?

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

Oczywiście drugie podejście nie jest Windows przyjazny, ale nie zważając, że na razie lepiej jest mieć zestaw zależnych zadań Exec lub ryczałtu wszystkich komend linii poleceń w jednym zadaniu? Dostałem informację zwrotną, że ta ostatnia jest bardziej czytelna, ale myślę, że pierwsze podejście jest bardziej podobne do Gradle'a. Myśli?

+0

Czy istnieje jakiś scenariusz, w którym nie chcesz wykonywać wszystkich tych zadań w tej samej kolejności? Czy którekolwiek z nich może być zrównoleglone przez przyszłe funkcje Gradle? Jeśli odpowiedź na którekolwiek z nich brzmi "tak", możesz chcieć użyć oddzielnych zadań; w przeciwnym razie jedno zadanie jest w porządku –

+0

To dobry punkt. Zadania 'dockerPush' i' dockerPushLatest' zależą od zadania 'docker', ale same zadania mogą być zrównoleglone. –

+0

Zacznę od jednego zadania i obserwatora przypadków użycia. Jeśli okaże się, że potrzebna jest bardziej szczegółowa funkcjonalność, podzielę pojedyncze zadania na mniejsze i tak dalej. – Opal

Odpowiedz

3

Czy istnieje scenariusz, w którym nie chcesz wykonywać wszystkich tych zadań w tej samej kolejności? Czy którekolwiek z nich może być zrównoleglone przez przyszłe funkcje Gradle?

Jeśli odpowiedź na którekolwiek z nich brzmi "tak", to możesz chcieć użyć oddzielnych zadań; w przeciwnym razie jedno zadanie jest w porządku.

Powiązane problemy