2016-08-09 10 views
0

PHPアプリケーションのデプロイメントアプリケーションを作成しましたが、これは実際には3つの環境(dev、rc、prod)を管理する簡単なPHPページです。
このページは、最後のコミットに関する情報と各環境についての情報を取得し、開発者がタグを使用して環境のバージョンを変更できるようにします。
バージョンのタグを使用していくつかのアプリケーション(github、packagistなど)が見えましたが、問題が発生しています。
以前は、SVNを使用していましたが、それは非常に簡単で高速でしたので、私はGitに不満を感じています。
私はいくつかのプロジェクトにgitlabとgithubを使用しています。

まず、(1〜6秒)だけgitのリモート要求が非常に遅くなることを注意してください
単純なデプロイメントアプリケーションを作成する際のトラブル

が最後についての情報は、これらの情報を取得するには
をコミット取得し、私はDEV環境をフェッチする必要がありますその後、私はやっている git --no-pager show --name-status --format="__TOKEN__%n%H%n%T%n%P%n%d%n%an%n%ae%n%aD%n%cn%n%ce%n%cD"
ランダムな__TOKEN__を使用して結果を解析していますが、それ以前にもっと情報を追加することはできますが、気にしません。
だから、結果は次のようになります。

___DATA-57a988c31bbf2___ 
b4041b95c0221fe211ea74110a421842f625f2c8 
2287ccb797fc886055a5f4afc56aa90d7dcf4a4e 
d1c618e0f50783efff209ba6c0752d55f14bd241 
(HEAD, v0.1.7.2, origin/master, origin/HEAD, master) 
Loenix 
[email protected] 
Mon, 8 Aug 2016 15:09:44 +0200 
Loenix 
[email protected] 
Mon, 8 Aug 2016 15:09:44 +0200 

これが働いているが、私はそれを毎回フェッチする必要があります。

環境に関する情報も同じ方法で取得しています。

リスト・バージョン(タグ)
さて、私は名前と日付ですべてのバージョンを一覧表示する必要があるので、私はgit for-each-ref --sort=taggerdate --format "%(tag)|%(taggerdate)" refs/tags | sort -V
をやっている私は、結果として取得しています:

v0.1.5|Mon Jun 6 22:14:18 2016 +0200 
v0.1.6|Mon Jun 6 22:47:02 2016 +0200 
v0.1.7.1|Mon Aug 8 13:55:59 2016 +0200 
v0.1.7.2|Mon Aug 8 15:10:02 2016 +0200 
v0.1.7|Mon Aug 8 13:36:12 2016 +0200 

これはソートされていませんよく

  1. git checkout v0.1.7.2このアップデート現在のバージョンの新しいものに:環境

    変更バージョンは私は現在、2つの解決策を見つけます。問題は、私が作者を使用しているとき、composer.lockがローカルで変更され、gitがエラーを返すときです。

  2. git reset --hard v0.1.7.2これは、フォルダ内のすべてのものを置き換える...

は、私はそれを無視してcomposer.lockエラーを修正することができます。

環境がマスターやタグで分岐する可能性があり、環境のタグ(バージョン)を効率的に識別できないため、バージョンを操作する際に問題が発生します。

私はタグをキャッシュしていますが、この方法によって、私のページがロードするために、5〜10秒かかります...

あなたはトラブルを解決するために私を助けることができますか?いくつかのアドバイスをありますか? 私はそれを別の方法で行うべきだと思いますか? シンプルな既存のデプロイメントアプリケーションを使用することもできますが、良いアプリケーションは見つかりませんでした。

PS:すべてのコマンドは、debian/ubuntu OS上でsystem()PHP関数を使用して実行されます。

+0

なぜシステムエラーが発生する傾向がありますか()? –

+0

@ M.I。これは出力を表示しますが、これはexec()よりもうまく動作していますが、これは問題を引き起こしていません。 – Loenix

答えて

0

Loenix、私はあなたの場合、最善の方法は、専用のソフトウェアを使用することだと思います。 buddy.works。サーバーごとに別々のデプロイメント環境を作成することができます(彼らはBuddyのパイプラインと呼ばれます)+アプリケーション自体は軽量で非常に使いやすいです。 system()

マニュアル展開は、それはあなたは、execを試してみましたが、コマンド出力の最後の行だけを返し硬く、

関連する問題