Rake 작업 정리

Tier: Free, Premium, Ultimate Offering: Self-managed

GitLab은 GitLab 인스턴스를 정리하기 위한 Rake 작업을 제공합니다.

참조되지 않는 LFS 파일 제거

경고: GitLab 업그레이드 후 12시간 이내에 이 작업을 실행하지 마십시오. 이는 모든 백그라운드 마이그레이션이 완료되었음을 보장하여 데이터 손실을 방지하기 위한 것입니다.

저장소의 히스토리에서 LFS 파일을 제거하면 이러한 파일은 고아가 되어 여전히 디스크 공간을 점유하게 됩니다. 이 Rake 작업을 사용하여 데이터베이스에서 유효하지 않은 참조를 제거하여 LFS 파일의 가비지 수집을 허용할 수 있습니다.

예시:

# omnibus-gitlab
sudo gitlab-rake gitlab:cleanup:orphan_lfs_file_references PROJECT_PATH="gitlab-org/gitlab-foss"

# 소스에서 설치
bundle exec rake gitlab:cleanup:orphan_lfs_file_references RAILS_ENV=production PROJECT_PATH="gitlab-org/gitlab-foss"

PROJECT_PATH 대신 PROJECT_ID로 프로젝트를 지정할 수도 있습니다.

예시:

$ sudo gitlab-rake gitlab:cleanup:orphan_lfs_file_references PROJECT_ID="13083"

