如何从现有任务创建自定义 sbt 任务



我想创建一个使用 publishLocal in Dockerlogin in ecrpublishLocal in Docker 的自定义 sbt 任务。

另请注意,我仅在自定义任务上修改了"在 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))

下面介绍如何从自定义任务触发现有任务。从您的问题中,您希望以某种特定顺序触发它们,因此这是您需要做的

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

注意:不要忘记在taskKey定义中添加lazy,因为这可能会导致一些奇怪的初始化问题。

谢谢马里奥斯。我尝试编写下面的代码,任务依赖项得到了正确处理。但是存储库名称用于项目设置之一。

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

最新更新