작업 획득물 관리

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

이 문서는 관리 문서입니다. GitLab CI/CD 파이프라인에서 작업 획득물을 사용하는 방법을 알아보려면 작업 획득물 구성 문서를 참조하십시오.

작업 획득물은 작업이 완료된 후에 작업에 첨부된 파일 및 디렉터리 디렉터리입니다. 이 기능은 모든 GitLab 설치에서 기본으로 활성화되어 있습니다.

작업 획득물 비활성화

사이트 전역에서 작업 획득물을 비활성화하려면:

Linux package (Omnibus)
  1. /etc/gitlab/gitlab.rb 파일을 편집하십시오:

    gitlab_rails['artifacts_enabled'] = false
    
  2. 파일을 저장하고 GitLab을 다시 구성하십시오:

    sudo gitlab-ctl reconfigure
    
Helm chart (Kubernetes)
  1. Helm 값을 내보내십시오:

    helm get values gitlab > gitlab_values.yaml
    
  2. gitlab_values.yaml 파일을 편집하십시오:

    global:
      appConfig:
        artifacts:
          enabled: false
    
  3. 새 값을 적용하십시오:

    helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
    
Docker
  1. docker-compose.yml 파일을 편집하십시오:

    version: "3.6"
    services:
      gitlab:
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            gitlab_rails['artifacts_enabled'] = false
    
  2. 파일을 저장하고 GitLab을 다시 시작하십시오:

    docker compose up -d
    
Self-compiled (source)
  1. /home/git/gitlab/config/gitlab.yml 파일을 편집하십시오:

    production: &base
      artifacts:
        enabled: false
    
  2. 파일을 저장하고 GitLab을 다시 시작하십시오:

    # systemd를 실행 중인 시스템의 경우
    sudo systemctl restart gitlab.target
       
    # SysV init를 실행 중인 시스템의 경우
    sudo service gitlab restart
    

작업 획득물 저장

GitLab Runner는 작업 획득물을 포함하는 아카이브를 GitLab에 업로드할 수 있습니다. 기본적으로 이 작업은 작업이 성공한 경우에 수행되지만, artifacts:when 매개변수를 사용하여 실패한 경우나 항상 수행할 수도 있습니다.

대부분의 작업 획득물은 GitLab Runner에 의해 조정된 후 코디네이터로 전송되기 전에 압축됩니다. 이에 예외인 보고서 획득물은 업로드 후에 압축됩니다.

로컬 리포지터리 사용

Linux 패키지를 사용하거나 자체 컴파일된 설치를 사용하는 경우, 작업 획득물이 로컬로 저장되는 위치를 변경할 수 있습니다.

note
Docker 설치의 경우, 데이터가 마운트된 위치를 변경할 수 있습니다. Helm 차트의 경우, 객체 리포지터리를 사용합니다.
Linux package (Omnibus)

기본적으로 작업 획득물은 /var/opt/gitlab/gitlab-rails/shared/artifacts에 저장됩니다.

  1. 저장 경로를 변경하려면, 예를 들어 /mnt/storage/artifacts로 변경하려면 /etc/gitlab/gitlab.rb 파일을 편집하고 다음 라인을 추가하십시오:

    gitlab_rails['artifacts_path'] = "/mnt/storage/artifacts"
    
  2. 파일을 저장하고 GitLab을 다시 구성하십시오:

    sudo gitlab-ctl reconfigure
    
Self-compiled (source)

기본적으로 작업 획득물은 /home/git/gitlab/shared/artifacts에 저장됩니다.

  1. 저장 경로를 변경하려면, 예를 들어 /mnt/storage/artifacts로 변경하려면 /home/git/gitlab/config/gitlab.yml 파일을 편집하고 다음 라인을 추가하거나 수정하십시오:

    production: &base
      artifacts:
        enabled: true
        path: /mnt/storage/artifacts
    
  2. 파일을 저장하고 GitLab을 다시 시작하십시오:

    # systemd를 실행 중인 시스템의 경우
    sudo systemctl restart gitlab.target
       
    # SysV init를 실행 중인 시스템의 경우
    sudo service gitlab restart
    

객체 리포지터리 사용

GitLab이 설치된 로컬 디스크를 사용하지 않고 작업 획득물을 저장하려면 AWS S3와 같은 객체 리포지터리를 사용할 수 있습니다.

GitLab을 객체 리포지터리에 작업 획득물을 저장하도록 구성하면, 작업 로그에 대한 로컬 디스크 사용 방지를 원할 수도 있습니다. 두 경우 모두, 작업 로그는 작업 완료 시 객체 리포지터리로 아카이브되고 이동됩니다.

caution
다중 서버 환경에서는 반드시 작업 로그에 대한 로컬 디스크 사용 방지 옵션 중 하나를 사용해야 하며, 그렇지 않으면 작업 로그가 손실될 수 있습니다.

GitLab 13.2 및 이후에는 통합 객체 리포지터리 설정을 사용해야 합니다.

객체 리포지터리로 마이그레이션

