InfoGrab Docs

잡 트러블슈팅

요약

잡을 사용할 때 다음과 같은 문제가 발생할 수 있습니다. 머지 리퀘스트 파이프라인 없이 rules: changes 또는 only: changes를 사용할 때 잡이나 파이프라인이 예기치 않게 실행될 수 있습니다. 머지 리퀘스트와 명시적 연결이 없는 브랜치나 태그의 파이프라인은 이전 SHA를 사용하여 diff를 계산합니다.

잡을 사용할 때 다음과 같은 문제가 발생할 수 있습니다.

changes:를 사용할 때 잡이나 파이프라인이 예기치 않게 실행되는 경우#

머지 리퀘스트 파이프라인 없이 rules: changes 또는 only: changes를 사용할 때 잡이나 파이프라인이 예기치 않게 실행될 수 있습니다.

머지 리퀘스트와 명시적 연결이 없는 브랜치나 태그의 파이프라인은 이전 SHA를 사용하여 diff를 계산합니다. 이 계산은 git diff HEAD~와 동일하며 다음과 같은 예기치 않은 동작을 유발할 수 있습니다:

  • GitLab에 새 브랜치나 새 태그를 푸시할 때 changes 규칙은 항상 true로 평가됩니다.
  • 새 커밋을 푸시할 때 변경된 파일은 이전 커밋을 기본 SHA로 사용하여 계산됩니다.

또한 changes가 있는 규칙은 예약된 파이프라인에서 항상 true로 평가됩니다. 예약된 파이프라인이 실행될 때 모든 파일이 변경된 것으로 간주되므로 changes를 사용하는 예약된 파이프라인에 잡이 항상 추가될 수 있습니다.

CI/CD 변수에서의 파일 경로#

CI/CD 변수에서 파일 경로를 사용할 때 주의하세요. 후행 슬래시는 변수 정의에서 올바르게 보일 수 있지만, script:, changes: 또는 다른 키워드에서 확장될 때 유효하지 않을 수 있습니다. 예를 들어:

