web-dev-qa-db-ja.com

ジェンキンスによる継続的な展開

Jenkinsを使用して、テスト環境と運用環境に展開したいと思います。そのためには、ssh/scpなど、目的の環境のサーバーに接続する必要があります。

最良の方法は何か知りたいです。

Jenkins-Deploy-Plug-inやJenkins Publish over SSH Pluginなど、これを行うプラグインがいくつか見つかりました。前者には多くの問題があり、実稼働環境への展開にはあまり信頼できません。2番目の問題では、展開ごとに手動で行うグローバル構成を変更する必要があります。

これを解決する方法はありますか?たぶん、いくつかのスクリプトやプラグインがありますか?

私が現在持っている唯一のアイデアは、ジェンキンスを使ってサーバーに接続し(おそらくSSHプラグインを使用して)、そこで希望する環境に接続するスクリプトを実行することです。しかし、それは2つの接続です。それは本当に必要ですか?もっと簡単な方法を期待しています。

ヒントをありがとう。

35
user1338413

次の手順をお勧めします。

1つのシェルスクリプト(jenkinsサーバーのどこかに保存されている)がすべてを実行します。基本的に、スクリプトはビルドアーティファクトのscpを実行してからサーバー(ssh)に接続し、デプロイに必要なすべてのタスクを実行します(メンテナンスページのセットアップ、現在のアプリのバックアップ、新しいアプリのデプロイなど)。

Jenkinsサーバーには、少なくとも2つのジョブがあります。

  • 最初のものは単にビルドを行います(maven、または他のビルドスクリプトを使用)
  • 2番目のジョブはdeployを実行するため、このジョブはシェルスクリプトのみを実行します。 (ターゲット環境ごとに1つのデプロイジョブをお勧めします:テスト、実稼働、...)

この「ワンクリック展開」を達成するために「特別な」ジェンキンスプラグインは必要ありません。 jenkinsユーザーがターゲットサーバーにsshアクセスできることのみが必要です。

[〜#〜] edit [〜#〜]

これが私の投稿を説明するためのサンプルシェルスクリプトです

#This script will copy the last artifact build by the job "MyApp" to test.myserver.com
#and remotely execute the deployment script.

#copy the war to the server
#(the job "MyApp" is using maven, that's why the war can be found at this location)
scp -i <HOME_DIR>/.ssh/id_dsa $HUDSON_HOME/jobs/MyApp_Build/workspace/myapp/target/myapp.war     [email protected]:/tmp/

#connect to the server and execute the deployment script
ssh -i <HOME_DIR>/.ssh/id_dsa [email protected] 
#The following is just an example of what a deployment script can be.
#of course you must adapt it to your needs and environment
"cd <Tomcat_DIR>;
#first copy the current war to a backup directory (additionaly, I have a cron task deleting old undeployed apps)
cp -rf myapp-apps/myapp* undeployed/myapp-apps/; 
#execute a script (stored on the server) to properly stop the app
sh bin/myapp.sh stop; 
#delete current app
rm -rf myapp-apps/myapp; 
rm -rf myapp-apps/myapp.war;
#copy the uploaded war in Tomcat app directory 
cp /tmp/myapp.war myapp-apps/; 
#execute a script (stored on the server) to start the app
sh bin/myapp.sh start"
21
ben75

SSHを使用すると、環境のセキュリティが低下します
、トラブルシューティングは非常に困難です。

リモートマシンにJenkins-Slaveをインストールすることをお勧めします
そしてスレーブでジョブを実行してテストを実行します。

スレーブはサーバーによって監視され、多くのトラブルを軽減します
接続の管理。

ビルドが正常に終了すると、リモートジョブをトリガーできます
そしてそのビルドのアーティファクトを渡します。
(最初のジョブでアーティファクトを共有ドライブに保存することもできます
そしてそれらのアーティファクトの場所を次のジョブに渡します)。

こちらをご覧ください:

8
Gonen

理想的には、展開に Fabric または Capistrano のようなものを使用し、これらのスクリプトをJenkinsから呼び出す必要があります。私はCapistranoをRuby on Railsおよび非Rubyアプリケーションにも広く使用しています。最大の利点は次のとおりです。

  • 展開中にエラーが発生した場合に展開をロールバックするために組み込まれたインテリジェンス。
  • DB移行、サービスの再起動などの一連のスクリプトを実行するためのフック。
  • 必要に応じて手動でロールバックします。
3
leenasn