初めてのGitLab（RHEL7）

今更ながらGitLabのインストールから最低限の使い方までを記載してみました。
探してみると超初心者にもわかるGitLabの情報って意外と少ないのかなって感じました。
筆者が今回GitLabに触れるまでは「Gitでプッシュ」って言われてもさっぱりわからずいつもGoogle博士に聞いてました。
その状態でいきなり使って！って言われて泣きそうになりました。
ズバリ今回の目標はGITについて何にも知らない人がとりあえず使えるようになるまでを考えて投稿しました。
願わくば筆者と同じ局面に至った人の蜘蛛の糸になるように！

#####■環境説明
RHEL7を使って作業をします。サーバ1台にクライアント1台構成になります。これも元々Windowsばっかりだった筆者が地獄見た経験からです(泣)
6と7変わりすぎ！！！！

| マシン | Server | Client |
|:-:|:-:|:-:|:-:|
| OS | RHEL7 | RHEL7 
| hostname | gitserver | gitclient
※はじめはAWSで｢t2.micro｣でやってみたんですがインストールはできてもまともに動いてくれませんでした。どうやらメモリー2GB以上が推奨みたいです。しかし悲しいかな。。。Smartは有料orz
　ってことで今回はAWSは使ってません！！

***
■用語説明

| 名称 | 内容 |
|:-:|:-:|
| マスターデータ | 一番重要なファイル。 |
| リモートリポジトリ | ファイルやディレクトリの変更の状態を記録する場所 |
| ローカルリポジトリ | ローカル（作業端末）上のリポジトリ |
| プッシュ | ローカルリポジトリで変更した内容をリモートリポジトリへあげる（要はアップする） |
| プル | プッシュの逆。リモートリポジトリの変更内容をローカルリポジトリへ反映させる（要はダウンロード） |
| ブランチ | マスターデータから枝分かれさせ開発を行う（こいつのおかげでローカルリポジトリとリモートリポジトリがぶつからなくなる） |
| マージ | 複数のブランチを結合しマスターデータに反映させる |

***
#####■事前準備----------------------------------------
◇yumリポジトリにGitlabを追加

```
# vi /etc/yum.repos.d/gitlab.repo
```

```irc:gitlab.repo
[gitlab-ce]
name=gitlab-ce
baseurl=https://packages.gitlab.com/gitlab/gitlab-ce/el/7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[gitlab-ce-source]
name=gitlab-ce-source
baseurl=https://packages.gitlab.com/gitlab/gitlab-ce/el/7/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
```

◇Postfix,Opensshの設定
[Postfix][Openssh]はGitlabの前提ソフトウェアになります。
RHEL7の場合、標準で入っています。またOpensshのサービスも標準で起動しています。よって確認はpostfixの起動のみとなります。

```irc:postfix起動
# systemctl enable postfix
# systemctl start postfix
```

######■導入----------------------------------------

◇Gitlab-ceのインストール
yumでやった方が楽です

```irc:gitlab-ceインストール
# yum -y install gitlab-ce
```


猫が出てきた！！
yum終了後ブラウザを起動させて`http://<IP>`にアクセス！！
・・・・・・・つながらん...(TT)
なぜと思い調べてみると・・・
`Firewall`。。。
こんなんで30分悩んだ自分に腹が立って停止しました！！！


◇Firewalldをいらない派

```irc:firewalld停止
# systemctl status firewalld
# systemctl stop firewalld
# systemctl disable firewalld
```

◇Firewalldいる派

```irc:firewalld設定
# firewall-cmd --permanent --add-service=http
# systemctl reload firewalld
```

してしてFirewallを停止させた後気を取り直して
`http://<ip>`にアクセス！！・・・・つながった！！
ってことで次！！


◇Git インストール
　マスターデータを格納しているサーバで実行します。ファイルのアップロードとかに必要になります。
今回はマスターデータを格納している｢gitserver｣とマスターデータに編集を加えるローカルリポジトリ用の｢gitclient｣の1台に入れます。手順は以下のコマンドを2台のサーバで実行します。

```irc:gitインストール
# yum -y install git
```

◇WEBブラウザよりパスワード変更