docker_build:
  variables:
    DOCKERFILES_DIR: 'path/to/files/'  # This variable should not have a trailing '/' character
  script: echo "A docker job"
  rules:
    - changes:
        - $DOCKERFILES_DIR/*

DOCKERFILES_DIR 변수가 changes: 섹션에서 확장될 때 전체 경로는 path/to/files//*가 됩니다. 이중 슬래시는 사용된 키워드, 러너의 셸과 OS 등 다양한 요인에 따라 예기치 않은 동작을 유발할 수 있습니다.

You are not allowed to download code from this project. 오류 메시지#

GitLab 관리자가 비공개 프로젝트에서 보호된 수동 잡을 실행할 때 파이프라인이 실패하는 것을 볼 수 있습니다.

CI/CD 잡은 보통 잡이 시작될 때 프로젝트를 클론하며, 이는 잡을 실행하는 사용자의 권한을 사용합니다. 관리자를 포함한 모든 사용자는 비공개 프로젝트의 소스를 클론하려면 해당 프로젝트의 직접 멤버여야 합니다. 이 동작을 변경하기 위한 이슈가 있습니다.

보호된 수동 잡을 실행하려면:

  • 관리자를 비공개 프로젝트의 직접 멤버로 추가하세요(어떤 역할이든 가능).
  • 프로젝트의 직접 멤버인 사용자를 가장하세요.

다시 실행할 때 CI/CD 잡이 최신 설정을 사용하지 않는 경우#

파이프라인 설정은 파이프라인이 생성될 때만 가져옵니다. 잡을 재실행할 때는 매번 동일한 설정을 사용합니다. include로 추가된 별도 파일을 포함하여 설정 파일을 업데이트한 경우 새 설정을 사용하려면 새 파이프라인을 시작해야 합니다.

Job may allow multiple pipelines to run for a single action 경고#

if 절 없이 when 절과 함께 rules를 사용하면 여러 파이프라인이 실행될 수 있습니다. 일반적으로 열린 머지 리퀘스트가 연결된 브랜치에 커밋을 푸시할 때 발생합니다.

중복 파이프라인을 방지하려면 workflow: rules를 사용하거나 어떤 파이프라인이 실행될 수 있는지 제어하도록 규칙을 재작성하세요.

변수 표현식에 대한 This GitLab CI configuration is invalid#

CI/CD 변수 표현식으로 작업할 때 여러 This GitLab CI configuration is invalid 오류 중 하나를 받을 수 있습니다. 이러한 문법 오류는 따옴표 문자를 잘못 사용하여 발생할 수 있습니다.

변수 표현식에서 문자열은 따옴표로 묶어야 하며, 변수는 따옴표로 묶지 않아야 합니다. 예를 들어:

variables:
  ENVIRONMENT: production

job:
  script: echo
  rules:
    - if: $ENVIRONMENT == "production"
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

이 예시에서 production 문자열은 따옴표로 묶이고 CI/CD 변수는 따옴표 없이 사용되므로 두 if: 절 모두 유효합니다.

반면 다음 if: 절은 모두 유효하지 않습니다:

variables:
  ENVIRONMENT: production

job:
  script: echo
  rules:       # These rules all cause YAML syntax errors:
    - if: ${ENVIRONMENT} == "production"
    - if: "$ENVIRONMENT" == "production"
    - if: $ENVIRONMENT == production
    - if: "production" == "production"

이 예시에서:

  • if: ${ENVIRONMENT} == "production"${ENVIRONMENT}if:의 CI/CD 변수에 유효한 형식이 아니므로 유효하지 않습니다.
  • if: "$ENVIRONMENT" == "production"은 변수가 따옴표로 묶여 있으므로 유효하지 않습니다.
  • if: $ENVIRONMENT == production은 문자열이 따옴표로 묶여 있지 않으므로 유효하지 않습니다.
  • if: "production" == "production"은 비교할 CI/CD 변수가 없으므로 유효하지 않습니다.

HTTP/2 문제로 인해 get_sources 잡 섹션이 실패하는 경우#

때때로 잡이 다음 cURL 오류와 함께 실패합니다:

++ git -c 'http.userAgent=gitlab-runner <version>' fetch origin +refs/pipelines/<id>:refs/pipelines/<id> ...
error: RPC failed; curl 16 HTTP/2 send again with decreased length
fatal: ...

Git과 libcurlHTTP/1.1 사용으로 구성하여 이 문제를 해결할 수 있습니다. 다음 위치에 설정을 추가할 수 있습니다:

resource_group을 사용하는 잡이 멈추는 경우#

resource_group을 사용하는 잡이 멈추면 GitLab 관리자는 레일스 콘솔에서 다음 명령을 실행해 볼 수 있습니다:

# find resource group by name
resource_group = Project.find_by_full_path('...').resource_groups.find_by(key: 'the-group-name')
busy_resources = resource_group.resources.where('build_id IS NOT NULL')

# identify which builds are occupying the resource
# (I think it should be 1 as of today)
busy_resources.pluck(:build_id)

# it's good to check why this build is holding the resource.
# Is it stuck? Has it been forcefully dropped by the system?
# free up busy resources
busy_resources.update_all(build_id: nil)

You are not authorized to run this manual job 메시지#

수동 잡을 실행하려고 할 때 이 메시지를 받고 실행 버튼이 비활성화될 수 있는 경우:

  • 대상 환경이 보호된 환경이고 귀하의 계정이 배포 허용 목록에 포함되지 않은 경우.
  • 오래된 배포 잡 방지 설정이 활성화되어 있고 잡을 실행하면 최신 배포를 덮어쓸 경우.

잡 트러블슈팅

Tier: Free, Premium, Ultimate
Offering: GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

잡을 사용할 때 다음과 같은 문제가 발생할 수 있습니다. 머지 리퀘스트 파이프라인 없이 rules: changes 또는 only: changes를 사용할 때 잡이나 파이프라인이 예기치 않게 실행될 수 있습니다. 머지 리퀘스트와 명시적 연결이 없는 브랜치나 태그의 파이프라인은 이전 SHA를 사용하여 diff를 계산합니다.

잡을 사용할 때 다음과 같은 문제가 발생할 수 있습니다.

changes:를 사용할 때 잡이나 파이프라인이 예기치 않게 실행되는 경우#

머지 리퀘스트 파이프라인 없이 rules: changes 또는 only: changes를 사용할 때 잡이나 파이프라인이 예기치 않게 실행될 수 있습니다.

머지 리퀘스트와 명시적 연결이 없는 브랜치나 태그의 파이프라인은 이전 SHA를 사용하여 diff를 계산합니다. 이 계산은 git diff HEAD~와 동일하며 다음과 같은 예기치 않은 동작을 유발할 수 있습니다:

  • GitLab에 새 브랜치나 새 태그를 푸시할 때 changes 규칙은 항상 true로 평가됩니다.
  • 새 커밋을 푸시할 때 변경된 파일은 이전 커밋을 기본 SHA로 사용하여 계산됩니다.

또한 changes가 있는 규칙은 예약된 파이프라인에서 항상 true로 평가됩니다. 예약된 파이프라인이 실행될 때 모든 파일이 변경된 것으로 간주되므로 changes를 사용하는 예약된 파이프라인에 잡이 항상 추가될 수 있습니다.

CI/CD 변수에서의 파일 경로#

CI/CD 변수에서 파일 경로를 사용할 때 주의하세요. 후행 슬래시는 변수 정의에서 올바르게 보일 수 있지만, script:, changes: 또는 다른 키워드에서 확장될 때 유효하지 않을 수 있습니다. 예를 들어:

docker_build:
  variables:
    DOCKERFILES_DIR: 'path/to/files/'  # This variable should not have a trailing '/' character
  script: echo "A docker job"
  rules:
    - changes:
        - $DOCKERFILES_DIR/*

DOCKERFILES_DIR 변수가 changes: 섹션에서 확장될 때 전체 경로는 path/to/files//*가 됩니다. 이중 슬래시는 사용된 키워드, 러너의 셸과 OS 등 다양한 요인에 따라 예기치 않은 동작을 유발할 수 있습니다.

You are not allowed to download code from this project. 오류 메시지#

GitLab 관리자가 비공개 프로젝트에서 보호된 수동 잡을 실행할 때 파이프라인이 실패하는 것을 볼 수 있습니다.

CI/CD 잡은 보통 잡이 시작될 때 프로젝트를 클론하며, 이는 잡을 실행하는 사용자의 권한을 사용합니다. 관리자를 포함한 모든 사용자는 비공개 프로젝트의 소스를 클론하려면 해당 프로젝트의 직접 멤버여야 합니다. 이 동작을 변경하기 위한 이슈가 있습니다.

보호된 수동 잡을 실행하려면:

  • 관리자를 비공개 프로젝트의 직접 멤버로 추가하세요(어떤 역할이든 가능).
  • 프로젝트의 직접 멤버인 사용자를 가장하세요.

다시 실행할 때 CI/CD 잡이 최신 설정을 사용하지 않는 경우#

파이프라인 설정은 파이프라인이 생성될 때만 가져옵니다. 잡을 재실행할 때는 매번 동일한 설정을 사용합니다. include로 추가된 별도 파일을 포함하여 설정 파일을 업데이트한 경우 새 설정을 사용하려면 새 파이프라인을 시작해야 합니다.

Job may allow multiple pipelines to run for a single action 경고#

if 절 없이 when 절과 함께 rules를 사용하면 여러 파이프라인이 실행될 수 있습니다. 일반적으로 열린 머지 리퀘스트가 연결된 브랜치에 커밋을 푸시할 때 발생합니다.

중복 파이프라인을 방지하려면 workflow: rules를 사용하거나 어떤 파이프라인이 실행될 수 있는지 제어하도록 규칙을 재작성하세요.

변수 표현식에 대한 This GitLab CI configuration is invalid#

CI/CD 변수 표현식으로 작업할 때 여러 This GitLab CI configuration is invalid 오류 중 하나를 받을 수 있습니다. 이러한 문법 오류는 따옴표 문자를 잘못 사용하여 발생할 수 있습니다.

변수 표현식에서 문자열은 따옴표로 묶어야 하며, 변수는 따옴표로 묶지 않아야 합니다. 예를 들어:

variables:
  ENVIRONMENT: production

job:
  script: echo
  rules:
    - if: $ENVIRONMENT == "production"
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

이 예시에서 production 문자열은 따옴표로 묶이고 CI/CD 변수는 따옴표 없이 사용되므로 두 if: 절 모두 유효합니다.

반면 다음 if: 절은 모두 유효하지 않습니다:

variables:
  ENVIRONMENT: production

job:
  script: echo
  rules:       # These rules all cause YAML syntax errors:
    - if: ${ENVIRONMENT} == "production"
    - if: "$ENVIRONMENT" == "production"
    - if: $ENVIRONMENT == production
    - if: "production" == "production"

이 예시에서:

  • if: ${ENVIRONMENT} == "production"${ENVIRONMENT}if:의 CI/CD 변수에 유효한 형식이 아니므로 유효하지 않습니다.
  • if: "$ENVIRONMENT" == "production"은 변수가 따옴표로 묶여 있으므로 유효하지 않습니다.
  • if: $ENVIRONMENT == production은 문자열이 따옴표로 묶여 있지 않으므로 유효하지 않습니다.
  • if: "production" == "production"은 비교할 CI/CD 변수가 없으므로 유효하지 않습니다.

HTTP/2 문제로 인해 get_sources 잡 섹션이 실패하는 경우#

때때로 잡이 다음 cURL 오류와 함께 실패합니다:

++ git -c 'http.userAgent=gitlab-runner <version>' fetch origin +refs/pipelines/<id>:refs/pipelines/<id> ...
error: RPC failed; curl 16 HTTP/2 send again with decreased length
fatal: ...

Git과 libcurlHTTP/1.1 사용으로 구성하여 이 문제를 해결할 수 있습니다. 다음 위치에 설정을 추가할 수 있습니다:

resource_group을 사용하는 잡이 멈추는 경우#

resource_group을 사용하는 잡이 멈추면 GitLab 관리자는 레일스 콘솔에서 다음 명령을 실행해 볼 수 있습니다:

# find resource group by name
resource_group = Project.find_by_full_path('...').resource_groups.find_by(key: 'the-group-name')
busy_resources = resource_group.resources.where('build_id IS NOT NULL')

# identify which builds are occupying the resource
# (I think it should be 1 as of today)
busy_resources.pluck(:build_id)

# it's good to check why this build is holding the resource.
# Is it stuck? Has it been forcefully dropped by the system?
# free up busy resources
busy_resources.update_all(build_id: nil)

You are not authorized to run this manual job 메시지#

수동 잡을 실행하려고 할 때 이 메시지를 받고 실행 버튼이 비활성화될 수 있는 경우:

  • 대상 환경이 보호된 환경이고 귀하의 계정이 배포 허용 목록에 포함되지 않은 경우.
  • 오래된 배포 잡 방지 설정이 활성화되어 있고 잡을 실행하면 최신 배포를 덮어쓸 경우.