GitLab Runner 피처 플래그

caution
기본으로 비활성화된 기능을 활성화할 경우 데이터 손상, 안정성 하락, 성능 저하 및 보안 문제가 발생할 수 있습니다. 피처 플래그를 활성화하기 전에 관련된 위험에 대해 인식해야 합니다. 자세한 정보는 개발 중인 기능을 활성화할 때 발생할 수 있는 위험 사항을 참조하세요.

피처 플래그는 특정 기능을 활성화하거나 비활성화할 수 있는 토글입니다. 이러한 플래그는 일반적으로 다음과 같이 사용됩니다:

  • 자원봉사자들이 테스트하기 위해 제공된 베타 기능이지만 모든 사용자에게 활성화될 준비가 되지 않은 경우

    베타 기능은 때때로 미완성이거나 추가적인 테스트가 필요할 수 있습니다. 베타 기능을 사용하고자 하는 사용자는 위험을 수용하고 피처 플래그를 명시적으로 활성화할 수 있습니다. 그렇지 않은 사용자들은 해당 기능이 필요하지 않거나 시스템에서 위험을 수용할 의사가 없는 경우 기본적으로 해당 기능이 비활성화되어 가능한 버그와 회귀에 영향을 받지 않습니다.

  • 근접한 미래에 기능이 폐기되거나 기능이 폐기되어 기능이 감소하는 변경 사항에 대한 중단성 변경

    제품이 변화함에 따라 기능이 때로는 변경되거나 완전히 제거될 수 있습니다. 알려진 버그는 종종 수정되지만 경우에 따라 이미 영향을 받은 버그에 대한 해결책을 이미 찾은 사용자들이 있을 수 있습니다. 표준화된 버그 수정을 채택해야 하는 사용자들에게 다른 문제를 발생시킬 수 있습니다.

    이러한 경우 피처 플래그는 이전 동작에서 새로운 동작으로 필요에 따라 전환하는 데 사용됩니다. 이를 통해 사용자들은 제품의 새 버전을 채택하면서 이전 동작에서 새로운 동작으로의 원활하고 영구적인 전환을 계획할 시간을 얻을 수 있습니다.

피처 플래그는 환경 변수를 사용하여 토글됩니다. 다음과 같이 사용할 수 있습니다:

  • 피처 플래그를 활성화하려면 해당 환경 변수를 "true" 또는 1로 설정합니다.
  • 피처 플래그를 비활성화하려면 해당 환경 변수를 "false" 또는 0로 설정합니다.

사용 가능한 피처 플래그

