GitLab CI 覚書
node_modules
などをジョブ間で使いまわす
cache使わずにジョブ実行前に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
のいずれかのオプションはつけないとエラーになった。
runner version 16.6.0
最初にstage prepare
の単一のジョブで依存関係のインストールなどを行い、
次のstage test
ないで複数のジョブを走らせた。testステージのジョブはGIT_CLEAN_FLAGS
で依存関係をインストールしたディレクトリは消さないように実行した。
意図したとおりに動作すればtestステージすべてのジョブでテストが成功するはずが、一つのジョブでしかテストが成功しなかった。
各ジョブのファイルを確認したところ全ステージでインストールしたパッケージが存在しなかった。
依存関係が存在しているジョブは全ステージと同じenvironment名だったので、別Environmentになると状況が引き継がれない??
回避策としてartifacturesを有効にした
アンカーとextends
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:
次のジョブに環境変数を渡す
build-job:
stage: build
script:
- echo "BUILD_VARIABLE=value_from_build_job" >> build.env
artifacts:
reports:
dotenv: build.env
test-job:
stage: test
script:
- echo "$BUILD_VARIABLE" # Output is: 'value_from_build_job'