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?
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 –
To dobry punkt. Zadania 'dockerPush' i' dockerPushLatest' zależą od zadania 'docker', ale same zadania mogą być zrównoleglone. –
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