```irc:初期パスワード
Username: root
Password: 5iveL!fe

![02A.png](https://qiita-image-store.s3.amazonaws.com/0/150678/28f2a264-3415-70b7-42b0-ea4d32300071.png)

```
![01A.png](https://qiita-image-store.s3.amazonaws.com/0/150678/8a6a7567-d282-3540-c0fd-5d64e0da22e1.png)

◇変更したパスワードでログイン

```irc:初期ログイン情報
Username: root
Password: <password>
```

![02A.png](https://qiita-image-store.s3.amazonaws.com/0/150678/24a8c5d4-b328-4e73-8549-1bf1fdf7ac8b.png)

◇ログイン画面確認

![03A.png](https://qiita-image-store.s3.amazonaws.com/0/150678/fd554bcf-3346-f7ce-03ae-15991c6b080b.png)

***

######■設定----------------------------------------
◇プロジェクト作成
前回の「◇ログイン画面確認」から引き続きます

```irc:ブラウザ操作[welcomtogitlab]
1.[New Project]を押す。
```

```irc:ブラウザ操作[Projects]
1.プロジェクト名入力・・・・・・｢testproject｣
2.説明文入力・・・・・・・・・・｢テスト用のプロジェクト｣
3.Visibility Level・・・・・・｢Private｣ 
4.｢Create Project｣をクリック
```

```irc:VisibilityLevel内容
Pribate  : アクセス権を明示的に指定
Internal : ログイン済みのユーザのみ閲覧可能
Public   : だれでもアクセス可能
```


![04A.png](https://qiita-image-store.s3.amazonaws.com/0/150678/7023a3ab-dd82-1a80-ac33-54500266585d.png)

◇プロジェクト確認
現段階ではプロジェクトができただけでまだ何もありません。

![05A.png](https://qiita-image-store.s3.amazonaws.com/0/150678/7b6d7773-55ee-faf6-e5b5-81b531e57e69.png)

◇作成したプロジェクトにリポジトリ作成
　マスターデータが存在しているサーバにて作業を行います
　今回は以下のコマンドを実行しマスターデータの作成をしています。

```irc:マスターデータ作成
# mkdir -p testproject/test1/test11
# mkdir -p /work/testproject/test1/test12
# mkdir -p /work/testproject/test1/test13
# echo def_input >> /work/testproject/test1/test11/file111
# echo def_input >> /work/testproject/test1/test11/file112
# echo def_input >> /work/testproject/test1/test12/file121
# echo def_input >> /work/testproject/test1/test12/file122
```

◇Git初回設定
｢~/.gitconfig｣に接続するユーザとメールアドレスを記載します。
ユーザはGitLab上に存在するユーザになります。またメールアドレスですがこれは必要なければ適当な名前で平気です。必要な場合はちゃんと使えるメールアドレスを指定してください。（今回は適当にやってます）

```irc:git初期設定
# git config --global user.name "root"
# git config --global user.email "root@hoge"
# cat ~/.gitconfig
[user]
        name = root 		//　user.nameで指定したアカウント
        email = root@hoge　　　 //　user.emailで指定したアカウント
#
```

◇Git Clone
　現時点では空状態のプロジェクトに管理するファイルとかディレクトリをアップします。（今回は｢/work/testproject｣になります)

`作業端末　：　gitserver`

```irc:リモートリポジトリ作成
# cd /work/testproject　　　　　　　　　　　　　　　　　//アップするディレクトリへ移動
# git init                                           //gitリポジトリの作成
# git remote add origin <GitURL>                     //リモートリポジトリの指定
# git add .                                          //変更対象のファイル等を指定する
# git commit -m "1st push"                           //変更状態の保存
# git push -u origin master                          //リポジトリアップロード
```

※gitURLはブラウザ上の｢project｣にあります

```irc:結果
ブラウザの[Repository]にファイルの確認ができる
```

![06A.png](https://qiita-image-store.s3.amazonaws.com/0/150678/387300a4-3123-c5d5-9146-389f29f8ad06.png)

◇ローカルリポジトリの作成(Clone)
　ファイルの編集を行うサーバにリモートリポジトリからダウンロードしてリモートリポジトリのクローンをします。
対象サーバは｢gitclient｣になります。

`作業端末　：　gitclient`

```irc:作業前確認:
# ls /work
#
```

```irc:ローカルリポジトリ作成
# git config --global user.name "root"
# git config --global user.email "root@hoge"
# cd /work　　　　　　　　　　　　　　　　　　　　　　　　　//ローカルリポジトリを作るパスに移動
# git clone <gitURL>                                    // リモートリポジトリからクローン
Username for 'http://hostname': root
Password for 'http://root@hostname':<パスワード>
```



```irc:作業後確認
# ls /work
testproject
```

```irc:結果
# 作業端末サーバのプロジェクトのリモートリポジトリがダウンロードされる
```

◇ローカルリポジトリにて編集したファイルをサーバにアップロードする
　クローンしたローカルリポジトリで編集したファイルをサーバにアップロード(Push)します。
　今回はローカルリポジトリにファイル(readme)を追加してreadmeをプッシュします。

`作業端末　：　gitclient`

```irc:作業前確認
# ls -la
合計 19
drwxr-xr-x. 6 root root   93 11月 30 14:50 .
drwxr-xr-x. 4 root root 4096 11月 30 14:49 ..
drwxr-xr-x. 8 root root 4096 11月 30 14:38 .git
-rw-r--r--. 1 root root   10 11月 30 14:38 file01
-rw-r--r--. 1 root root   10 11月 30 14:38 file02
drwxr-xr-x. 4 root root   32 11月 30 14:38 test1
drwxr-xr-x. 4 root root   32 11月 30 14:38 test2
drwxr-xr-x. 4 root root   32 11月 30 14:38 test3
#
```

```irc:ファイル編集作業
# echo Clientmessage >> /work/testproject/readme
```

```irc:作業後確認
# ls -la
合計 20
drwxr-xr-x. 6 root root   93 11月 30 14:50 .
drwxr-xr-x. 4 root root 4096 11月 30 14:49 ..
drwxr-xr-x. 8 root root 4096 11月 30 14:38 .git
-rw-r--r--. 1 root root   14 11月 30 14:50 readme	// 追加ファイル
-rw-r--r--. 1 root root   10 11月 30 14:38 file01
-rw-r--r--. 1 root root   10 11月 30 14:38 file02
drwxr-xr-x. 4 root root   32 11月 30 14:38 test1
drwxr-xr-x. 4 root root   32 11月 30 14:38 test2
drwxr-xr-x. 4 root root   32 11月 30 14:38 test3
#
```

```irc:ローカルリポジトリプッシュ
# git add .
# git commit -m "2nd push"
# git push origin master
Username for 'http://hostname': root
Password for 'http://root@hostname':
#
```

```irc:結果
ローカルリポジトリの編集結果がGitLabにアップロードされる
```

![07A.png](https://qiita-image-store.s3.amazonaws.com/0/150678/6711a2b2-ff3d-2cf5-ad30-9150de5a0e37.png)


◇GitLabの最新状態のリモートリポジトリをマスターデータに反映させる
　｢GitClient｣で編集し、プッシュした最新のリモートリポジトリを｢GitServer｣に反映させます(Pull)

`作業端末　：　gitserver`

```irc:作業前確認
# ls -la /work/testproject
合計 32
drwxr-xr-x  6 root root 4096 11月 30 14:28 .
drwxr-xr-x. 5 root root 4096 11月 30 12:36 ..
drwxr-xr-x  8 root root 4096 11月 30 14:30 .git
-rw-r--r--  1 root root   10 11月 30 12:04 file01
-rw-r--r--  1 root root   10 11月 30 12:04 file02
drwxr-xr-x  5 root root 4096 11月 30 12:02 test1
drwxr-xr-x  5 root root 4096 11月 30 12:03 test2
drwxr-xr-x  5 root root 4096 11月 30 12:03 test3
#
```
現時点では先ほどGitLabにプッシュした｢readme｣が反映されていません

```irc:マスターデータへの反映
# git pull origin master
Username for 'http://hostname': root
Password for 'http://root@hostname':<パスワード>
#
```


```irc:作業後確認
# ls -la /work/testproject
合計 33
drwxr-xr-x  6 root root 4096 11月 30 14:28 .
drwxr-xr-x. 5 root root 4096 11月 30 12:36 ..
drwxr-xr-x  8 root root 4096 11月 30 14:30 .git
-rw-r--r--  1 root root   10 11月 30 12:04 file01
-rw-r--r--  1 root root   10 11月 30 12:04 file02
-rw-r--r--  1 root root   14 11月 30 15:04 readme　　　　//ファイルが追加されている
drwxr-xr-x  5 root root 4096 11月 30 12:02 test1
drwxr-xr-x  5 root root 4096 11月 30 12:03 test2
drwxr-xr-x  5 root root 4096 11月 30 12:03 test3
#
```

```irc:結果
マスターデータに｢readme｣が反映された
```

***

######■まとめ
今回はGitLabのインストールからシンプルな使い方を記載しました。今回は何も知らない状態からとりあえず使える状態になるまでを目標においてやっていましたが実際にはもっと複雑な作業がたくさんあるんですよね。。。そこは筆者も勉強中です。