Open4

GitLab CI 覚書

えんぶんえんぶん

cache使わずにnode_modulesなどをジョブ間で使いまわす

ジョブ実行前にgit clean -ffdxで増分が削除されるので
variablesにGIT_CLEAN_FLAGSを設定して削除されないようにする

valiablesはglobalにも設定できるしjob単位で指定すればそのジョブの実行前にのみ作用する

# 複数指定できるしワイルドカードも使える
GIT_CLEAN_FLAGS: -ffdx -e .dir1 -e .dir2 -e *.jpg

# noneにするとcleanが行われない
GIT_CLEAN_FLAGS: none

何も指定しない場合はデフォルトで-ffdxのみ指定されてる。

  • -d: 再帰的に削除する
  • -x: 追跡してないファイル+ignoredされてるファイルを削除
  • -ff: 強制的に削除

最低でも-f -i -nのいずれかのオプションはつけないとエラーになった。

https://zenn.dev/masakura/articles/1ba1d9ec95cfad

https://docs.gitlab.com/ee/user/project/repository/managing_large_repositories.html#git-clean-flags

https://docs.gitlab.com/ee/ci/runners/configure_runners.html#git-clean-flags

https://git-scm.com/docs/git-clean

えんぶんえんぶん

runner version 16.6.0

最初にstage prepareの単一のジョブで依存関係のインストールなどを行い、
次のstage testないで複数のジョブを走らせた。testステージのジョブはGIT_CLEAN_FLAGSで依存関係をインストールしたディレクトリは消さないように実行した。

意図したとおりに動作すればtestステージすべてのジョブでテストが成功するはずが、一つのジョブでしかテストが成功しなかった。
各ジョブのファイルを確認したところ全ステージでインストールしたパッケージが存在しなかった。
依存関係が存在しているジョブは全ステージと同じenvironment名だったので、別Environmentになると状況が引き継がれない??

回避策としてartifacturesを有効にした

えんぶんえんぶん

アンカーとextends

https://docs.gitlab.com/ee/ci/yaml/yaml_optimization.html

yamlのAnchor使った場合、キーの重複があると上書きされる

When there are duplicate keys, the latest included key wins, overriding the other keys.

extendsの場合、hashはマージされるが配列は上書きされる

You can use extends to merge hashes but not arrays. The algorithm used for merge is “closest scope wins”. When there are duplicate keys, GitLab performs a reverse deep merge based on the keys. Keys from the last member always override anything defined on other levels. For example: