SW/Git

Git : Push를 사용하여 코드 배포 방법 : 예제, 구현

얇은생각 2020. 7. 12. 07:30
반응형

Git : Push를 사용하여 코드 배포 방법 : 예제, 구현

 

이 튜토리얼에서는 스테이징 또는 프로덕션 환경에 코드를 배포하는 가장 쉬운 방법에 대해 알아봅니다.

과거에는 FileZilla와 같은 FTP 클라이언트를 사용하는 것이 일반적이었지만, SCP, rsync 또는 배포 도구와 같은 코드를 보다 신뢰할 수 있는 방법으로 배포했기 때문에 이 클라이언트를 사용하는 것이 일반적입니다.

코드를 배포하는 데 도움이 되는 가장 일반적인 도구로는 Anable, Capistrano, Beanstalk, Deploy가 있습니다.

하지만 Git 후크를 사용하여 코드를 배포할 수 있습니다.

즉, Git 푸시만 하면 코드를 배포할 수 있습니다.

 

 

git push production master

 

이 포스팅의 목표는 위의 명령을 사용하여 마스터의 코드를 프로덕션 서버에 배포입니다.

 

 

필수 조건

시작하기 전에 프로덕션 서버를 사용할 준비가 되어 있고 서버에 GIT가 설치되어 있으며 코드가 GIT 저장소를 사용하는 로컬 개발 환경이 있다고 가정해야 합니다. 

프로덕션 서버를 빨리 생성해야 한다면 DigitalOcean을 추천합니다. 

DigitalOcean은 매우 빠른 서버를 가지고 있고 한 달에 5달러부터 매우 저렴합니다. 

또한 프로덕션 서버에서는 SSH 키 쌍을 올바르게 설정하여 명령을 사용하여 서버에 로그인할 수 있는지 확인해야 합니다.

ssh root@xxx.xxx.xxx.xxx

 

 

Todo

프로덕션 서버에 배포 폴더를 생성합니다.

프로덕션 서버에 빈 Git 저장소를 생성합니다.

서버에 포스트 수신 GIT 후크를 추가합니다.

운영 서버에 원격 리포지토리를 추가합니다.

프로덕션 서버로 푸시합니다.

 

 

프로덕션 서버에 배포 폴더를 생성

먼저 SSH를 통해 프로덕션 프로덕션 서버에 로그온해야 합니다.

ssh root@xxx.xxx.xxx.xxx

 

 

로그인한 후 리포지토리에서 사용할 폴더를 만들 수 있습니다.

 

cd /var > mkdir repo && cd repo

 

 

Bare Git Repository를 생성

프로덕션 서버에 빈 Git 저장소를 생성하면 이 저장소에 코드를 넣을 수 있습니다.

 

mkdir site.git && cd site.git 
git init --bare

 

site.git 폴더 내부에는 이제 빈 git 리포지토리가 있습니다.

이렇게 하면 리포지토리에 후크를 추가하여 리포지토리에 푸시된 코드의 작업 폴더를 설정할 수 있습니다.

 

 

서버에 GIT 후크를 추가

다음 코드를 사용하여 코드가 푸시될 때 실행할 사후 수신 후크를 만듭니다.

 

sudo nano /var/repo/site.git/hooks/post-receive

 

 

이 파일 내에서 코드의 작업 디렉토리(가상 호스트의 문서 루트)를 설정한 다음 리포지토리에서 작업 디렉토리로 코드를 강제로 체크아웃해야 합니다.

#!/bin/sh 
git --work-tree=/var/www/website --git-dir=/var/repo/site.git checkout -f

 

 

Composer 설치와 같은 사후 배포 작업을 실행하려면 이 파일 끝에 이러한 명령을 추가할 수 있습니다.

 

 

Change Permissions

파일을 실행할 수 있도록 사후 수신 파일에 대한 권한을 변경해야 합니다.

> sudo chmod +x post-receive

 

 

원격 리포지토리를 로컬로 추가

로컬 작업 복사본 디렉토리 내에 원격 리포지토리를 추가하고 리포지토리의 이름을 특정 환경으로 지정해야 합니다.

cd ~/path/to/working-copy/ 
git remote add production ssh://root@xxx.xxx.xxx.xxx/var/repo/site.git 
git remote add staging ssh://root@xxx.xxx.xxx.xxx/var/repo/site.git

 

 

코드 배포

로컬 환경에서 원격 리포지토리에 액세스할 수 있으므로 이제 git 푸시를 사용하여 환경에 코드를 배포할 수 있습니다.

git push production master

 

 

마스터만 배포

준비 환경에서는 모든 개발 분기를 배포할 수 있지만 프로덕션 분기에는 마스터 분기만 배포하도록 액세스를 제한할 수 있으므로 수신 후 파일에서 다음 코드를 사용할 수 있습니다.

#!/bin/bash
TARGET="/var/www/website"
GIT_DIR="/var/repo/site.git"
BRANCH="master"

while read oldrev newrev ref
do
    # only checking out the master (or whatever branch you would like to deploy)
    if [[ $ref = refs/heads/$BRANCH ]];
    then
        echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
        git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f
    else
        echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
    fi
done

 

반응형