mkdocs で作成したサイトを GitLab Pages で公開していたのですが、これをブランチ毎にディレクトリを分けて公開するようにしました。

基本的には、キャッシュを有効にするだけで可能です。
各ブランチでの成果物も一緒に Pages で公開したいため、キャッシュのキーは固定値にします。
以下、 .gitlab-ci.yml
の抜粋です。
pages:
stage: build
script:
- mkdocs build
- rm -rf public/${CI_COMMIT_REF_NAME}
- mv site public/${CI_COMMIT_REF_NAME}
artifacts:
paths:
- public
cache:
# ブランチ毎に別のキャッシュを利用したい場合はブランチ名をキーにするが、
# 今回は全ブランチのビルド結果も一緒に公開したいため、キーは全ブランチで共通の固定値にする
key: "common-key"
#key: "$CI_COMMIT_REF_NAME"
paths:
- public
site
ディレクトリが mkdocs の成果物が入っているディレクトリですが、これを public/ブランチ名
に配置しています。
注意点
デフォルトでは、保護されたブランチと保護されていないブランチではキャッシュが共有されないため、この場合はプロジェクトの設定変更が必要です。
これを知らずに何度試してもキャッシュが共有されずはまっていました・・・。
変更する設定は以下です。
- サイドメニューより、
Settings
>CI/CD
を選択 General pipelines
を開くUse separate caches for protected branches
のチェックボックスをオフにするSave changes
をクリックして保存