2015-11-30 10 views
6

私はgradleを使用して、ドッカーの公開とタグ付けを自動化しています。単一のGradle Execタスクでの複数のbashコマンドと、それぞれ1つのコマンドでの複数のGradle Execタスク

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

が、このようなものを持っている方が良いでしょう:私は現在、以下のタスクのセットを持っていますか?

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

が明らかに第二のアプローチは、Windowsは友好的ではありませんが、一瞬のためにそれを無視して、それが単一のタスクにコマンド依存Execのタスクのセットを持っている、またはコマンドラインのすべてをひとまとめ方が良いでしょうか?私は後者がより読みやすいというフィードバックを得ましたが、私は最初のアプローチがより多くのGradleのようなものだと思います。思考?

+0

これらのタスクをすべて正確な順序で実行したくないシナリオはありますか?将来のGradleの機能によってそれらのいずれかを並列化できますか?これらのいずれかの答えが「はい」の場合は、別々のタスクを使用することができます。そうでなければ1つのタスクはちょうど良いです –

+0

それは良い点です。 'dockerPush'と' dockerPushLatest'タスクはどちらも 'docker'タスクに依存しますが、それらのタスク自体は並列化される可能性があります。 –

+0

私は1つのタスクから始め、ユースケースを観察します。より多くの指定された機能が必要であることが判明した場合は、単一のタスクをより小さなものに分割するなどです。 – Opal

答えて

3

これらのタスクをすべて正確な順序で実行したくないシナリオはありますか?将来のGradleの機能によってそれらのいずれかを並列化できますか?

いずれかの回答が「はい」の場合は、別々のタスクを使用することができます。さもなければ1つの仕事はちょうどいいです

関連する問題