LoginSignup
4
5

More than 5 years have passed since last update.

cronを使いGitlabリポジトリをWEBサーバ側に反映させる

Last updated at Posted at 2015-07-02

Web hookとか色々ありますが、うまくいかなかったりで悪戦苦闘していました。。
試しにcronを使ってWEBサーバの更新ができたのでメモとして残しておきます。サーバ周りは初心者です。

規模が大きいものや本番環境は、CIとかきちんと使ったほうがいいと思います。
そのへんは、これから勉強していきたいなと思います。
(今回は、静的な開発環境を想定して考えました)

今回はGitabリポジトリでソース管理をして、cronでWEBサーバも更新する仕組みを作りました。
cronは5分おきにしました。

以下のような感じになります。

flow.jpg

サーバー準備

  • gitコマンドがインストールされている

WEBサーバにアクセスして秘密鍵と公開鍵を作成

対象のサーバから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に登録

deploy.jpg

コピーしたキーをGitlabのリポジトリに登録をする

Setting → Deploy Keys → New Deploy Keys

WEBサーバ側にリポジトリをcloneさせる

リポジトリ側では、ファイルをあげた状態にする(アップされたか確認するため)

まずは、リポジトリを格納するディレクトリに移動します。

自分は、公開ディレクトリではないユーザディレクトリの直下にcloneをしました。

※公開サーバへそのままcloneしてしまうと/.git/ができてしまいます。--mirrorのオプションをつけてcloneし公開ディレクトリへcheckoutする形にしました。(参考記事通り

$ cd [リポジトリを格納するディレクトリ]
$ git clone --mirror [リポジトリURL] [オプション:作成するリポジトリ名]

WEBサーバ側にシェルスクリプトを設置する

まずは、シェルスクリプトの作成を行います。

シェルスクリプトはpre-push.shという名前で、リポジトリのhooksの中に入れました。

※作成ユーザは、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

WEBサーバ側にcronを設定する

rootユーザでcrontabの設定を行います.

# crontab -u [WEBサーバのアカウント] -e

5分おきにcronが走るように設定

*/5 * * * * [--mirrorで作成したリポジトリのパス]/hooks/pre-push.sh

参考サイト

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5