環境:
- 約 12 のサービス: WAR と JAR の両方 (Tanuki ラッパーで実行)
- 各サービスは、開発、ステージング、および本番にデプロイされています。環境は、異なる web.xml ファイル、Spring プロファイル (Tanuki ラッパーで設定) などを使用します。
- AWS S3 にアーティファクトを保存して、EC2 インスタンスで簡単に取得できるようにしたいと考えています。一部のサービスは複数のマシンで実行され、AutoScaling インスタンスは起動後に自動的に最新バージョンを取得し、開発アーティファクトは更新後に自動的にデプロイされる必要があります。 ..
現在の展開プロセスは次のようになります。
- Jenkins はコードをビルドしてテストします
- 満足したら、Artifactory プラグインを使用してリリースを行います(本番環境のデプロイのみ。開発およびステージング アーティファクトはプレーンな Jenkins ビルドに基づいています)。
- 各プロジェクト (開発、ステージング、本番) の 3 つの異なるプロモーション ジョブでプロモーテッド ビルド プラグインを使用して、目的の環境のアーティファクトをビルドし、S3 にアップロードします。
これはほとんど問題なく動作しますが、複数の煩わしさに遭遇しました。
- Artifactory プラグインは、リポジトリにコミットできないため、ソース コードにタグを付けて更新することができません (これは、当社の Jenkins プロバイダーであるCloudBeesに固有のものである可能性があります)。気にしないでください。手動で行うことができます。
- Jenkins S3 プラグインは、複数のアップロード ターゲットでは正しく動作しません (環境ごとに 1 つ使用しています) - 設定を保存すると、それらすべてにアップロードして設定を複製しようとします: JENKINS-18563。アップロードにはシェル スクリプトを使用していますが、問題なく動作しています。
- プロモーション ジョブは、元のビルドとは異なるインスタンスで実行される可能性があるため、失敗することがあります。失敗する (ファイルが見つからないためにビルドされる) か、古いビルドになる (古いバージョンが使用されているため)。繰り返しますが、これは CloudBees が提供する特定のセットアップが原因で発生する可能性があります。これはビルドを再度実行することで修正でき、うまくいけば今回のビルドと同じインスタンスでプロモーション ジョブを実行することができます (これは私の理解では運が良かっただけです)。
ワークスペースは一時的なものであり、ワークスペースが存在することや最新であることが保証されていないため、プロモーション ジョブを実行する前にコード チェックアウトを行うように CloudBees からアドバイスを受けました。ただし、プロモーション ジョブのシェル スクリプトは、textarea フィールドの下にリンクされていても、別のStackOverflow スレッドに記載されているように環境変数を尊重していないようです。だからうまくいきsvn checkout ${SVN_URL} -r ${SVN_REVISION}
ません。
これは何らかの回避策で修正できると確信していますが、確かに私は何かひどく間違ったことをしているに違いありません. 他の多くの人が同様の方法でアプリケーションを展開していると思いますが、さまざまな回避策や煩わしさのない、より良い方法があるに違いありません。
最後まですべてを読んでくれてありがとう!