2

私のローカル Gitlab CE Docker コンテナには Subgit が含まれています。Gitlab コンテナーが再起動されると、Subgit 同期も自動的に開始されます。

私のソリューションは、Dockerhubの gitlab/gitlab-ce の元の Dockerfile から派生しています。元の Dockerfile では、SSH デーモンが追加され、rinit の制御下に設定されています。

Subgitでも同じことをしました。/opt/gitlab/sv/subgitの下に私の runit リソースがあり、subgit は/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 の実行ファイルです。実際の G​​itlab グループとプロジェクト名は置き換えられます。

#!/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" )"
4

0 に答える 0