自宅の環境でGitea/Droneを構築していたが、CI時にGiteaからリポジトリをCloneできない。ドメインに接続できないと。自宅のLANからWAN側のIPにはアクセスできないので、内部DNSとしてUnboundを構築した。
Initialized empty Git repository in /drone/src/.git/
+ git fetch origin +refs/heads/master:
fatal: unable to access 'http://gitea.whalem.net/whalem/drone_ci_test.git/': Failed to connect to gitea.whalem.net port 80: Operation timed out
DNSを構築したので、Drone Runnerへ設定したが、同じようにFailed to connect to gitea.whalem.net port 80: Operation timed out
となる。Pingしてみると。
$ ping -c 4 gitea.whalem.net
PING gitea.whalem.net (<WAN_IP>): 56 data bytes
64 bytes from <WAN_IP>: seq=0 ttl=254 time=0.890 ms
あらら。Runnerに設定したけど、Pipelineの処理は別コンテナが作成され実行されるので、Runnerに設定しても意味ないと。Droneが作成するコンテナへDNSの設定方法を調べたけど、あまり良さそうな解決策は見つからなかったので、下の方法をとる。
/etc/docker/daemon.json
に内部DNSのアドレスを追加する。daemon.json
は無ければ新しく作成する。
{
"dns": ["CUSTOM_DNS", "8.8.8.8"]
}
daemon.json
を編集後にDocker daemonを再起動する。
$ systemctl restart docker.service
これで、コンテナは内部DNSを参照する。あとは、いつも通りに。
Initialized empty Git repository in /drone/src/.git/
+ git fetch origin +refs/heads/master:
From http://gitea.whalem.net/whalem/drone_ci_test
* branch master -> FETCH_HEAD
* [new branch] master -> origin/master
+ git checkout 7595bbbcdbb63575efda8795510067620ebbd148 -b master
Already on 'master'
ヘアピンNATできるルータが欲しい…。
ネットワーク設定
Droneが作成するコンテナのネットワークを指定したい場合は、DRONE_RUNNER_NETWORKSを設定する。
service:
server:
...
runner:
...
environment:
- DRONE_RUNNER_NETWORKS=mynet_bridge