2011-11-22 13 views
5

ftpやsshを使用してWebプロジェクトを展開する方法を知りました。Jenkins:ファイルの削除や移動を含むFTP/SSH展開

私たちは現在、これを処理できる自己製作システムを持っていますが、私はJenkinsに切り替える必要があります。

パブリッシングプラグインがあり、ビルド成果物のアップロードに関してはうまく機能していることは知っています。しかし、ファイルの削除や移動はできません。

私の問題に関して何かヒント、ヒント、アイデアはありますか?

答えて

2

Publish Over SSHプラグインを使用すると、sshを使用してリモートサーバーにコマンドを送信できます。これは非常にうまく動作し、新しいバージョンを展開する前にいくつかのファイルを移動/削除していますが、この方法を使用しても何の問題もありませんでした。

+0

ありがとう、それはおそらく私のsshサーバで私を助けるでしょう。しかし、移動/削除するには? Gitはそれをよく知っていますが、これをデプロイのワークフローにどのように統合するのでしょうか? – 4eyes

+0

移動/削除に関心のあるファイルが既にgitにある場合は、デプロイメントサーバでレポをクローンし、gitコマンドラインを使用してssh経由の公開を使用して変更を取得できます。これは、コンパイルまたはチェックする必要がない静的ファイルがある場合は、展開が必要な場合に適した方法です。あなたがソースコードと静的ファイルのために別々のreposを持っているなら、おそらく最もうまくいくでしょう。 – pushy

+0

ありがとうございます。私たちのプロジェクトは、PHP(TYPO3)ベースのソフトウェアを開発する際に、すべて「静的」なファイルです。 gitを使って移動/削除されたファイルを取得できることは知っていますが、実際には私たち自身の単純なphingベースの配備システムで行っています。私はちょうど驚いています。きれいで効率的なftp/sshデプロイメントをカバーするプラグインはないようです。私は、他の企業がどのようにWebプロジェクトを展開しているのだろうと思っていますが、FTPを使用していませんか?または、ライブサーバ上でsshやgitを使ってカスタム化されたホスティングをもっと高価にすることはできますか? – 4eyes

1

アイテムの削除と移動を処理する最も簡単な方法は、 'Publish over'の拡張子の1つを使用して新しいリリースを展開する前に、サーバー上のすべてを削除することです。私は実際には、展開されたバージョンがあなたが望むバージョンであることを知る唯一の方法だと言います。より多くのバージョニングシステムスタイルの動作が必要な場合は、バージョニングシステムを使用するか、rsyncを使用してその一部をカバーする必要があります。

ご要望がきわめて厳しい場合は、独自の条項を作成して削除をマークし、別のスクリプト(Liquibaseなどを使用してデータベースを変更する場合と同じように)を実行することができます。

ところで:私は、 'publish over ...'拡張を使用してビルドした後にライブサイトを自動的に更新しないことをお勧めします。実際にライブサイトを更新したい場合は、Promoted Builds Pluginに依存してほぼ完全に自動化されていますが、少し安全性が増します。

+0

あなたのアドバイスをいただきありがとうございます、私はプロモートビルドのプラグインを確認します。とにかく、ちょっとCSSを変えたり、スクリプトのバグを修正したりして、完全なウェブサイトをアップロードする必要があるのはどうして私には意味がありません。どういうわけか、私はこの問題を抱えている唯一の人だと思うし、他の人が自らのウェブサイトプロジェクトを賢明なホスティング(ssh/git)に配備するか、自動配備を使用していない。 – 4eyes

0

単純なlftpミラースクリプトを使用して、Jenkinsのビルドアクションとして、削除されたファイルを削除し、変更をリモートFTPサーバーにアップロードするという簡単な解決策を思いつきました。 Lftp Manual Page

簡潔に言うと、jenkinsユーザーディレクトリ〜/ .netrcに設定ファイルを作成し、FTP資格情報を入力します。

machine ftp.remote-host.com 
login mySuperSweetUsername 
password mySuperSweetPassword 

次に「Execのシェルは、」スクリプトにlftpを実行するためのアクションを構築する追加lftpのスクリプトdeploy.lftpを作成し、.gitレポ

set ftp:list-options -a 
set cmd:fail-exit true 
open ftp.remote-host.com 
mirror --reverse --verbose --delete --exclude .git/ --exclude deploy.lftp --ignore-time --recursion=always 

のルートにドロップします。

lftp -f deploy.lftp 

lftpのスクリプトが

  • ミラーます:
  • 逆変更されたすべてのファイルをコピーします。リモートホストにローカルファイルを押してください。通常のミラーがリモートホストからローカルにプルされます。
  • は詳細:ファイルがビルドログにどこコピーされたものについてはすべてのノートをダンプ
  • 削除:
  • は除外Gitのレポでもはや存在し、リモートのファイルを削除します.gitディレクトリまたはデプロイを公開していません。 lftpスクリプト。
  • ignore-time:ファイル作成時間に基づいて公開しません。あなたがこれを持っていない場合、私のケースでは、git repoの新しいクローンがファイルのタイムスタンプを更新して以来、すべてのファイルが公開されました。それでもまだかなりうまく動作しており、ファイル内に1つのスペースを追加して修正されたファイルであっても、異なるものとして識別されてアップロードされています。
  • 再帰:フォルダに依存するのではなく、すべてのファイルを分析して、ファイルが変更されている可能性があるかどうかを判断します。私たちはタイムスタンプを無視しているので、これは技術的には必要ではありませんが、とにかくここにあります。

私はどのようにWordPressサイト用に私はを説明した記事を書きました。私はFTP経由でのみアクセスできました。この記事では、FTPからGitに同期する方法と、Jenkinsを使用してFTPに構築して展開する方法について説明します。このアプローチは完璧ではありませんが、機能します。変更されたファイルのみをアップロードし、gitリポジトリから削除されたホストからファイルを削除します(その逆もあります)。

関連する問題