(メモ)Jenkins/GitLabをお試しする環境をDockerで構築する
最近、JenkinsとGitLabの連携機能とか、Jenkins Blue Oceanを試したりしています*1。 で、検証環境を手元にほしいのですが、GitLabの構築めんどくさそうだったので、Dockerだったら楽なんじゃないかなという*2。 docker-composeとかを使うところなのかもしれないですが、素朴なので手でコマンドを叩いてやってみました。
便利だったのでメモ。今更感アリアリですが。
ネットワークの作成
今回二つのコンテナを準備してそれぞれを名前解決したいわけですが、そのためにはネットワークを作るといいらしい。
参考:
ふむふむ、やってみましょう。
% docker network create --driver bridge gitlab 【ID文字列】 % docker network inspect gitlab [ { "Name": "gitlab", "Id": "【ID文字列】", "Created": "2017-12-20T05:45:30.1592604Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": {} } ]
Jenkinsの起動
さっき作ったネットワーク gitlab
を使って構築するようにします。コンテナ内の /var/lib/jenkins
はコマンド実行時のディレクトリ直下の jenkins-master
というディレクトリにマウントするようにしました。コマンドは公式ドキュメントを参照。
-name
で名前つけてあげないと、コンテナ間の名前解決できないようなので。
docker run --detach -p 8080:8080 -p 50000:50000 -v `pwd`/jenkins-master:/var/jenkins_home --name jenkins --net=gitlab jenkins/jenkins:lts
GitLabの起動
こっちも公式ドキュメントを参照。
docker run --detach \ --hostname gitlab.example.com \ --publish 443:443 --publish 10080:80 --publish 10022:22 \ --name gitlab \ --restart always \ --volume `pwd`/gitlab/config:/etc/gitlab \ --volume `pwd`/gitlab/logs:/var/log/gitlab \ --volume `pwd`/gitlab/data:/var/opt/gitlab \ --net=gitlab \ gitlab/gitlab-ce:latest
接続確認
手抜きで片方向だけ。
docker exec -it jenkins /bin/bash jenkins@3c121fdb1b14:/$ ping gitlab PING gitlab (172.18.0.3): 56 data bytes 64 bytes from 172.18.0.3: icmp_seq=0 ttl=64 time=0.386 ms 64 bytes from 172.18.0.3: icmp_seq=1 ttl=64 time=0.122 ms ^C--- gitlab ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.122/0.254/0.386/0.132 ms jenkins@3c121fdb1b14:/$ exit
いけてますね。
GitLabの外部名変更
http://gitlab
になってればいいらしいので。
% docker exec -it gitlab /bin/bash root@gitlab:/# vi /etc/gitlab/gitlab.rb (編集) root@gitlab:/# exit
## GitLab URL ##! URL on which GitLab will be reachable. ##! For more details on configuring external_url see: ##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab external_url 'http://gitlab'
こんな感じで書き換えて docker restart
すればうまくいきました。
Jenkins側の名前設定
こちらはGUIでポチポチ変えるだけ。[Jenkinsの管理] > [システムの設定] > [Jenkinsの位置] にて http://jenkins:8080
にします。「リバースプロキシの設定がおかしいようです」と言われますが無視して大丈夫です。
できた!
JenkinsにGitLabプラグイン入れて簡単な設定をしてみたらちゃんと二つのコンテナ間でやりとりできているようです。
ホストマシンをうっかりリブートしてコンテナが止まっていても docker restart
すればさくっと再起動するので楽です。
ただ、手元の環境だとコンテナ2個上げるとホストマシン側が目に見えて遅くなるのが少し困りどころですね。まあ、我慢できなくはないですけど。