CIにはjenkinsを使用しています。深夜のビルドを取得します。メールまたは通知を受け取ったらすぐにビルドのデプロイを自動化する方法はありますか?任意の提案をいただければ幸いです。
Jenkinsのビルドからデプロイするメカニズムの1つは、アーティファクトを使用して最新のバイナリを既知の場所に配置し、(秘密鍵で保護された)sshを使用する新しいジョブを開始することです(コンパイル/テストフェーズが成功した場合のみ)。またはscpを使用してアーティファクトをテスト/本番マシンにコピーしてから、インストールを実行します。
一部の自動テストには、同様のメカニズムを使用しています。トリッキーな部分は、シェルコマンドでsshキーを処理することなので、次のようにします。
eval `ssh-agent -s`
ssh-add ~/.ssh/your_private_key_here
その秘密鍵がJenkinsサーバー上にあり、公開鍵がプッシュしようとしているサーバー上にある限り、残りの部分でssh
およびscp
コマンドを使用できます。問題のサーバーで機能を実行するためのスクリプト。
ターゲットサーバー側からプロセスを完全に実行する場合は、サーバー上で実行される小さなスクリプトを作成して、Jenkinsサーバービルドのアーティファクトディレクトリ内の新しいファイルをチェックできます。 latest
パスのおかげで、これを行うためにビルド番号を知る必要はありません。特定のパスを見つけるには、Jenkinsサーバーにログインして(少なくとも1つのアーティファクトを保存したら)、使用しているプロジェクトを見つけて、最後に成功したアーティファクト、これはアーティファクトの最後に成功したビルドへのURLになります。これらのURLは一定のままであり、常に最新の成功したビルドを指しているため、プロジェクト名またはサーバー名が変更されない限り、URLが変更されることを心配する必要はありません。
[〜#〜] note [〜#〜]:ここには、テストする展開以外の目的でこれを行う場合にトラックを運転できるセキュリティホールがあります。最初のメカニズムの場合、ビルドサーバーにはターゲットへのアクセス(潜在的に破壊的)を与えるssh
キーがあります。 2番目のメカニズムの場合、Jenkinsサーバーが自分に適したバイナリのみを提供することを信頼しています。ただし、テスト環境、Push to Stageなどの場合、これらの手法は適切に機能します。
これらは私が知っている方法です:
Jenkins構成では、Mavenゴールの実行後にwindows/Shellコマンドを実行できます。私の場合、Linux上にGlassfishがあり、sshを介してデプロイメントのasadminパラメーターを実行します。サーバーにインスタンスをインストールしました。次のプロセスは、インスタンスの停止、アプリのデプロイ解除、アプリのデプロイ、インスタンスの開始(コマンド)です。
このプラグインはwar/earファイルを受け取り、ビルドの最後に実行中のリモートアプリケーションサーバーにデプロイします。現在サポートされているコンテナのリストは次のとおりです。
Tomcat 4.x/5.x/6.x/7.x JBoss 3.x/4.x Glassfish 2.x/3.x
https://wiki.jenkins-ci.org/display/JENKINS/Deploy+Plugin
デプロイプラグインはこれに基づいています。 pom.xmlを編集して、mavenでデプロイするという目標を実行する必要があります。
Tomcatでは、jenkinsとTomcatを使用した構成:
'Apache-Tomcat-8.5.5\webapps\manager\META-INF\context.xlmファイルを更新します。 Valueタグのコメントを解除します。サーバーを再起動します
context.xmlファイル
Before :
<Context antiResourceLocking="false" privileged="true">
<Valve className="org.Apache.catalina.valves.RemoteAddrValve"
allow="192\.168\.0\.9|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>
After change :
<Context antiResourceLocking="false" privileged="true" >
</Context>
for auto deployment: go to 'Apache-Tomcat-8.5.5\conf\context.xml' and add antiResourceLocking="true" in 'Context' tag