2014-12-26 21 views
8

Ben görevlerinden biri docker içine giriş yapmak olduğu bir Gradle dosyası oluşturmak var. Bu görevde kullanıcının/CI'nin docker_username, docker_password ve docker_email parametrelerini vermesini istiyorum. beklendiği gibi gradle loginDockerHub -Pdocker_username=vad1mo ... tüm yürütülmesiOpsiyonel Gradle özellikleri

task loginDockerHub(group: "Docker", type:Exec) {   
    executable "docker" 
    args "login","-u", docker_username, "-p", docker_password, "-e", docker_email 
} 

çalışıyor. Ben örneğin gradle build için yürütüldüğünde

Ama hatayı alıyorum: docker_username erişmezseniz diğer görevlerde Ben -P parametresini sağlamadan gradle loginDockerHub yürütme bu hatayı beklenebilir

Could not find property 'docker_username' on task ':loginDockerHub'.

değil/şifre parametreleri.

Nasıl başka görev için parametre zorunlu yapmazlar Gradle benim loginDockerHub görev için isteğe bağlı parametreleri sahip olabilir.

+1

docker_password, docker_email, aramaya

ext.shouldLoginDockerHub = project.hasProperty("docker_username"); task loginDockerHub(group: "Docker") { doLast{ if(shouldLoginDockerHub) { exec { executable "docker" args "login","-u", docker_username, "-p", docker_password, "-e", docker_email } } else { println "Not logging in to docker hub because docker_username was not provided."; } } } 

İlk hattı genişletmek olabilir: Ben bu yaparak çözdü * * idam. –

cevap

7

Sen özelliğin bulunup bulunmadığını kontrol edin ve eğer varsayılan bir döndürebilir.

args "login", "-u", project.hasProperty("docker_username") ? docker_username : "" 

Güncelleme

: sen biraz bu kolaylaştırabilirsiniz Gradle 2.13 başlayarak.

args "login", "-u", project.findProperty("docker_username") ?: "" 
+0

bu – Vadimo

+0

Aynı hatayı alıyorsunuz çalışmıyor? –

+0

evet, aynı hata. @oliver belirtilen yapılandırma aşaması. Sanırım bu, – Vadimo

4

Soruna bir çözüm bulamadık. This description, bir görev içindeki eylemleri bildirmek hakkında bir ipucu vardı. Kabuk yürütücüsünü eylem görevine koymak, beklediğim davranışa sahiptir, çünkü görev yürütülürken eylemler değerlendirilir.

task loginDockerHub(group: "Docker", type:Exec) { 
    doFirst{ 
     executable "docker" 
     args "login","-u", docker_username, "-p", docker_password, "-e", docker_email 
    } 
} 

bir hata bağırdı olacak docker_* parametreleri vermeden loginDockerHub çalıştırılıyor. Başka herhangi bir görevi yürütmek beklendiği gibi çalışacaktır.

0

bunu yapmak zorunda kaldı ve benim yapı bir hata ile başarısız istemiyordu. Bireysel görevler aslında olup olmamalarına bakılmaksızın konfigürasyonu * daima değerlendirilir * bu görevi Unutmayın vb