2017-01-30 19 views
0

Я хочу создать пользовательскую задачу sbt, которая использует publishLocal in Docker, login in ecr и publishLocal in Docker.Как создать пользовательскую задачу sbt из существующих задач

Также обратите внимание, что я изменил настройки «publishLocal in Docker» только на пользовательской задаче.

Я пробовал написать код ниже, но он не работал.

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)) 

ответ

1

Вот как запускать существующие задачи из вашего пользовательского. Из вашего вопроса, вы хотите, чтобы срабатывать в определенной последовательности, так вот то, что вам нужно сделать

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

Теперь, когда вы вызываете releaseDev это будет первая очередь push in ecr затем publishLocal in Docker.

Примечания: не забудьте добавить lazy в вашем taskKey определения, так как это может привести к некоторым странным вопросам инициализации.

+0

Благодарим вас за ваш ответ и исправьте мой плохой английский. Как изменить настройки только в задаче 'releaseDev'. Я хочу изменить repositoryName по задаче. –

+0

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

0

Thank you marios. Я попытался написать код ниже, и зависимости задачи были правильно обработаны. Однако repositoryName используется для одной из настроек проекта.

// 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