我有一个SBT项目和一个CD管道,我希望执行以下步骤:
现在,我不想发布任何东西,因为我将把二进制文件提升到另一个环境来运行端到端的测试。只有当它们成功完成时,我才会想要推送git标签,并将我的工艺品上传到远程的artefactory存储库。我真正想要实现的是能够首先运行sbt prepereRelease,然后我将提升到我的测试环境,然后,如果一切顺利的话,运行sbt doRelease。所以我想在我的build.sbt中找到类似的东西:
releaseProcess := Seq[ReleaseStep](
checkSnapshotDependencies,
inquireVersions,
runClean,
runTest,
setReleaseVersion,
commitReleaseVersion,
tagRelease,
setNextVersion,
commitNextVersion
)
commands += Command.command("prepareRelease")((state:State) => {
val newState = Command.process("release",state)
println("Release called from prepareRelease...")
newState
})
releaseProcess := Seq[ReleaseStep](
publishArtifacts,
setNextVersion,
commitNextVersion,
pushChanges
)
commands += Command.command("doRelease")((state:State) => {
val newState = Command.process("release",state)
println("Release called from doRelease...")
newState
})我几乎觉得我需要定义两个自定义命令,每个命令都必须使用不同的sbt-release插件调用原始发布命令,设置不同的releaseProcess --这就是我不知道该怎么做的地方。不幸的是,由于releaseProcess设置积累了这些步骤,所以上面的设置无法工作,而且您仍然会同时执行所有步骤。
发布于 2018-03-05 21:55:42
我最终实现它的方式是创建两个自定义命令并将releaseProcess设置附加到state对象,然后传递给release插件:
// Defines the release process
releaseIgnoreUntrackedFiles := true
commands += Command.command("prepareRelease")((state: State) => {
println("Preparing release...")
val extracted = Project extract state
val customState = extracted.append(Seq(releaseProcess := Seq[ReleaseStep](
checkSnapshotDependencies,
inquireVersions,
runClean,
setReleaseVersion,
commitReleaseVersion,
tagRelease,
runTest
)), state)
val newState = Command.process("release with-defaults", customState)
Command.process("dist", newState)
})
commands += Command.command("completeRelease")((state: State) => {
println("Completing release...")
val extracted = Project extract state
val customState = extracted.append(Seq(releaseProcess := Seq[ReleaseStep](
inquireVersions,
setNextVersion,
commitNextVersion,
pushChanges
)), state)
val newState = Command.process("release with-defaults", customState)
newState
})因此,我的管道所做的类似于以下操作:
sbt prepareReleasesbt completeReleasecurl发布于 2018-03-05 13:19:20
您已经将prepareRelease和doRelease定义为设置。这意味着,在加载或重新加载生成时,只计算一次设置的值。此外,ReleaseStep类型只描述要作为发布过程的一部分执行的函数,并且不会单独执行任何操作。
看起来你在使用sbt释放插件。在文档之后,您必须使用自定义步骤重新定义releaseProcess键,并运行release命令来执行它们。
https://stackoverflow.com/questions/49100128
复制相似问题