피처 플래그 기본값 폐기 예정 삭제 예정일 설명
FF_NETWORK_PER_BUILD false 아니오   docker 실행기로 빌드당 도커 네트워크 생성를 활성화합니다.
FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY false 아니오   false로 설정하면 exec 대신 attach를 통해 원격 쿠버네티스 명령을 비활성화하여 #4119과 같은 문제를 해결합니다.
FF_USE_DIRECT_DOWNLOAD true 아니오   true로 설정하면 Runner는 첫 시도에서 GitLab을 통해 프록시하는 대신 모든 artifact를 직접 다운로드하려고 시도합니다. 활성화하면 TLS 인증서 검증 문제로 인해 다운로드 실패가 발생할 수 있습니다. Self-signed certificates or custom Certification Authorities를 참조하세요.
FF_SKIP_NOOP_BUILD_STAGES true 아니오   false로 설정하면 실행에 영향을 미치지 않는 경우에도 모든 빌드 단계가 실행됩니다.
FF_USE_FASTZIP false 아니오   Fastzip은 캐시/artifact 보관 및 추출을 위한 고효율의 아카이버입니다.
FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR false 아니오   활성화되면 docker 실행기를 사용하는 작업에 대해 umask 0000 호출 사용을 제거합니다. 대신 Runner는 빌드 컨테이너에서 구성된 사용자의 UID 및 GID를 확인하고 작업 디렉터리 및 파일의 소유권을 변경하기 위해 미리 정의된 컨테이너에서 chmod 명령을 실행할 것입니다. 이 피처 플래그를 사용하려면 빌드 이미지에 POSIX 유틸리티 id가 설치되어 있고 작동되어야 합니다. 이 피처 플래그를 위해 Runner는 UID 및 GID를 검색하기 위해 id에 옵션 -u-g를 사용하여 실행합니다.
FF_ENABLE_BASH_EXIT_CODE_CHECK false 아니오   활성화되면 bash 스크립트는 set -e에만 의존하지 않고 각 스크립트 명령 실행 후 비정상 종료 코드를 확인합니다.
FF_USE_WINDOWS_LEGACY_PROCESS_STRATEGY false 아니오   GitLab Runner 16.10 이후에는 기본값이 false입니다. GitLab Runner 16.9 및 이전 버전에서는 기본값이 true입니다. 비활성화하면 Windows에서 Runner가 만드는 프로세스(shell 및 사용자 정의 실행기)가 프로세스 종료를 개선해야 하는 추가 설정으로 생성됩니다. 성공적이고 원활한 Windows Runner의 폐쇄를 위해 이 피처 플래그를 false로 설정해야 합니다.
FF_USE_NEW_BASH_EVAL_STRATEGY false 아니오   true로 설정하면 Bash eval 호출은 스크립트 실행의 적절한 종료 코드 감지를 돕기 위해 하위 쉘에서 실행됩니다.
FF_USE_POWERSHELL_PATH_RESOLVER false 아니오   활성화하면 PowerShell이 Runner가 호스팅된 곳에 따라 사용하는 OS별 파일경 함수가 아닌 경로명을 해결합니다.
FF_USE_DYNAMIC_TRACE_FORCE_SEND_INTERVAL false 아니오   활성화되면 로그의 추적 강제 보내기 간격이 추적 업데이트 간격에 동적으로 조정됩니다.
FF_SCRIPT_SECTIONS false 아니오   활성화되면 .gitlab-ci.yml 파일에서 각 스크립트 줄이 작업 출력에서 접을 수 있는 섹션에 표시되며 각 줄의 지속 시간을 보여줍니다. 명령이 여러 줄에 걸쳐 있는 경우 완전한 명령이 작업 로그 출력 터미널 내에서 표시됩니다.
FF_ENABLE_JOB_CLEANUP false 아니오   활성화되면 빌드가 종료될 때 프로젝트 디렉터리가 정리됩니다. GIT_CLONE이 사용된 경우 전체 프로젝트 디렉터리가 삭제됩니다. GIT_FETCH가 사용된 경우 일련의 Git clean 명령이 발행됩니다.
FF_KUBERNETES_HONOR_ENTRYPOINT false 아니오   활성화되면 FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGYtrue로 설정되어 있지 않은 경우 이미지의 Docker 엔트리포인트가 존재해야 합니다.
FF_POSIXLY_CORRECT_ESCAPES false 아니오   활성화되면 POSIX 셸 이스케이프가 사용되며 bash-style ANSI-C quoting 대신에 사용됩니다. 작업 환경이 POSIX 호환 셸을 사용하는 경우 이 기능을 활성화해야 할 수 있습니다.
FF_RESOLVE_FULL_TLS_CHAIN false 아니오   16.4 버전의 GitLab Runner 이후에는 기본값이 false입니다. 16.3 버전의 GitLab Runner 이전에는 기본값이 true입니다. 활성화되면 러너는 CI_SERVER_TLS_CA_FILE의 자체 서명 루트 인증서까지의 전체 TLS 체인을 해결합니다. 이전에는 libcurl v7.68.0 및 OpenSSL 이전 버전을 사용하여 작성된 Git 클라이언트를 위해 Git HTTPS 클론을 작동시키려면 이것이 필요했습니다. 그러나 일부 운영 체제(예: macOS)에서 이러한 과정을 거부하여 오래된 서명 알고리즘으로 서명된 루트 인증서를 거부합니다. 인증서 해결 과정에서 오류가 발생할 경우 이 기능을 비활성화해야 할 수 있습니다. 이 피처 플래그는 [runners.feature_flags] 구성에서만 비활성화할 수 있습니다.
FF_DISABLE_POWERSHELL_STDIN false 아니오   활성화하면 쉘 및 사용자 정의 실행기용 PowerShell 스크립트가 파일을 통해 전달되며 stdin을 통해 전달 및 실행되지 않습니다. 이것은 작업의 allow_failure:exit_codes 키워드가 올바르게 작동하기 위해 필요합니다.
FF_USE_POD_ACTIVE_DEADLINE_SECONDS true 아니오   활성화되면 CI/CD 작업 제한 시간에 대해 pod activeDeadlineSeconds가 설정됩니다. 이 플래그는 pod의 라이프사이클에 영향을 줍니다.
FF_USE_ADVANCED_POD_SPEC_CONFIGURATION false 아니오   활성화하면 사용자는 config.toml 파일에서 전체 pod 사양을 설정할 수 있습니다. 자세한 정보는 Overwrite generated pod specifications (Experiment)를 참조하세요.
FF_SET_PERMISSIONS_BEFORE_CLEANUP true 아니오   활성화되면 프로젝트 디렉터리의 디렉터리와 파일에 대한 권한이 삭제 전에 먼저 설정되어 삭제 작업이 성공하도록 보장합니다.
FF_SECRET_RESOLVING_FAILS_IF_MISSING true 아니오   활성화되면 값을 찾을 수 없는 경우 시크릿 해결이 실패합니다.
FF_RETRIEVE_POD_WARNING_EVENTS false 아니오   활성화되면 작업 실패 시 pod과 관련된 모든 경고 이벤트가 검색됩니다.
FF_PRINT_POD_EVENTS false 아니오   활성화되면 작업이 시작될 때까지 빌드 pod과 관련된 모든 이벤트가 인쇄됩니다.
FF_USE_GIT_BUNDLE_URIS true 아니오   활성화되면 Git transfer.bundleURI 구성 옵션이 true로 설정됩니다. 이 피처 플래그는 기본적으로 활성화됩니다. Git 번들 지원을 비활성화하려면 false로 설정하세요.
FF_USE_DUMB_INIT_WITH_KUBERNETES_EXECUTOR false 아니오   활성화되면 dumb-init가 모든 스크립트를 실행하는 데 사용됩니다. 이것은 dumb-init가 도우미 및 빌드 컨테이너에서 첫 번째 프로세스로 실행되도록 합니다.
FF_USE_INIT_WITH_DOCKER_EXECUTOR false 아니오   활성화되면 도커 실행기는 서비스 및 빌드 컨테이너를 --init 옵션으로 시작하여 tini-init을 PID 1로 실행합니다.
FF_LOG_IMAGES_CONFIGURED_FOR_JOB false 아니오   활성화되면 러너는 각 수신된 작업에 대해 정의된 이미지 및 서비스 이미지의 이름을 로그에 기록합니다.
FF_USE_DOCKER_AUTOSCALER_DIAL_STDIO true 아니오   활성화된 경우(기본값), 원격 도커 데몬에 터널링하기 위해 docker system stdio가 사용됩니다. 비활성화된 경우 SSH 연결에 대해서는 기본 SSH 터널이 사용되고 WinRM 연결에 대해서는 먼저 fleeting-proxy 도우미 이진 파일이 배포됩니다.
FF_CLEAN_UP_FAILED_CACHE_EXTRACT false 아니오    

