おがさわらなるひこのオープンソースとかプログラミングとか印刷技術とか

おがさわらなるひこ @naru0ga が技術系で興味を持ったりなんだりしたことをたまーに書くブログです。最近はてなダイアリー放置しすぎて記事書くたびにはてな記法忘れるのではてなブログに移行しました。

クリエイティブ・コモンズ・ライセンス
特に断りがない場合は、本ブログの筆者によるコンテンツは クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。

(メモ)Jenkins/GitLabをお試しする環境をDockerで構築する

最近、JenkinsとGitLabの連携機能とか、Jenkins Blue Oceanを試したりしています*1。 で、検証環境を手元にほしいのですが、GitLabの構築めんどくさそうだったので、Dockerだったら楽なんじゃないかなという*2。 docker-composeとかを使うところなのかもしれないですが、素朴なので手でコマンドを叩いてやってみました。

便利だったのでメモ。今更感アリアリですが。

ネットワークの作成

今回二つのコンテナを準備してそれぞれを名前解決したいわけですが、そのためにはネットワークを作るといいらしい。

参考:

qiita.com

ふむふむ、やってみましょう。

 % 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個上げるとホストマシン側が目に見えて遅くなるのが少し困りどころですね。まあ、我慢できなくはないですけど。

*1:何周遅れなんだよという気が自分でもしています。

*2:何周遅れなんだよという気が自分でもしていますAGAIN。