連続的統合のためのUbuntuサーバ上でのGitサーバの設定


おいそこ!👋 現代のdev慣行の精神で、私は私のために生命セーバーをハイライトするためにこのブログを書いています.私がバックエンド開発者として出発したとき、私はHerokuを使いました(そして、時折それを使用します)、あなたは、接続されたGITリポジトリにプッシュするときはいつでも、自動的に構築して、あなたのアプリを配備するこの驚くべき方法を持ちます.私の仕事はどのように自分の仕事を私はAWSやデジタルオーシャンにベアボーンマシンを使用するように運転を開始したときに私は常に手動で私のGitレポからプルし、展開する前に私のサーバー上でそれを構築するサーバーにsshする必要があります.怠惰な視点から来て、これは私がアプリを変更するたびに行う準備ができていない狂気の仕事だったと自動化の精神は私の耳に鳴り始めた.
私の頭に入った言葉は“git server”でした!私は、それがものであって、幸運であるかどうか見るためにgoogledしました.私は、最終的にGitthubがそれをすることができた方法を考え出しました.それで、私自身のGitサーバーを作るために、私自身の旅行に乗り出しました.
私がその獣を征服した次のいくつかの段落の詳細
よく、あなたはスターターのためにインストールされるGitを必要とします、それで、最初に行ってください.この記事では、あなたのUbuntuサーバにSSHを設定していると仮定します.

ステップ1


まず最初にやるべきことは、サーバにgit裸のリポジトリを作成することです.
# incase you already have a codebase
git clone --bare remote_repo_url.git server_repo.git

# but if you wanna start from scratch you could just use init
mkdir server_repo.git && cd server_repo.git
git init --bare
裸のgitリポジトリは通常のリポジトリのようではありません.これは実際のソースコードではなく、Gitオブジェクトを格納します.典型的には.git 通常のリポジトリのフォルダ.その後、実際のソースコードを格納するディレクトリをサーバーに作成する必要があります.
mkdir server_source

ステップ2


さて、あなたのUbuntuサーバにssh accessを持っているマシンから、裸のリポジトリをGitリモートとして追加します.
git remote add production <username>@<machine>:server_repo.git

# You can now push to this remote
git push production master

# Or pull from it
git pull production master
basically server_repo.git Ubuntuのサーバー上のあなたの裸のrepoの場所にする必要がありますusername and machine あなたのログインの詳細はsshでログインするときのようです.

ステップ3


次に、このすべてを可能にする機能です.gitフック!ここでは過去について書きました.


それをチェックアウトしてください.それで本質的に我々が必要とするフックはpost-receive フック.
名前が意味するように、それは(ポスト-)Gitオブジェクトがリモートから受け取られた後に実行されます.
以下は典型的ですpost-receive ファイル
#! /bin/bash

# we have to set GIT_DIR env var to the bare repo
WORK_TREE=$HOME/server_source
GIT_DIR=$HOME/server_repo.git

# next up we have to checkout from our bare repo
git --work-tree=$WORKTREE --git-dir=$GIT_DIR checkout -f

# from here on we can do any other processes like building and 
# deploying the app
cd $WORK_TREE
docker-compose up --build -d
今、我々がする必要があるすべては、我々のGitフックにこのファイルを加えることです.我々のベアレポでserver_repo.git 新しいファイルを作成する必要がありますpost-receive の下にhooks フォルダにして、上に上記を格納します.
また、Linuxで実行可能にする必要がありますchmod .
chmod a+x post-receive
この後、我々は行くのが良いです!いつでも我々のローカルから我々の生産にプッシュして、それはpost-receive スクリプトと我々のアプリを展開します.
何か質問があれば、コメント欄で待っています🏌️‍♂️🏌️‍♂️