작업 획득물을 로컬 리포지터리에서 객체 리포지터리로 마이그레이션할 수 있습니다. 이 처리는 백그라운드 작업자에서 수행되며 다운타임이 필요하지 않습니다.

  1. 객체 리포지터리를 구성.
  2. 작업 획득물을 마이그레이션하십시오:

    Linux package (Omnibus)
    sudo gitlab-rake gitlab:artifacts:migrate
    
    Docker
    sudo docker exec -t <container name> gitlab-rake gitlab:artifacts:migrate
    
    Self-compiled (source)
    sudo -u git -H bundle exec rake gitlab:artifacts:migrate RAILS_ENV=production
    
  3. 선택 사항. 진행 상황을 추적하고 모든 작업 획득물이 성공적으로 마이그레이션되었는지 확인하십시오. PostgreSQL 콘솔을 사용하십시오.
    1. PostgreSQL 콘솔을 엽니다:

      Linux package (Omnibus)
      sudo gitlab-psql
      
      Docker
      sudo docker exec -it <container_name> /bin/bash
      gitlab-psql
      
      Self-compiled (source)
      sudo -u git -H psql -d gitlabhq_production
      
    2. 다음 SQL 쿼리로 모든 작업 획득물이 객체 리포지터리로 마이그레이션되었는지 확인하십시오. objectstg 수는 total과 동일해야 합니다:

      gitlabhq_production=# SELECT count(*) AS total, sum(case when file_store = '1' then 1 else 0 end) AS filesystem, sum(case when file_store = '2' then 1 else 0 end) AS objectstg FROM ci_job_artifacts;
            
      total | filesystem | objectstg
      ------+------------+-----------
         19 |          0 |        19
      
  4. 디스크의 artifacts 디렉터리에 파일이 없는지 확인하십시오:

    Linux package (Omnibus)
    sudo find /var/opt/gitlab/gitlab-rails/shared/artifacts -type f | grep -v tmp | wc -l
    
    Docker

    /srv/gitlab/var/opt/gitlab에 마운트했다고 가정합니다:

    sudo find /srv/gitlab/gitlab-rails/shared/artifacts -type f | grep -v tmp | wc -l
    
    Self-compiled (source)
    sudo find /home/git/gitlab/shared/artifacts -type f | grep -v tmp | wc -l
    

일부 경우에는 고아 획득물 파일 정리 Rake 작업를 실행해야 할 수 있습니다.

객체 리포지터리에서 로컬 리포지터리로의 마이그레이션

아티팩트를 다시 로컬 리포지터리로 마이그레이션하려면:

  1. gitlab-rake gitlab:artifacts:migrate_to_local을 실행합니다.
  2. gitlab.rb에서 아티팩트 리포지터리를 선택적으로 비활성화합니다.(object_storage.md#disable-object-storage-for-specific-features)
  3. GitLab을 다시 구성합니다.(restart_gitlab.md#reconfigure-a-linux-package-installation)

아티팩트 만료

artifacts:expire_in을 사용하여 아티팩트의 만료일을 설정한 경우 해당 날짜가 지나면 아티팩트는 삭제 대상으로 표시됩니다. 그렇지 않으면 기본 아티팩트 만료 설정에 따라 만료됩니다.

아티팩트는 expire_build_artifacts_worker 크론 작업에 의해 삭제됩니다. 이 작업은 Sidekiq이 7분마다 실행합니다 (*/7 * * * * in 크론 구문).

만료된 아티팩트가 삭제되는 기본 일정을 변경하려면: ::Tabs

Linux package (Omnibus)
  1. /etc/gitlab/gitlab.rb를 편집하고 다음 줄을 추가합니다(또는 이미 존재하고 주석 처리된 경우 주석을 해제), 알맞게 크론 구문으로 일정을 대체합니다:

    gitlab_rails['expire_build_artifacts_worker_cron'] = "*/7 * * * *"
    
  2. 파일을 저장하고 GitLab을 다시 구성합니다:

    sudo gitlab-ctl reconfigure
    
Helm chart (Kubernetes)
  1. Helm 값을 내보냅니다:

    helm get values gitlab > gitlab_values.yaml
    
  2. gitlab_values.yaml을 편집합니다:

    global:
      appConfig:
        cron_jobs:
          expire_build_artifacts_worker:
            cron: "*/7 * * * *"
    
  3. 파일을 저장하고 새 값들을 적용합니다:

    helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
    
Docker
  1. docker-compose.yml을 편집합니다:

    version: "3.6"
    services:
      gitlab:
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            gitlab_rails['expire_build_artifacts_worker_cron'] = "*/7 * * * *"
    
  2. 파일을 저장하고 GitLab을 다시 시작합니다:

    docker compose up -d
    
Self-compiled (source)
  1. /home/git/gitlab/config/gitlab.yml을 편집합니다:

    production: &base
      cron_jobs:
        expire_build_artifacts_worker:
          cron: "*/7 * * * *"
    
  2. 파일을 저장하고 GitLab을 다시 시작합니다:

    # systemd를 사용하는 시스템의 경우
    sudo systemctl restart gitlab.target
       
    # SysV init를 사용하는 시스템의 경우
    sudo service gitlab restart
    

::EndTabs

아티팩트의 최대 파일 크기 설정

아티팩트가 활성화된 경우 관리 영역 설정을 통해 아티팩트의 최대 파일 크기를 변경할 수 있습니다.

리포지터리 통계

그룹 및 프로젝트의 작업 아티팩트에 사용된 총 리포지터리 용량을 다음에서 볼 수 있습니다:

구현 세부 정보

GitLab이 아티팩트 아카이브를 받으면 GitLab Workhorse에 의해 아카이브 메타데이터 파일도 생성됩니다. 이 메타데이터 파일은 아티팩트 아카이브 자체에 위치한 모든 항목을 설명합니다. 메타데이터 파일은 추가 Gzip 압축을 포함한 바이너리 형식입니다.

GitLab은 공간, 메모리 및 디스크 I/O를 저장하기 위해 아티팩트 아카이브를 추출하지 않고 관련 정보를 포함한 메타데이터 파일을 검사합니다. 이는 특히 많은 아티팩트가 있거나 아카이브가 매우 큰 파일인 경우에 중요합니다.

특정 파일을 선택하면 GitLab Workhorse가 아카이브에서 해당 파일을 추출하고 다운로드가 시작됩니다. 이 구현은 공간, 메모리 및 디스크 I/O를 저장합니다.