我的本地Gitlab CE Docker容器包含Subgit。重新启动Gitlab容器时,Subgit同步也应自动启动。
我的解决方案源自Dockerhub上gitlab / gitlab-ce的原始Dockerfile。在原始的Dockerfile中,添加了一个SSH守护程序,并在runit的控制下进行了设置。
我对Subgit做了同样的事。在 / opt / gitlab / sv / subgit 下是我的runit资源,通过设置指向 / opt / gitlab / service 目录的软链接来启用子标记。但是当启动Gitlab Container时,软链接被删除,因此runsvdir忽略了我的Subgit runit文件。手动启用软链接后,runsvdir会成功启动Subgit同步。
如何保持软链接并分别启用Subgit的自动启动?
这是关于Subgit和runit的Dockerfile的一部分:
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" )"