Jenkinsを使用して、テスト環境と運用環境に展開したいと思います。そのためには、ssh/scpなど、目的の環境のサーバーに接続する必要があります。
最良の方法は何か知りたいです。
Jenkins-Deploy-Plug-inやJenkins Publish over SSH Pluginなど、これを行うプラグインがいくつか見つかりました。前者には多くの問題があり、実稼働環境への展開にはあまり信頼できません。2番目の問題では、展開ごとに手動で行うグローバル構成を変更する必要があります。
これを解決する方法はありますか?たぶん、いくつかのスクリプトやプラグインがありますか?
私が現在持っている唯一のアイデアは、ジェンキンスを使ってサーバーに接続し(おそらくSSHプラグインを使用して)、そこで希望する環境に接続するスクリプトを実行することです。しかし、それは2つの接続です。それは本当に必要ですか?もっと簡単な方法を期待しています。
ヒントをありがとう。
次の手順をお勧めします。
1つのシェルスクリプト(jenkinsサーバーのどこかに保存されている)がすべてを実行します。基本的に、スクリプトはビルドアーティファクトのscpを実行してからサーバー(ssh)に接続し、デプロイに必要なすべてのタスクを実行します(メンテナンスページのセットアップ、現在のアプリのバックアップ、新しいアプリのデプロイなど)。
Jenkinsサーバーには、少なくとも2つのジョブがあります。
この「ワンクリック展開」を達成するために「特別な」ジェンキンスプラグインは必要ありません。 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"
SSHを使用すると、環境のセキュリティが低下します
、トラブルシューティングは非常に困難です。
リモートマシンにJenkins-Slaveをインストールすることをお勧めします
そしてスレーブでジョブを実行してテストを実行します。
スレーブはサーバーによって監視され、多くのトラブルを軽減します
接続の管理。
ビルドが正常に終了すると、リモートジョブをトリガーできます
そしてそのビルドのアーティファクトを渡します。
(最初のジョブでアーティファクトを共有ドライブに保存することもできます
そしてそれらのアーティファクトの場所を次のジョブに渡します)。
こちらをご覧ください:
理想的には、展開に Fabric または Capistrano のようなものを使用し、これらのスクリプトをJenkinsから呼び出す必要があります。私はCapistranoをRuby on Railsおよび非Rubyアプリケーションにも広く使用しています。最大の利点は次のとおりです。