我在一些项目中使用了sbt-release插件。我使用的一个步骤是sbt-native-packager的docker:publish将镜像推送到Docker hub。
sbt-native-packager依赖于dockerUpdateLatest设置来决定是否更新latest标签。缺省值是false,如果是true,它将更新latest。
对于一个根目录下没有子项目的项目,我可以使用自定义的ReleaseStep来更改该设置,这取决于我是否要发布SNAPSHOT,即如果版本以SNAPSHOT结束,我不想更新latest标记。
lazy val setDockerReleaseSettings = ReleaseStep(action = oldState => {
// dockerUpdateLatest is set to true if the version is not a SNAPSHOT
val extracted = Project.extract(oldState)
val v = extracted.get(Keys.version)
val snap = v.endsWith("SNAPSHOT")
if (!snap) extracted
.appendWithSession(Seq(dockerUpdateLatest := true), oldState)
else oldState
})上面的方法适用于该项目。
对于另一个项目,在根目录下聚合了多个项目。我想做一些像这样的事情
lazy val setDockerReleaseSettings = ReleaseStep(action = oldState => {
// dockerUpdateLatest is set to true if the version is not a SNAPSHOT
val extracted = Project.extract(oldState)
val v = extracted.get(Keys.version)
val snap = v.endsWith("SNAPSHOT")
if (!snap) extracted
.appendWithSession(Seq(dockerUpdateLatest in api := true, dockerUpdateLatest in portal := true), oldState)
else oldState
})但它似乎不起作用。我还尝试了dockerUpdateLatest in Global和dockerUpdateLatest in root,但都无济于事。你知道如何在这些子项目中修改dockerUpdateLatest吗?
发布于 2019-06-27 01:45:34
能够用set every dockerUpdateLatest := true解决这个问题。我像这样做了一个定制的ReleaseStep
lazy val createSetDockerUpdateLatestCommand = ReleaseStep(action = state => {
// dockerUpdateLatest is set to true if the version is not a SNAPSHOT
val snap = Project.extract(state).get(Keys.version).endsWith("SNAPSHOT")
val setDockerUpdateLatest = if (!snap)
Command.command("setDockerUpdateLatest") {
"set every dockerUpdateLatest := true" ::
_
}
else
Command.command("setDockerUpdateLatest") {
"" ::
_
}
state.copy(definedCommands = state.definedCommands :+ setDockerUpdateLatest)
})然后我运行setDockerUpdateLatest
https://stackoverflow.com/questions/56775080
复制相似问题