web-dev-qa-db-ja.com

jenkinsは以前のバージョンのデプロイをロールバックします

ここにあるものです。私はいくつかのJava=バックエンドアプリをデプロイするjenkinsパイプラインジョブを持っています。パイプラインはSCMからのスクリプトによって実行されます。このスクリプトは、開発チームのコードを取得するスクリプトであり、1-そのコードをチェックアウトします2-WARをコンパイルして作成します3-warをWebサーバーにコピーします。

現在、開発者はロールバックを実装したいと考えています。ジョブが実行され、新しいデプロイメントが行われて失敗した場合、正常に機能していた最後のデプロイメントに戻りたいと考えています。

ジェンキンスでこれを行う方法はありますか?たとえばJfrogアーティファクトを使用して?アーティファクトが構成され、WARS(または他のファイル)をそのリポジトリにアップロードできますが、使用されていません。これを実装する方法がわかりません。別のWARファイルにタグを使用し、デプロイメントが失敗した場合、問題なく動作するアーティファクトな最新のWARから取得すると考えていました。これは可能ですか?このアプローチは、アーティファクトを使用してジェンキンスでどのように行うことができますか? WARを作成した後、そのWAAをアーティファクトにアップロードする新しいステップを実装できますが、どのようにしてtisをjenkinsに接続して、必要なWARを使用できますか?これを行う方法について何か提案はありますか?ありがとうございました!

3
Chanafot

これらのアプローチをお勧めします:

工芸品なし

この場合、パラメーターとしてブランチ名またはタグを受け取るには、現在のパイプラインをパラメーター化するだけです。

ワークフローは次のとおりです。

  • リリースブランチをmasterにマージする前に、以前の安定したリリースでタグの存在を確認するか、新しいタグを作成します。
  • リリース(QA、テストなど)をマスターブランチにマージします
  • masterブランチで現在のパイプラインを実行します。
  • エラーが検出された場合は、SCM(csv、svn、gitなど)を使用してロールバックを実行します。たとえば、bitbucketには、マージされたプルリクエストセクションにrevertオプションがあります。
  • パラメーターとしてマスターブランチを使用して、同じパイプラインを再度実行します。ロールバックができなかった場合は、最後の安定したタグをパラメーターとしてこのパイプラインを実行します。

Artifactoryまたは一部のArtifactリポジトリを使用

この場合、ソフトウェアのバージョン管理戦略を採用する必要があります。このソースを読む:

最も簡単なモードでは、戦争の増分リリースバージョンをビルドするだけです。春のバージョンも同様に機能します:

spring-release-versions

https://mvnrepository.com/artifact/org.springframework/spring-core

例えば:

  • 今日、5.0.0-RELEASE安定バージョンがアーティファクトに保存され、本番環境にデプロイされました。
  • 夜間にパイプラインを実行し、最後のステップとしてwarapi-5.0.0-RELEASE.warをアーティファクトにアップロードします。
  • 1か月後、新しいリリースバージョン5.0.1-RELEASEができました。
  • パイプラインを実行し、エラーが検出された場合は、5.0.0-RELEASEという以前の安定したバージョンをダウンロードして、ロールバックステップとしてデプロイします。

他の同様のテクニック

  • Dockerを使用してインクリメンタルバージョンを割り当て、アプリケーションのビルドを作成します。
4
JRichardsz

Artifactoryの代わりに、GithubリリースまたはGitlabパッケージを使用して、次のようなシナリオに従うことができます(prod.build_number.short_commit_hashのようなバージョン管理スキームを想定)。

  1. 昨日の夕方、バージョンprod.32.ehR456eをリリースしました
  2. 今日、このバージョンは製品版に問題があるようです。
  3. 自動デプロイメントパイプラインを使用して、githubリリースまたはgitlabパッケージに保存されているバージョンprod.31.fBr451eを再デプロイしてロールバックします。
1
EddardOmeka