インターネット非接続環境のCentOS 7にJenkinsとGitLabをインストール

メモ。アプリケーションの開発環境をインターネット非接続にするというのは今日び基本的なところで間違っていると思うがなんつーか非生産性を追求したい文化というのはどこにでも残っているもので、そんな不幸な現場で日々切磋琢磨する哀れな同士に贈る。

OSはインターネット非接続(オフライン, disconnected, isolated, air gapped, etc...)、CPUは2コア、メモリは4GB、HDDは20GB、OSはCentOS 7.9.2009。
CentOSはデフォルトの最小限イントールで、IPアドレスを設定してssh接続可能になっている状態からスタート。なおIPアドレスはOSインストール後にコンソールでnmtuiコマンドで設定する派。
便宜上、IPアドレスは 192.168.0.116、ホスト名はdevops.example.comで説明。

端末としてWebブラウザとssh/scpクライアントが利用可能なWindowsとかのPCが必要。
その端末でも良いが、インターネットに接続していて、必要なファイルをダウンロードするための環境は必要。GitLabはdockerイメージをsaveして使用するため、インターネット接続のあるdocker環境が別途必要。


## ■Jenkinsをインストールする
Jenkinsは、どういうわけかそれをDockerコンテナとして構築したい向きが私の周りには多くうんざりするのだけど、Jenkinsのジョブでdocker buildしたい場合は、Dockerコンテナ上でDockerエンジンにアクセスするためのある種特別な構成が必要なため素直にホストOS上のJavaで動かした方が平和な場合が多い。

###・Javaをインストール
１．(仮想マシンなりにISOが接続された状態で）CentOSのインストールDVDをマウント。

```
# mount /dev/cdrom /media
```

２．repoファイルを作る。

```
# rm -f /etc/yum.repos.d/*
# cat > /etc/yum.repos.d/media.repo << EOF
[InstallMedia]
name=CentOS
gpgcheck=0
enabled=1
baseurl=file:///media
EOF
```

３．javaをインストールする。

```
# yum install -y java-1.8.0
```

###・Jenkinsをインストール
１．手元のPCにJenkinsをダウンロードする。
https://github.com/jenkinsci/jenkins/releases
から。今回は「jenkins-2.274-1.1.noarch.rpm」。67.3MB

２．CentOSサーバーにJenkinsをアップロードする。

３．Jenkinsをインストールする。

```
# rpm -i jenkins-2.274-1.1.noarch.rpm
```

４．Jenkinsを起動する。

```
# systemctl enable jenkins
# systemctl start jenkins
# firewall-cmd --add-port=8080/tcp
# firewall-cmd --add-port=8080/tcp --permanent
```

なお、Jenkinsのデフォルトポート番号(8080)を変えたい場合は、「/etc/sysconfig/jenkins」ファイルを修正する。

５．Jenkinsの初期パスワードを入手する。

```
# cat /var/lib/jenkins/secrets/initialAdminPassword
```

###・Jenkinsの初期構成
１．WebブラウザでJenkinsにアクセスする。
http://192.168.0.116:8080

２．「Unlock Jenkins」の画面で、先に取得した初期パスワードを入力し、「Continue」。

３．「Offline」の画面で「Skip Plugin Installation」をクリック。

４．「Create First Admin User」の画面で、admin、passwordを入力し、「Save and Continue」。

５．「Instance Configuration」の画面では、デフォルトのまま、「Save and Finish」。

６．「Jenkins is ready!」の画面で、「Start using Jenkins」をクリック。
上手くすればここで「Welcome to Jenkins!」と画面が表示される（Webブラウザの設定が日本語優先なら、「Jenkinsへようこそ！」）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/752772c2-ccbe-d7de-a6bf-7a01b46fc61d.png)

たまに真っ白い画面のみが表示されてダッシュボードにアクセスできないことがある。
その場合も「http://192.168.0.116:8080/manage」と、Jenkinsの管理画面にはアクセスできるのではないかと思うので、それで凌ぐ。「systemctl restart jenkins」とJenkinsを再起動したら回復したことも。良くわからん。
プラグイン？WebのGUIからbashスクリプトが起動出来りゃ大抵満足でしょ？


