2017-01-30 3 views
0

Je souhaite créer une tâche sbt personnalisée utilisant publishLocal in Docker, login in ecr et publishLocal in Docker.Comment créer une tâche sbt personnalisée à partir de tâches existantes

Notez également que j'ai modifié les paramètres "publishLocal in Docker" uniquement sur une tâche personnalisée.

J'ai essayé d'écrire le code ci-dessous mais cela n'a pas fonctionné.

val releaseDev = taskKey[Unit]("push docker image") 
releaseDev := (push in ecr).value 
releaseDev := releaseDev.dependsOn(publishLocal in Docker).value 
releaseDev := (projectSettings ++ Seq(repositoryName in ecr := (packageName in Docker).value + "-stg" + ":" + (version in Docker).value)) 

Répondre

1

Voici comment déclencher des tâches existantes à partir de votre tâche personnalisée. À partir de votre question, vous les voulez être déclenchées dans une séquence particulière, alors voici ce que vous devez faire

lazy val releaseDev = taskKey[Unit]("push docker image") 
releaseDev := Def.sequential(push in ecr, publishLocal in Docker).value 

Maintenant, lorsque vous déclenchez releaseDev il va d'abord tourner push in ecr puis publishLocal in Docker.

Note: ne pas oublier d'ajouter le lazy dans votre définition taskKey car il peut conduire à des problèmes d'initialisation étranges.

+0

Je vous remercie pour votre réponse aimable et corrige mon mauvais anglais. Comment puis-je modifier les paramètres uniquement dans la tâche 'releaseDev'. Je souhaite modifier repositoryName par tâche. –

+0

's dans releaseDev: = ...'? – marios

0

Merci marios. J'ai essayé d'écrire le code ci-dessous et les dépendances de tâches ont été correctement gérées. Toutefois, repositoryName est l'un des paramètres du projet.

// docker publish settings 
import com.amazonaws.regions.{Region, Regions} 

region in ecr := Region.getRegion(Regions.AP_NORTHEAST_1) 
repositoryName in ecr := (packageName in Docker).value + ":" + (version in Docker).value 
localDockerImage in ecr := (packageName in Docker).value + ":" + (version in Docker).value 

// Publisher Setting 
//~~~~~~~~~~~~~~~~~~~ 
import ReleaseTransformations._ 

releaseProcess := Seq[ReleaseStep](
    checkSnapshotDependencies, 
    inquireVersions, 
    runClean, 
    runTest, 
    setReleaseVersion, 
    commitReleaseVersion, 
    tagRelease, 
    ReleaseStep(state => Project.extract(state).runTask(publishLocal in Docker, state)._1), 
    ReleaseStep(state => Project.extract(state).runTask(login in ecr, state)._1), 
    ReleaseStep(state => Project.extract(state).runTask(push in ecr, state)._1), 
    setNextVersion, 
    commitNextVersion, 
    pushChanges 
) 

lazy val releaseDev = taskKey[Unit]("push docker image") 
releaseDev := Def.sequential(publishLocal in Docker, login in ecr, push in ecr).value 
(repositoryName in ecr) in releaseDev := (packageName in Docker).value + "-stg" + ":" + (version in Docker).value