私のプロジェクトでは、ライブラリの公開はアトミック操作ではありません。プロセスには、障害が発生した場合にクリーンアップする必要がある多くの副作用が含まれるためです。エラーは、タイムアウト、既存のバージョンの公開の試行、既存のステージング リポジトリ、署名キーの問題などによって発生する可能性があります。現在、失敗したリリースをロールバックするために実行する手動の手順は、
- Sonatype Nexusにログインし、ステージング リポジトリをドロップします
- バージョン増加コミットを削除します。
git reset --hard sha
- タグを削除:
git tag -d name
失敗時にすべての変更が自動的に元に戻されるように、発行プロセスをアトミックにする方法はありますか?
私のプロジェクトのリリース プロセスは、sbt を使用して Scala ライブラリを Maven Central にリリースする方法に似ています。すなわち
releaseProcess := Seq[ReleaseStep](
checkSnapshotDependencies,
inquireVersions,
runClean,
runTest,
setReleaseVersion,
commitReleaseVersion,
tagRelease,
publishArtifacts,
setNextVersion,
commitNextVersion,
releaseStepCommand("sonatypeReleaseAll"),
pushChanges
)
どこplugins.sbt
にある
addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.11")
addSbtPlugin("com.jsuereth" % "sbt-pgp" % "2.0.0")
addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "2.5")