サーバレスアーキテクチャ

Gitlab pagesでsubmoduleの含むページを公開する

Gitlab Pagesで他のレポジトリ内容(git submodule)のデータを含むプログラムを公開する方法をまとめました。submoduleの更新方法や、submoduleがプライベートの時の対処方法も。

Submoduleの追加

まずは、ローカル上で普通にsubmoduleをレポジトリに追加します。

git submodule add レポジトリURL ディレクトリ

同期がされて、レポジトリ内に「.gitmodules」というファイルができているはずです。

.gitlab-ci.ymlに設定を追記

続いて、Gitlab Pages側の設定です。.gitlab-ci.ymlに下記の記述を追記します。

variables:
  GIT_SUBMODULE_STRATEGY: recursive

HUGOなどsubmoduleを使う前提のフレームワークの場合、公式.gitlab-ci.ymlテンプレートのこの記述がすでに入っていることがありますが、削除している場合は追記します。

このままコミットすればsubmoduleをpullしてビルドしてくれます。

Gitlab pagesのsubmoduleを更新する時

ここは「ファイルではなくコミットIDをトラックする」という、Git submoduleの仕組みのままなので、ローカル上でsubmoduleのアップデートを実行して、最新のコミットIDにすればOKです。

git submodule update --remote

最新にしたら、そのままリモートにプッシュしてビルドすれば最新になります。

参考:Git Submodules でサブモジュール内のリポジトリをリモートの master の最新版に追従する

submoduleがプライベートレポジトリの場合はどうするか?

submoduleで読み込んでいるレポジトリが非公開レポジトリ(プライベート)の場合、下記のようなエラーが発生してビルドが完了できません。

fatal: could not read Username for 'https://gitlab.com': No such device or address
fatal: clone of 'https://gitlab.com/xxx/yyy.git' into submodule path '/builds/xxx/yyy/zzz' failed

この場合は、一番簡単な例は、submoduleのレポジトリURLを、

https://ユーザー名:パスワード@gitlab.com/xxx/yyy.git

として登録すればOKです。

このケースだと、ユーザー名とパスワードを晒すことになるので、当該レポジトリは必ずプライベートにして、外部から絶対に見えなようにしておきましょう。


簡単にですが、Gitlab pagesでsubmoduleの含むページを公開する方法を見てきました。

外部のソースコードをプログラムに組み込む際には、submoduleは結構使うので、覚えておくと便利ですね。


価格は記載がある場合を除き、すべて税込みです。

この記事の関連キーワード

サーバレスアーキテクチャの記事