Job artifacts 문제 해결

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

job artifacts를 사용할 때 다음과 같은 문제가 발생할 수 있습니다.

Job이 특정 artifacts을 검색하지 않음

기본적으로 작업은 이전 단계에서 모든 artifacts를 가져오지만, dependencies 또는 needs를 사용하는 작업은 기본적으로 모든 작업에서 artifacts을 가져오지 않습니다.

이러한 키워드를 사용하면 artifacts가 일부 작업에서만 가져와집니다. 이러한 키워드로 artifacts을 가져오는 방법에 대한 정보는 키워드 참조에서 확인할 수 있습니다:

Job artifacts이 너무 많은 디스크 공간을 사용함

작업 artifacts이 너무 많은 디스크 공간을 사용하는 경우, 작업 artifacts 관리 문서를 참조하십시오.

에러 메시지 No files to upload

이 메시지는 작업 로그에 표시되며, 러너가 파일을 찾을 수 없을 때 나타납니다. 파일 경로가 잘못되었거나 파일이 생성되지 않았을 수 있습니다. 작업 로그에서 파일 이름과 생성되지 않은 이유에 대한 다른 에러 또는 경고를 확인할 수 있습니다.

자세한 작업 로그를 위해 CI/CD 디버그 로깅을 활성화하고 작업을 다시 시도할 수 있습니다. 이 로깅은 파일이 생성되지 않은 이유에 대해 더 많은 정보를 제공할 수 있습니다.

에러 메시지 Missing /usr/bin/gitlab-runner-helper. Uploading artifacts is disabled.

  • GitLab 15.2에서 도입된 것으로, GitLab Runner는 이 문제를 해결하기 위해 RUNNER_DEBUG 대신에 DEBUG를 사용합니다.

GitLab 15.1 및 이전 버전에서 DEBUG라는 이름의 CI/CD 변수를 설정하면 artifact 업로드가 실패할 수 있습니다.

이 문제를 해결하려면 다음을 수행할 수 있습니다:

  • GitLab 및 GitLab Runner 15.2로 업데이트
  • 다른 변수 이름 사용
  • script 명령어에서 환경 변수로 설정:

    failing_test_job:  # 이 작업은 gitlab-org/gitlab-runner#3068으로 인해 실패할 수 있습니다
      variables:
        DEBUG: true
      script: bin/mycommand
      artifacts:
        paths:
          - bin/results
    
    successful_test_job:  # 이 작업은 `DEBUG`라는 이름의 CI/CD 변수를 정의하지 않았으며 이 문제에 영향을받지 않습니다
      script: DEBUG=true bin/mycommand
      artifacts:
        paths:
          - bin/results
    

에러 메시지 FATAL: invalid argument를 업로드 하는 도트엔브 artifact에 쓸 때

PowerShell echo 명령은 UCS-2 LE BOM (Byte Order Mark) 인코딩으로 파일을 작성하지만, UTF-8만 지원됩니다. echodotenv artifact을 만들려고 하면 FATAL: invalid argument 오류가 발생합니다.

대신 UTF-8을 사용하는 PowerShell Add-Content를 사용하십시오:

test-job:
  stage: test
  tags:
    - windows
  script:
    - echo "test job"
    - Add-Content -Path build.env -Value "MY_ENV_VAR=true"
  artifacts:
    reports:
      dotenv: build.env

Job artifacts이 만료되지 않음

일부 작업 artifacts이 예상대로 만료되지 않는 경우, 가장 최근 성공한 작업의 artifacts 유지 설정이 활성화되어 있는지 확인하십시오.

이 설정이 활성화되어 있으면 각 ref의 최신 성공한 파이프라인에서의 작업 artifacts이 만료되지 않고 삭제되지 않습니다.

에러 메시지 이 작업은 필요한 artifacts을 검색할 수 없어 시작할 수 없습니다

작업이 기대하는 artifacts을 가져올 수 없을 때 작업이 시작하지 못하고 이 오류 메시지를 반환합니다. 이 오류는 다음 경우에 반환됩니다:

  • 작업의 종속 항목을 찾을 수 없을 때. 기본적으로 나중 단계의 작업은 모든 이전 단계의 작업에서 artifacts을 가져오므로 이전 작업은 모두 종속 항목으로 간주됩니다. 작업이 dependencies 키워드를 사용하는 경우 목록에 포함된 작업만 종속적입니다.
  • artifacts이 이미 만료되었을 때. artifacts:expire_in을 사용하여 더 오랫동안 만료되도록 설정할 수 있습니다.
  • 작업이 관련 리소스에 접근할 수 없을 때. 권한이 부족한 경우입니다.

작업에서 needs:artifacts를 사용하는 경우에는 이러한 추가적인 문제 해결 단계를 참조하십시오:

needs:project로 구성된 작업의 경우

needs:project를 사용하는 작업에 대해 비슷한 구성을 사용하는 경우 다음과 같은 에러가 발생할 수 있습니다.

rspec:
  needs:
    - project: my-group/my-project
      job: dependency-job
      ref: master
      artifacts: true

이 오류를 해결하려면 다음을 확인하십시오:

  • my-group/my-project 프로젝트가 프리미엄 구독 플랜을 가진 그룹에 있는지 확인합니다.
  • 작업을 실행하는 사용자가 my-group/my-project의 리소스에 접근할 수 있는지 확인합니다.
  • project, job, 및 ref 조합이 존재하고 원하는 종속성을 생성하는지 확인합니다.
  • 사용 중인 변수가 올바른 값을 평가하는지 확인합니다.

needs:pipeline:job로 구성된 작업의 경우

needs:pipeline:job를 사용하는 작업에 대해 비슷한 구성을 사용하는 경우 다음과 같은 에러가 발생할 수 있습니다.

rspec:
  needs:
    - pipeline: $UPSTREAM_PIPELINE_ID
      job: dependency-job
      artifacts: true

이 오류를 해결하려면 다음을 확인하십시오:

  • 현재 파이프라인의 부모-자식 파이프라인 계층구조에서 $UPSTREAM_PIPELINE_ID CI/CD 변수가 사용 가능한지 확인합니다.
  • pipelinejob 조합이 존재하고 존재하는 파이프라인으로 해결되는지 확인합니다.
  • dependency-job가 실행되었고 성공적으로 완료되었는지 확인합니다.

업그레이드 후 UnlockPipelinesInQueueWorker가 표시되는 문제 해결

작업이 중단되고 UnlockPipelinesInQueueWorker라는 오류가 표시될 수 있습니다.

이 문제는 업그레이드 후에 발생합니다.

해결책은 ci_unlock_pipelines_extra_low 특성 플래그를 활성화하는 것입니다. 특성 플래그를 전환하려면 관리자여야 합니다.

GitLab SaaS에서:

  • 다음의 ChatOps 명령을 실행하십시오:

    /chatops run feature set ci_unlock_pipelines_extra_low true
    

GitLab Self-Managed에서:

  • ci_unlock_pipelines_extra_low라는 특성 플래그를 활성화하십시오.

자세한 내용은 병합 요청 140318의 코멘트를 참조하세요.