I, [2019-12-13T16:35:31.764962 #82356]  INFO -- :  GitLab Org / GitLab Foss 프로젝트에서 고아가 된 LFS 파일을 찾고 있습니다.
I, [2019-12-13T16:35:31.923659 #82356]  INFO -- :  유효하지 않은 참조 제거됨: 12

기본적으로 이 작업은 아무 것도 삭제하지 않고 삭제할 수 있는 파일 참조의 수를 보여줍니다. 실제로 참조를 삭제하려면 DRY_RUN=false로 명령을 실행하십시오. 또한 삭제된 참조 수를 제한하려면 LIMIT={number} 매개변수를 사용할 수 있습니다.

이 Rake 작업은 LFS 파일에 대한 참조만 제거합니다. 참조되지 않는 LFS 파일은 나중에 (하루에 한 번) 가비지 수집됩니다. 즉시 가비지 수집을 해야 하는 경우 아래에서 설명하는 rake gitlab:cleanup:orphan_lfs_files를 실행하십시오.

즉시 참조되지 않는 LFS 파일 제거

참조되지 않는 LFS 파일은 매일 제거되지만 필요한 경우 즉시 제거할 수 있습니다. 예시:

# omnibus-gitlab
sudo gitlab-rake gitlab:cleanup:orphan_lfs_files

# 소스에서 설치
bundle exec rake gitlab:cleanup:orphan_lfs_files

예시 결과:

$ sudo gitlab-rake gitlab:cleanup:orphan_lfs_files
I, [2020-01-08T20:51:17.148765 #43765]  INFO -- : 참조되지 않는 LFS 파일 제거됨: 12

프로젝트 업로드 파일 정리

GitLab 데이터베이스에 존재하지 않는 경우 프로젝트 업로드 파일을 정리합니다.

파일 시스템에서 프로젝트 업로드 파일 정리

GitLab 데이터베이스에 존재하지 않는 경우 지역 프로젝트 업로드 파일을 정리합니다. 작업은 파일을 찾을 수 있다면 해당 프로젝트를 수정하려고 시도하고, 그렇지 않으면 파일을 분실 및 발견 디렉터리로 이동합니다.

# omnibus-gitlab
sudo gitlab-rake gitlab:cleanup:project_uploads

# 소스에서 설치
bundle exec rake gitlab:cleanup:project_uploads RAILS_ENV=production

예시 결과:

$ sudo gitlab-rake gitlab:cleanup:project_uploads

I, [2018-07-27T12:08:27.671559 #89817]  INFO -- : 삭제할 고아 프로젝트 업로드를 찾고 있습니다. 드라이런...
D, [2018-07-27T12:08:28.293568 #89817] DEBUG -- : 500개의 프로젝트 업로드 파일 경로 일괄 처리 중, /opt/gitlab/embedded/service/gitlab-rails/public/uploads/test.out부터 시작
I, [2018-07-27T12:08:28.689869 #89817]  INFO -- : /opt/gitlab/embedded/service/gitlab-rails/public/uploads/test.out -> /opt/gitlab/embedded/service/gitlab-rails/public/uploads/-/project-lost-found/test.out로 이동 가능
I, [2018-07-27T12:08:28.755624 #89817]  INFO -- : /opt/gitlab/embedded/service/gitlab-rails/public/uploads/foo/bar/89a0f7b0b97008a4a18cedccfdcd93fb/foo.txt -> /opt/gitlab/embedded/service/gitlab-rails/public/uploads/qux/foo/bar/89a0f7b0b97008a4a18cedccfdcd93fb/foo.txt 수정 가능
I, [2018-07-27T12:08:28.760257 #89817]  INFO -- : /opt/gitlab/embedded/service/gitlab-rails/public/uploads/foo/bar/1dd6f0f7eefd2acc4c2233f89a0f7b0b/image.png -> /opt/gitlab/embedded/service/gitlab-rails/public/uploads/-/project-lost-found/foo/bar/1dd6f0f7eefd2acc4c2233f89a0f7b0b/image.png로 이동 가능
I, [2018-07-27T12:08:28.764470 #89817]  INFO -- : 파일을 정리하려면 DRY_RUN=false로 이 명령을 실행하십시오

$ sudo gitlab-rake gitlab:cleanup:project_uploads DRY_RUN=false
I, [2018-07-27T12:08:32.944414 #89936]  INFO -- : 고아 프로젝트 업로드를 찾고 있습니다...
D, [2018-07-27T12:08:33.293568 #89817] DEBUG -- : 500개의 프로젝트 업로드 파일 경로 일괄 처리 중, /opt/gitlab/embedded/service/gitlab-rails/public/uploads/test.out부터 시작
I, [2018-07-27T12:08:33.689869 #89817]  INFO -- : /opt/gitlab/embedded/service/gitlab-rails/public/uploads/test.out -> /opt/gitlab/embedded/service/gitlab-rails/public/uploads/-/project-lost-found/test.out로 이동 완료
I, [2018-07-27T12:08:33.755624 #89817]  INFO -- : /opt/gitlab/embedded/service/gitlab-rails/public/uploads/foo/bar/89a0f7b0b97008a4a18cedccfdcd93fb/foo.txt -> /opt/gitlab/embedded/service/gitlab-rails/public/uploads/qux/foo/bar/89a0f7b0b97008a4a18cedccfdcd93fb/foo.txt 수정 완료
I, [2018-07-27T12:08:33.760257 #89817]  INFO -- : /opt/gitlab/embedded/service/gitlab-rails/public/uploads/foo/bar/1dd6f0f7eefd2acc4c2233f89a0f7b0b/image.png -> /opt/gitlab/embedded/service/gitlab-rails/public/uploads/-/project-lost-found/foo/bar/1dd6f0f7eefd2acc4c2233f89a0f7b0b/image.png로 이동 완료

객체 저장소를 사용하는 경우, All-in-one Rake task를 실행하여 모든 업로드가 객체 저장소로 이전되고 업로드 폴더에 파일이 없음을 확인하십시오.

오브젝트 스토리지에서 프로젝트 업로드 파일 정리

GitLab 데이터베이스에 존재하지 않는 경우 오브젝트 스토리지 업로드 파일을 잃어버린 발견 폴더로 이동합니다.

# omnibus-gitlab
sudo gitlab-rake gitlab:cleanup:remote_upload_files

# 소스로부터 설치하는 경우
bundle exec rake gitlab:cleanup:remote_upload_files RAILS_ENV=production

예시 출력:

$ sudo gitlab-rake gitlab:cleanup:remote_upload_files

I, [2018-08-02T10:26:13.995978 #45011]  INFO -- : 없어진 원격 업로드를 찾는 중. 시뮬레이션 실행 중...
I, [2018-08-02T10:26:14.120400 #45011]  INFO -- : 잃어버린 발견 폴더로 이동 가능: @hashed/6b/DSC_6152.JPG
I, [2018-08-02T10:26:14.120482 #45011]  INFO -- : 잃어버린 발견 폴더로 이동 가능: @hashed/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451/711491b29d3eb08837798c4909e2aa4d/DSC00314.jpg
I, [2018-08-02T10:26:14.120634 #45011]  INFO -- : 이러한 파일들을 정리하려면 DRY_RUN=false 옵션을 사용하세요
$ sudo gitlab-rake gitlab:cleanup:remote_upload_files DRY_RUN=false

I, [2018-08-02T10:26:47.598424 #45087]  INFO -- : 없어진 원격 업로드를 찾는 중...
I, [2018-08-02T10:26:47.753131 #45087]  INFO -- : 잃어버린 발견 폴더로 이동: @hashed/6b/DSC_6152.JPG -> lost_and_found/@hashed/6b/DSC_6152.JPG
I, [2018-08-02T10:26:47.764356 #45087]  INFO -- : 잃어버린 발견 폴더로 이동: @hashed/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451/711491b29d3eb08837798c4909e2aa4d/DSC00314.jpg -> lost_and_found/@hashed/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451/711491b29d3eb08837798c4909e2aa4d/DSC00314.jpg

고아 아티팩트 파일 제거

참고: 이 명령어들은 오브젝트 스토리지에 저장된 아티팩트에는 적용되지 않습니다.

경고: GitLab 14.9 이전에는 이 작업이 테스트 커버리지 관련 아티팩트를 잘못 삭제합니다. 버그 수정은 14.6.6, 14.7.5 및 14.8.3에도 백포트되었습니다. 데이터 손실을 피하려면 버그 수정이 적용된 릴리스로 업그레이드하세요.

디스크에 예상보다 더 많은 작업 아티팩트 파일 및/또는 디렉토리가 있는 경우 다음을 실행할 수 있습니다:

sudo gitlab-rake gitlab:cleanup:orphan_job_artifact_files

이 명령어는:

  • 전체 아티팩트 폴더를 스캔합니다.
  • 데이터베이스에 여전히 기록이 있는 파일을 확인합니다.
  • 데이터베이스 기록이 없는 경우 파일 및 디렉토리를 디스크에서 삭제합니다.

기본적으로 이 작업은 삭제하지 않고 삭제할 수 있는 것을 보여줍니다. 실제로 파일을 삭제하려면 DRY_RUN=false 옵션을 사용하여 명령어를 실행하세요:

sudo gitlab-rake gitlab:cleanup:orphan_job_artifact_files DRY_RUN=false

또한 LIMIT를 사용하여 삭제할 파일 수를 제한할 수 있습니다 (기본값: 100):

sudo gitlab-rake gitlab:cleanup:orphan_job_artifact_files LIMIT=100

이 명령어는 디스크에서 최대 100개의 파일만 삭제합니다. 이는 테스트 목적으로 작은 세트를 삭제하는 데 사용할 수 있습니다.

DEBUG=1을 제공하면 각 오버프로의 전체 경로가 표시됩니다.

ionice가 설치되어 있는 경우 이 작업은 디스크에 과부하를 일으키지 않도록 ionice를 사용합니다. NICENESS로 nice 레벨을 구성할 수 있습니다. 아래는 유효한 레벨이지만 확실하게 확인하려면 man 1 ionice를 참조하세요.

  • 0 또는 None
  • 1 또는 Realtime
  • 2 또는 Best-effort (기본값)
  • 3 또는 Idle

만료된 ActiveSession 조회 키 제거

# omnibus-gitlab
sudo gitlab-rake gitlab:cleanup:sessions:active_sessions_lookup_keys

# 소스로부터 설치
bundle exec rake gitlab:cleanup:sessions:active_sessions_lookup_keys RAILS_ENV=production

컨테이너 레지스트리 가비지 수집

컨테이너 레지스트리는 상당한 디스크 공간을 사용할 수 있습니다. 사용되지 않는 레이어를 정리하기 위해 레지스트리에 가비지 수집 명령이 포함되어 있습니다.