파이프라인 구성에서 피처 플래그 활성화

CI 변수를 사용하여 피처 플래그를 활성화할 수 있습니다.

  • 파이프라인의 모든 작업에 대해 (전역적으로):

    variables:
      FEATURE_FLAG_NAME: 1
    
  • 단일 작업에 대해:

    job:
      stage: test
      variables:
        FEATURE_FLAG_NAME: 1
      script:
      - echo "안녕하세요"
    

러너 환경 변수에서 피처 플래그 활성화

모든 작업에 대해 기능을 활성화하려면 러너가 실행하는 피처 플래그를 environment 변수로 러너 구성에서 지정합니다:

[[runners]]
  name = "ruby-2.7-docker"
  url = "https://CI/"
  token = "TOKEN"
  limit = 0
  executor = "docker"
  builds_dir = ""
  shell = ""
  environment = ["FEATURE_FLAG_NAME=1"]

러너 구성에서 피처 플래그 활성화

[runners.feature_flags] 아래에 지정하여 피처 플래그를 활성화할 수 있습니다.
이 설정은 모든 작업이 피처 플래그 값을 무시하지 못하도록 합니다.

이 설정을 구성할 때 일부 피처 플래그는 작업의 실행 방법과 관련이 없기 때문에
이 설정을 구성할 때만 사용할 수 있습니다.

[[runners]]
  name = "ruby-2.7-docker"
  url = "https://CI/"
  token = "TOKEN"
  executor = "docker"
  [runners.feature_flags]
    FF_USE_DIRECT_DOWNLOAD = true