##■GitLabをインストールする
###・GitLabのダウンロード
１．インターネット接続のあるDockerエンジンでGitLab-CEのイメージをpullしてsave。
https://hub.docker.com/r/gitlab/gitlab-ce/tags
今回は13.7.3-ce.0。tarファイルはだいたい2.1GB。

```
# docker pull gitlab/gitlab-ce:13.7.3-ce.0
# docker save gitlab/gitlab-ce:13.7.3-ce.0 > gitlab.tar
```

###・Dockerエンジンのインストール
１．Docker CEをダウンロードして、CentOSサーバーにアップロードする。
今回必要rpmは以下。
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
containerd.io-1.2.5-3.1.el7.x86_64.rpm
docker-ce-18.09.5-3.el7.x86_64.rpm
docker-ce-cli-18.09.5-3.el7.x86_64.rpm
docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm

http://mirror.centos.org/centos/7/extras/x86_64/Packages/
container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm

ちなみにだが、記事更新時点でDockerはdocker-ce-20.10.2-3.el7.x86_64.rpmが最新だが、rootless-extrasのオフラインインストールがクソ厄介のため諦めた。


２．Dockerをインストールする。

```
# yum install -y libcgroup container-selinux
# yum install -y container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm
# rpm -i containerd.io-1.2.5-3.1.el7.x86_64.rpm docker-ce-18.09.5-3.el7.x86_64.rpm docker-ce-cli-18.09.5-3.el7.x86_64.rpm docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm
# systemctl enable docker
# systemctl start docker
```

###・GitLabのインストール
https://docs.gitlab.com/omnibus/docker/

１．先にダウンロードしたgitlab.tarをCentOSサーバーにアップロードする。

２．Dockerイメージをロードする。

```
# docker load -i gitlab.tar
```

３．GitLabを起動する。

```
# docker run --detach \
  --hostname devops.example.com \
  --publish 443:443 --publish 80:80 \
  --name gitlab \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab:Z \
  --volume /srv/gitlab/logs:/var/log/gitlab:Z \
  --volume /srv/gitlab/data:/var/opt/gitlab:Z \
  gitlab/gitlab-ce:13.7.3-ce.0
# firewall-cmd --add-port=80/tcp
# firewall-cmd --add-port=80/tcp --permanent
```

###・GitLabの初期構成
１．external_urlを修正する。

```
# docker exec -it gitlab sed -i 's/# external_url .*/external_url "http:\/\/devops.example.com\/"/' etc/gitlab/gitlab.rb
```

２．GitLabを再起動する。

```
# docker restart gitlab
```

なお、「docker logs -f gitlab」コマンドで起動中のgitlabが構成されている様のログを参照することが出来る。上手く動かない際に何かわかることがあるかもしれない。内部的に、起動後にChef?で自身を再構成しており、初回起動時は数分と結構時間が掛かる。

３．端末の /etc/hosts ファイル（または C:\Windows\system32\drivers\etc\hosts ）を修正し、以下の行を追加して保存。

```
192.168.0.116 devops.example.com
```

４．WebブラウザでGitLabにアクセスする。
http://devops.example.com

５．初回アクセス時に管理者のパスワード設定を求められるので、パスワードを入力して「Change your password」。

６．サインイン画面で、ユーザー名を「root」、パスワードを先に設定した文字列を指定して「Sign in」。上手くすれば「Welcome to GitLab」と表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/6a5c8116-9e92-43a1-ff40-acb2e816cc6f.png)

まずはこんなものか。
できれば次はGitLabのcommitをWebHookでJenkinsのJobをrunするところまで。ルー大柴か。

(追記)
Qiita - GitLabからWebhook飛ばしてJenkinsのJobを実行する。プラグイン0で
https://qiita.com/rk05231977/items/8b87b091eb6d45a370e1

(追記 2021/01/09)
結構View数を稼ぐので記事をメンテ。オリジナルの発行は2019/05/05。