cron을 사용하여 Gitlab 리포지토리를 웹 서버 측에 반영
시험에 cron을 사용하여 WEB 서버의 갱신을 할 수 있었으므로 메모로서 남겨 둡니다. 서버 주위는 초보자입니다.
규모가 큰 것이나 프로덕션 환경은, CI라든지 제대로 사용하는 편이 좋다고 생각합니다.
그렇다면 앞으로 공부하고 싶다고 생각합니다.
(이번에는 정적 개발 환경을 상정하여 생각했습니다)
이번에는 Gitab 리포지토리에서 소스 제어를 하고, cron으로 WEB 서버도 갱신하는 구조를 만들었습니다.
cron은 5분 간격을 두었습니다.
다음과 같은 느낌이 듭니다.
서버 준비
웹 서버에 액세스하여 개인 및 공개 키 만들기
대상 서버에서 Gitlab의 리포지토리를 clone 할 수 있도록 개인 키와 공개 키를 만듭니다.
ssh ◯◯@hogehoge.net // sshでログイン(ログインユーザはsudo権限が必要)
sudo -s // rootユーザに切り替える
su - アカウント // rootユーザからアカウントに切り替える
대상 서버의 계정으로 전환한 후 키를 만듭니다.
$ cd ~/
$ mkdir .ssh (.ssh ディレクトリが作成されていない場合、作成済みの場合は cd ~/.ssh/)
$ ssh-keygen(鍵の保存先は、「.ssh/id_rsa」パスフレーズは空「Return」)
$ cat ~/.ssh/id_rsa.pub (表示されるキーをコピー)
작성한 공개키를 Gitlab에 등록
복사한 키를 Gitlab 리포지토리에 등록하기
Setting → Deploy Keys → New Deploy Keys
WEB 서버 측에 리포지토리를 clone
리포지토리 측에서는 파일을 올린 상태로 한다(업되었는지 확인하기 위해)
먼저 리포지토리를 저장할 디렉터리로 이동합니다.
자신은 공개 디렉토리가 아닌 사용자 디렉토리 바로 아래에 clone을했습니다.
※공개 서버에 그대로 clone 해 버리면/.git/가 생겨 버립니다. --mirror 의 옵션을 붙여 clone 해 공개 디렉토리에 checkout 하는 형태로 했습니다. ( 참고 기사대로 )
$ cd [リポジトリを格納するディレクトリ]
$ git clone --mirror [リポジトリURL] [オプション:作成するリポジトリ名]
WEB 서버 측에 쉘 스크립트 설치
우선, 쉘 스크립트를 작성합니다.
쉘 스크립트는 pre-push.sh라는 이름으로 저장소의 후크에 넣었습니다.
※ 작성 사용자는 WEB 서버의 계정
$ cd [--mirrorで作成したリポジトリのパス]
$ vi hooks/pre-push.sh
pre-push.sh#!/bin/sh
cd [--mirrorで作成したリポジトリのパス]
git fetch
GIT_WORK_TREE=/home/dev-ideacd git checkout -f master
작성한 스크립트에 실행 권한을 부여합니다.
$ chmod +x pre-push.sh
웹 서버 측에 cron 설정
루트 사용자로 crontab을 설정하십시오.
# crontab -u [WEBサーバのアカウント] -e
5분마다 cron이 달리도록 설정
*/5 * * * * [--mirrorで作成したリポジトリのパス]/hooks/pre-push.sh
참고 사이트
ssh ◯◯@hogehoge.net // sshでログイン(ログインユーザはsudo権限が必要)
sudo -s // rootユーザに切り替える
su - アカウント // rootユーザからアカウントに切り替える
$ cd ~/
$ mkdir .ssh (.ssh ディレクトリが作成されていない場合、作成済みの場合は cd ~/.ssh/)
$ ssh-keygen(鍵の保存先は、「.ssh/id_rsa」パスフレーズは空「Return」)
$ cat ~/.ssh/id_rsa.pub (表示されるキーをコピー)
복사한 키를 Gitlab 리포지토리에 등록하기
Setting → Deploy Keys → New Deploy Keys
WEB 서버 측에 리포지토리를 clone
리포지토리 측에서는 파일을 올린 상태로 한다(업되었는지 확인하기 위해)
먼저 리포지토리를 저장할 디렉터리로 이동합니다.
자신은 공개 디렉토리가 아닌 사용자 디렉토리 바로 아래에 clone을했습니다.
※공개 서버에 그대로 clone 해 버리면/.git/가 생겨 버립니다. --mirror 의 옵션을 붙여 clone 해 공개 디렉토리에 checkout 하는 형태로 했습니다. ( 참고 기사대로 )
$ cd [リポジトリを格納するディレクトリ]
$ git clone --mirror [リポジトリURL] [オプション:作成するリポジトリ名]
WEB 서버 측에 쉘 스크립트 설치
우선, 쉘 스크립트를 작성합니다.
쉘 스크립트는 pre-push.sh라는 이름으로 저장소의 후크에 넣었습니다.
※ 작성 사용자는 WEB 서버의 계정
$ cd [--mirrorで作成したリポジトリのパス]
$ vi hooks/pre-push.sh
pre-push.sh#!/bin/sh
cd [--mirrorで作成したリポジトリのパス]
git fetch
GIT_WORK_TREE=/home/dev-ideacd git checkout -f master
작성한 스크립트에 실행 권한을 부여합니다.
$ chmod +x pre-push.sh
웹 서버 측에 cron 설정
루트 사용자로 crontab을 설정하십시오.
# crontab -u [WEBサーバのアカウント] -e
5분마다 cron이 달리도록 설정
*/5 * * * * [--mirrorで作成したリポジトリのパス]/hooks/pre-push.sh
참고 사이트
$ cd [リポジトリを格納するディレクトリ]
$ git clone --mirror [リポジトリURL] [オプション:作成するリポジトリ名]
우선, 쉘 스크립트를 작성합니다.
쉘 스크립트는 pre-push.sh라는 이름으로 저장소의 후크에 넣었습니다.
※ 작성 사용자는 WEB 서버의 계정
$ cd [--mirrorで作成したリポジトリのパス]
$ vi hooks/pre-push.sh
pre-push.sh
#!/bin/sh
cd [--mirrorで作成したリポジトリのパス]
git fetch
GIT_WORK_TREE=/home/dev-ideacd git checkout -f master
작성한 스크립트에 실행 권한을 부여합니다.
$ chmod +x pre-push.sh
웹 서버 측에 cron 설정
루트 사용자로 crontab을 설정하십시오.
# crontab -u [WEBサーバのアカウント] -e
5분마다 cron이 달리도록 설정
*/5 * * * * [--mirrorで作成したリポジトリのパス]/hooks/pre-push.sh
참고 사이트
# crontab -u [WEBサーバのアカウント] -e
*/5 * * * * [--mirrorで作成したリポジトリのパス]/hooks/pre-push.sh
Reference
이 문제에 관하여(cron을 사용하여 Gitlab 리포지토리를 웹 서버 측에 반영), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/redamoon/items/cf806971b278775bd5b7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)