WEBサービスを作っている時に、プロジェクトソースコードをGITで管理している人も少なくないでしょう。
そして、その環境でテストをクリアした時に、本番環境にPUSHするというのがどうしてもうまくできず、デプロイをするやり方を調べてみたので、手順を書いておきます。
今までどうやっていたのか?
普通ですが、本番環境には、SFTPを使ってアップデートすることが多かったです。
これでは、GITの恩恵を受けられませんね。
そう思って巻き戻しできるように、本番ディレクトリは、シンボリックリンクで切り替えをして、問題発生時には、すぐに切り戻しできるようにしていました。
このやり方は、意外と便利で、悪くはないんですが、今時はGITを使ってデプロイをするという拘りのエンジニアも少なくないので、意地でもGITデプロイにこだわってみます。
GIT pullであればできた。
本番環境に直接PUSHをするのではなく、GITリポジトリサーバー(Githubのようなサーバー環境)に一度PUSHし、本番環境でリポジトリサーバーからpullすれば、さほど問題なく本番更新ができ、過去バージョンも保持できます。
ちなみに、PULLは怖いので、Fetch+mergeが良いという事は、わかっているので、うかつにpullはしないのですが、ここでは敢えてpullという表現にしています。
ちょっと長めの記事ですが、よくわからない人は下記リンクを見てご理解ください。
https://qiita.com/forest1/items/db5ac003d310449743ca
どうしても直接PUSHしたい時
これは、サーバー環境でpullをするのではなく、開発環境やリポジトリサーバー側から本番環境にPUSHするというのはどうだろう?
これはPUSHを受け取るサーバーは、bareモードになっている必要があり、本番環境は、通常bareモードになっていないので、一旦切り替えをする事で可能になります。
手順
1. bareモードになっているかどうかの確認(サーバー環境で実行)
$ git config --get-all core.bare
2. bareモードへの切り替え
$ git config --bool core.bare true
3. 開発環境などから本番環境へPUSH
$ git push origin master
4. サーバー側でHEADがズレてしまうのでファイルを更新する。
$ git reset --hard HEAD
5. サーバーのbareモードをオフするのを忘れないように。
$ git config --bool core.bare false
最後に
かなり強引ですが、本番環境でのpushでデプロイする方法は上記で可能になります。
でも、bareの切り替えなど非常にめんどくさいですね。
そして、GITによるconflictトラブルなどは、結構発生しているようなので、やはりリポジトリ環境でのテストで本番はシンボリックリンクで行うのが手堅いように思いますが、どうなんでしょう?
全てバッチ化して自動にするという手もありますが、それはそれで、トラブルになったケースもよく聞くので、この辺は、運用する人の管理方法によって、親和性の高いのを選ぶのがいいでしょうね。
0 件のコメント:
コメントを投稿