Git Hook을 사용하여 서버를 자동으로 배포하는 방법은 무엇입니까?

2329 단어
로컬 파일을 원격 서버에 자동으로 배치하는 명령줄
최근에 개인 사이트를 만들었는데 서버에 올릴 때 매번 업데이트된 내용을 FTP나 다른 파일 전송 방식으로 하나씩 서버에 올리는 것은 정말 번거롭다. 더 좋고 더 빨리 배치를 완성할 수 있는 방법이 없을까?
Git Hooks(Git 갈고리)를 사용하면 이 정도는 할 수 있습니다.Git Hooks가 뭐예요?'Git는 특정한 중요한 동작이 발생할 때 사용자 정의 스크립트를 터치할 수 있다'. 예를 들어 pre-commit, post-receive 등은 이러한 동작 이전이나 이후에 정의된 스크립트를 실행한다.자동 배치를 하려면 이것post-receive을 사용해야 한다.
자동 배치를 설정하기 전에 비밀번호 없이 원격 서버에 로그인하도록 설정해야 합니다. 구체적인 조작은 이 글을 참고하십시오.[SSH Key 암호 없이 서버에 로그인]

자동 배포


전체 프로세스는 대개 서버에 Git 창고(repository)를 만들고 로컬 파일 사용git push을 이 창고에 업로드하면 Git 창고에 업로드된 파일을 서버에서 웹 페이지가 실행되는 폴더로 자동으로 복사합니다.
  • 서버에서 Git 웨어하우스 만들기
  • git init --bare website.git
    
  • 생성post-receive 파일
  • cd website.git
    vim hooks/post-receive
    

    다음 내용을 post-receive 파일에 복사
    #!/bin/bash -l
    GIT_REPO=/home/git/website.git
    TMP_GIT_CLONE=/tmp/website
    PUBLIC_WWW=/var/www/zhuangweiming.me/html
    rm -rf ${TMP_GIT_CLONE}
    git clone $GIT_REPO $TMP_GIT_CLONE
    cd $TMP_GIT_CLONE
    rm -rf ${PUBLIC_WWW}/*
    cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}
    

    코드 설명: rm -rf ${TMP_GIT_CLONE} 임시 경로 안의 내용 비우기 git clone $GIT_REPO $TMP_GIT_CLONE Git 창고의 내용을 임시 경로로 복제하기 rm -rf ${PUBLIC_WWW}/* 서버 웹 저장소 폴더 비우기 cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW} 임시 경로의 파일을 서버 웹 저장소 경로로 복사하기
  • post-receive파일에 대한 권한 부여
  • chmod +x hooks/post-receive
    
  • 로컬 Git 원격 웨어하우스 추가, 테스트
  • git remote add deploy ssh://[email protected]/home/git/website.git
    git push deploy
    

    지정된 Git branch 자동 배포


    특정 Branch를 배포하려면 위의 두 번째 섹션에서 post-receive 의 파일 내용을 다음으로 바꿉니다.
    #!/bin/bash -l
    while read oldrev newrev ref
    do
      branch=`echo $ref | cut -d/ -f3`
      if [ "master" == "$branch" ] || [ "production" == "$branch" ]; then
        GIT_REPO=/home/git/website.git
        TMP_GIT_CLONE=/tmp/website
        PUBLIC_WWW=/var/www/zhuangweiming.me/html
        rm -rf ${TMP_GIT_CLONE}
        git clone $GIT_REPO $TMP_GIT_CLONE
        cd $TMP_GIT_CLONE
        unset GIT_DIR
        git checkout $branch
        rm -rf ${PUBLIC_WWW}/*
        cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}
      fi
    done
    

    좋은 웹페이지 즐겨찾기