我本地的 Gitlab CE Docker 容器包含了 Subgit。当 Gitlab 容器重新启动时,Subgit 同步也应该自动启动。
我的解决方案来源于Dockerhub上gitlab/gitlab-ce的原始Dockerfile。在原始的 Dockerfile 中添加了一个 SSH 守护进程,并在 runit 的控制下进行设置。
我对 Subgit 做了同样的事情。在/opt/gitlab/sv/subgit 下是我的 runit 资源,通过设置指向/opt/gitlab/service目录的软链接来启用 subgit。但是当 Gitlab Container 启动时,软链接被删除,因此 runsvdir 忽略了我的 Subgit runit 文件。当手动启用软链接时,runsvdir 正在成功启动 Subgit 同步。
如何保持软链接并分别启用Subgit的自动启动?
这是 Dockerfile 中关于 Subgit 和 runit 的部分:
RUN mkdir -p /opt/gitlab/sv/subgit/supervise && \
mkfifo /opt/gitlab/sv/subgit/supervise/ok && \
ln -s /opt/gitlab/sv/subgit /opt/gitlab/service/subgit
COPY ./runit_subgit_run /opt/gitlab/sv/subgit/run
COPY ./runit_subgit_finish /opt/gitlab/sv/subgit/finish
RUN chmod a+x /opt/gitlab/sv/subgit/run /opt/gitlab/sv/subgit/finish
这是 runit 的运行文件。真实的 Gitlab 组和项目名称被替换。
#!/bin/sh
exec 2>&1
exec /bin/sh -c "( subgit install \
"/var/opt/gitlab/git-data/repositories/<group_1>/<project_1>.git" && \
subgit install \
"/var/opt/gitlab/git-data/repositories/<group_2>/<project_1>.git" && \
subgit register \
"/var/opt/gitlab/git-data/repositories/<group_1>/<project_1>.git" && \
subgit register \
"/var/opt/gitlab/git-data/repositories/<group_2>/<project_1>.git" )"