Gitは、ソフトウェア開発の分野で最も人気のあるバージョン管理システムです。オープンソースであり、2005年以降、Linus Torvalds(有名なLinuxの作成者)によって活発にメンテナンスされています。今日、驚くほど多くのソフトウェアプロジェクト(商用プロジェクトを含む)がバージョン管理にGitを使用しています。
Gitは分散型アーキテクチャに従っており、DVCS(分散型バージョン管理システム)の完璧な例となっています。Gitを使用すると、ローカルリポジトリとリモートリポジトリの両方を同時に管理できます。このガイドでは、VPSを使用してGitプロジェクトの自動デプロイを設定する方法を説明します.
前提条件
このガイドでは、1つのローカルリポジトリと、VPS上のリモートリポジトリを使用します。ローカルリポジトリは変更をリモートリポジトリにプッシュします。リモートリポジトリから、変更を beta または live ブランチにプッシュできます。これを実現するには、まずいくつかの前提条件を満たす必要があります。
- ローカルマシンとリモートサーバーの両方で、オペレーティングシステムとしてUbuntuを使用していること。このガイドでは、Ubuntuサーバーの構成とセットアップ方法.
- 両方のマシンがGitで構成されていること.
VPSへの安全な接続を確立するために、SSHを使用します。幸いなことに、Gitはリモートリポジトリに接続するためのプロトコルとしてもSSHをサポートしています。このガイドでは、Ubuntuでリモートサーバーに接続するためのSSHの設定.
VPSの設定
リモートサーバーでは、次の構成を行います。
- 本番ディレクトリ: /var/www/dummy-domain.com
- サーバーリポジトリ: /var/repo/site.git
ローカルマシンから、GitはアップデートをVPSリポジトリにプッシュします。VPSリポジトリから、Gitが本番ディレクトリに自動的にプッシュするために使用するスクリプトを設定します。また、 beta リリースのためのリポジトリを設定することも可能です。
-
リポジトリの作成
VPSに接続し、リポジトリの場所を作成します。
|
1 2 3 |
cd /var sudo mkdir -pv repo && cd repo sudo mkdir -pv site.git && cd site.git |
次に、Gitリポジトリを初期化します。
|
1 |
sudo git init --bare |
ここで、フラグ --bare は、ソースファイルが存在せず、バージョン管理コンポーネントのみが存在することを表します。
-
フック
次に、リポジトリのフックを設定します。すべてのGitリポジトリには、hooks という名前のフォルダが含まれています。これには、フックやさまざまなカスタムアクションのテンプレートとなるサンプルファイルが含まれています。
Gitの公式ドキュメントによると、フックには3つのタイプがあります。
- pre-receive: サーバーがプッシュリクエストを受信するとすぐに実行されます。
- post-receive: プッシュリクエストが完了したときに実行されます。
- update: pre-receiveに似ています。ただし、ブランチごとに1回実行されます。
リポジトリの場所から、 ls コマンドを実行します。
|
1 |
ls -l |
現在のディレクトリを hooks:
|
1 |
cd hooks/ |
次に、 post-receive スクリプトを作成します。
|
1 |
sudo nano post-receive |
スクリプト内に次のコードを入力します。ディレクトリの場所は適宜変更してください。
|
1 2 |
#!/bin/sh git --work-tree=/var/www/dummy-domain.com --git-dir=/var/repo/site.git checkout -f |
ファイルを保存してエディタを閉じます。ファイルを実行可能ファイルとして設定します。
|
1 |
sudo chmod +x post-receive |
これで、プッシュが完了するたびに、Gitは post-receive スクリプトを参照し、それに応じてファイルを配置します。
ローカルマシンの設定
リモートマシンの準備が整い、Gitプロジェクトのアップデートを受け入れることができるようになりました。次に、VPSをリモートGitサーバーとして使用するようにローカルリポジトリを設定します。
サンプルのGitプロジェクトディレクトリを作成しましょう。
次に、リポジトリを初期化します。
|
1 |
sudo git init |
リポジトリのリモートパスを宣言する必要があります。ここでは、リモートの場所を live ブランチとして参照します。次に、以下のコマンドを実行します。
|
1 |
sudo git remote add live ssh://<remote_username>@<remote_ip_address>/var/repo/site.git |
テストしてみましょう。プロジェクトディレクトリにシェルスクリプトを追加しました。
次に、ファイルをプロジェクトに追加してコミットを実行します。
|
1 2 |
sudo git add . sudo git commit -m "random commit" |
次のコマンドで、プロジェクトを liveサーバーにプッシュします:
|
1 |
sudo git push live master |
GitはSSHを使用してVPSに接続します。SSH接続がパスワードを使用するように設定されている場合、Gitは認証パスワードを要求します。
ベータリポジトリ
プロジェクトを一度にデプロイしない場合はどうすればよいでしょうか? おそらく、ベータディレクトリ内でのさらなるテストが必要になるかもしれません。これまでに説明した方法を使用して、VPSに別のブランチを作成できます。これは ベータブランチと呼ばれます。
-
VPSでのベータブランチの設定
まず、VPS用のディレクトリを作成する必要があります。VPSに接続し、 /var/www:
|
1 2 |
cd /var/www sudo mkdir beta |
次に、 ベータブランチとして機能するGitリポジトリが必要です:
|
1 2 |
cd /var/repo sudo mkdir -pv beta.git && cd beta.git |
リポジトリを初期化します:
|
1 |
sudo git init --bare |
以前と同様に、 post-receiveスクリプトを実装します:
|
1 2 |
cd hooks sudo nano post-receive |
その後、次のコードを入力します:
|
1 2 |
#!/bin/sh git --work-tree=/var/www/beta --git-dir=/var/repo/beta.git checkout -f |
ファイルを保存してエディタを閉じます。 post-receiveを実行可能ファイルとしてマークします:
|
1 |
sudo chmod +x post-receive |
-
ローカルマシンへのベータリポジトリの追加
これで、ローカルリポジトリに ベータリポジトリを追加する準備が整いました。ローカルのプロジェクトディレクトリ内から、次のGitコマンドを実行します:
|
1 |
sudo git remote add beta ssh://<username>@<remote_ip_address>/var/repo/beta.git |
これで完了です!ローカルリポジトリにベータリモートリポジトリが設定されました。変更をプッシュしてみましょう:
|
1 2 3 |
sudo git add . sudo git commit -m "beta version" sudo git push beta master |
-
VPSでベータから本番(Live)へ移行する
すべての変更が ベータリポジトリに蓄積されたとします。変更を liveリポジトリにプッシュするにはどうすればよいでしょうか?非常に簡単です。VPS上の ベータリポジトリ内で、ローカルの liveリポジトリを追加します。その後、単に ベータリリースを liveリポジトリにプッシュします。
VPSに接続し、次のコマンドを実行します:
|
1 2 |
cd /var/repo/beta.git sudo git remote add live ../site.git |
その後、 ベータリリースを liveにプッシュできます::
|
1 |
sudo git push live master |
最後に
このガイドでは、GitプロジェクトのリモートリポジトリとしてVPSを設定し、使用する方法を説明しました。VPSは、複雑なプロセスなしで最新のコードやファイルを自動的にデプロイできます。また、複数の開発チーム間のコラボレーションの中心としても機能します。
Gitを使用すると、自動デプロイのためのシンプルな仕組みを構築できます。ただし、適切なプロジェクト管理のためには、GitLabなどの使用をお勧めします。次のガイドでは、VPSへのGitLabのインストールとデプロイ方法を紹介しています(複数のプロジェクトを管理する場合)。また、Ubuntu 20.04でGitLab継続的インテグレーション(CI)パイプラインをセットアップする方法.
ハッピーコンピューティング!















コメント
コメントはまだありません。最初のコメントを投稿しましょう。