web-dev-qa-db-ja.com

Gitlab CIでパイプラインキャッシュをクリアする

パイプラインが完了した後、Gitlab CIでパイプラインキャッシュを無効化またはクリアすることは可能ですか?

俺の .gitlab-ci.ymlファイルには次のグローバルキャッシュ定義があります

cache:
  key: "%CI_PIPELINE_ID%"
  paths:
    - './msvc/Project1`/bin/Debug'
    - './msvc/Project2`/bin/Debug'
    - './msvc/Project3`/bin/Debug'

cache-key値は、各パイプラインが自身のキャッシュを維持する必要があることを指定します。これは正常に動作していますが、キャッシュファイルはパイプラインの完了後も存在し続けます。数百のパイプラインが実行されているため、サイズが増え始め、マシン上のキャッシュフォルダーを手動で削除することは、優れたソリューションではありません。

パイプラインの最後にクリーンアップジョブを追加してみました

cleanup:
  stage: cleanup
  script:
  - rm -rf './msvc/Project1/bin'
  - rm -rf './msvc/Project2/bin'
  - rm -rf './msvc/Project3/bin'
  when: always

ローカルファイルは削除されますが、キャッシュからは削除されません。

ここで何か不足していますか?

現在Gitlab-EE 10.3.3を実行している

8
Dan

これは完璧な解決策ではありませんが、.gitlab-ci.yamlファイルの最後に、ファイルシステムからキャッシュディレクトリを削除するクリーンアップジョブを作成することになりました。

このようにして、各パイプラインは、時間の経過とともにファイルシステムを混乱させることなく、独自の固有のキャッシュを取得します。

cleanup_job:
  stage: cleanup
  script:
    - echo "Cleaning up"
    - rm -rf "%CACHE_PATH%/%CI_PIPELINE_ID%"
  when: always

どこ

CACHE_PATH: "C:/gitlab-runner/cache/group/project/repo/"
7
Dan

Gitlabのプロジェクトマスターの1人である@ayufanからの引用:

キャッシュは/home/gitlab-runner/cacheに格納されるか、Dockerコンテナーdocker ps | grep -cache-として格納されます。

そこで、ディレクトリを削除して、返されたすべてのDockerコンテナを削除することができます。

0
secustor