Rake 작업 정리

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

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

참조되지 않는 LFS 파일 제거

caution
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_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을 수정 가능
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로 이동 가능

...

객체 리포지터리를 사용하는 경우 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

고아 아티팩트 파일 제거

note
이 명령은 객체 리포지터리에 저장된 아티팩트에 대해 작동하지 않습니다.
caution
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로 우선 순위를 구성할 수 있습니다. 아래는 유효한 수준입니다만, 확실하지 않을 경우 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

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

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