설정
모든 Zuul 프로세스는 INI 파일 구문을 사용하는 /etc/zuul/zuul.conf 파일(대체 위치는 명령줄에 제공될 수 있음)을 읽습니다. 각 컴포넌트는 자체 설정 파일을 가질 수 있지만, 모든 컴포넌트에 동일한 파일을 사용하는 것이 더 간단할 수 있습니다.
Zuul은 파이썬 문자열 확장(python string expansion)으로 이스케이프되어 설정 파일에 제공된 ZUUL_ 접두사로 시작하는 환경 변수를 보간(interpolate)합니다. foo=%(ZUUL_HOME)s 는 foo 의 값을 ZUUL_HOME 이라는 환경 변수와 동일한 값으로 설정합니다.
zuul.conf 예시:
[zookeeper]
hosts=zk1.example.com,zk2.example.com,zk3.example.com
[database]
dburi=<URI>
[keystore]
password=MY_SECRET_PASSWORD
[web]
root=https://zuul.example.com/
[scheduler]
log_config=/etc/zuul/scheduler-logging.yaml
공통 옵션
zuul.conf 의 다음 섹션들은 모든 Zuul 컴포넌트에서 사용됩니다:
Statsd
-
statsd
선택적인 statsd 서버에 대한 정보입니다.
statsd파이썬 모듈이 설치되어 있고 이 섹션이 설정되어 있다면, 통계가 statsd에 보고됩니다. 자세한 정보는 Statsd 리포팅 를 참조하십시오.-
statsd.server
statsd 서버의 호스트 이름 또는 IP 주소입니다.
-
statsd.port
Default:8125 statsd 서버가 수신 대기(listening)하는 UDP 포트입니다.
-
statsd.prefix
이 값이 존재하면, statsd 서버로 전송하기 전에 모든 키(keys)의 접두사로 추가됩니다.
-
statsd.server
추적 (Tracing)
-
tracing
선택적인 OpenTelemetry 추적 설정에 대한 정보입니다. 자세한 정보는 트레이싱 을 참조하십시오.
-
tracing.enabled (required)
추적을 활성화하려면 이 값을
true로 설정하십시오. 이것은 로컬에서 실행 중인 수집기(collector)로 내보내기 위해 유일하게 필요한 매개변수입니다.
-
tracing.protocol
Default:grpc 사용할 OTLP 와이어 프로토콜(wire protocol)입니다.
- grpc
gRPC를 사용합니다 (기본값).
- http/protobuf
protobuf 인코딩과 함께 HTTP를 사용합니다.
-
tracing.endpoint
사용할 엔드포인트(endpoint)입니다. 기본값은 프로토콜에 따라 다르지만, 모든 경우에 기본적으로 localhost로 설정됩니다.
-
tracing.service_name
Default:zuul 여기에서 서비스 이름을 지정할 수 있습니다. 여러 Zuul 설치 환경에서는 서로 다른 값을 사용해야 합니다.
-
tracing.certificate_file
엔드포인트를 확인하는 데 사용되는 PEM 인코딩된 인증서 파일의 경로입니다. http/protobuf 에서만 사용됩니다.
-
tracing.timeout
Default:10000 나가는(outgoing) 데이터에 대한 타임아웃(밀리초 단위)입니다.
-
tracing.compression
사용할 압축 알고리즘입니다. 사용 가능한 값은 프로토콜 및 엔드포인트에 따라 다릅니다. 보편적으로 지원되는 유일한 값은
gzip입니다.
-
tracing.enabled (required)
ZooKeeper
-
zookeeper
ZooKeeper에 대한 클라이언트 연결 정보입니다. TLS가 필요합니다.
-
zookeeper.hosts (required)
Zuul이 사용할 zookeeper 호스트 목록입니다.
-
zookeeper.tls_cert (required)
PEM 인코딩된 인증서 파일의 경로입니다.
-
zookeeper.tls_key (required)
PEM 인코딩된 키 파일의 경로입니다.
-
zookeeper.tls_ca (required)
PEM 인코딩된 CA 인증서 파일의 경로입니다.
-
zookeeper.session_timeout
Default:10.0 ZooKeeper 세션 타임아웃(초 단위)입니다.
-
zookeeper.hosts (required)
데이터베이스
-
database
-
database.dburi (required)
SQLAlchemy가 이해하는 URI 형식의 데이터베이스 연결 정보입니다. 자세한 정보는 The SQLAlchemy manual 을 참조하십시오.
Zuul은 PostgreSQL, MySQL 및 MariaDB를 지원합니다. 지원되는 SQLAlchemy 방언(dialects) 및 드라이버는
postgresql://,mysql+pymysql://및mariadb+pymysql입니다.MariaDB를 사용하는 경우, 반드시
mariadb방언을 사용하십시오.드라이버는 필요한 테이블을 생성하고 관리하여 데이터베이스를 자동으로 설정합니다. 따라서 제공된 사용자는 데이터베이스를 관리할 수 있는 충분한 권한을 가져야 합니다. 예를 들어:
GRANT ALL ON my_database TO 'my_user'@'%';
-
database.pool_recycle
Default:1 pool_recycle 값을 조정합니다. 자세한 정보는 The SQLAlchemy manual on pooling 을 참조하십시오.
-
database.table_prefix
Default:'' 테이블 이름 앞에 붙일 문자열(prefix)입니다. 이를 통해 동일한 데이터베이스에 대해 여러 Zuul 배포를 실행할 수 있습니다. 이는 제어할 수 없는 외부 데이터베이스에 의존하는 경우 유용할 수 있습니다. 기본값은 접두사가 없는 것입니다.
-
database.dburi (required)
OIDC
-
oidc
zuul.conf의 이 선택적 섹션이 존재하는 경우, Zuul을 OIDC(OpenId Connect) 아이덴티티 공급자(Identity Provider)로 설정하는 데 사용할 수 있습니다.-
oidc.supported_signing_algorithms
Default:RS256 OIDC 토큰 서명에 지원되어야 하는 알고리즘으로,
,로 구분된 알고리즘 이름 문자열입니다. 현재RS256이 지원됩니다.
-
oidc.default_signing_algorithm
Default:RS256 시크릿(secret) 설정에 지정되지 않은 경우 OIDC 토큰 서명에 사용되는 기본 알고리즘입니다.
-
oidc.signing_key_rotation_interval
Default:604800 서명 키의 순환(rotation) 주기(초 단위)입니다.
-
oidc.supported_signing_algorithms
스케줄러 (Scheduler)
스케줄러는 Zuul의 주요 컴포넌트입니다. 스케줄러는 확장 가능한 컴포넌트입니다. Zuul이 작동하려면 하나 이상의 스케줄러가 항상 실행 중이어야 합니다. 스케줄러는 설정된 원격 시스템 연결로부터 이벤트를 수신하고, 아이템을 파이프라인에 대기열로 넣고(enqueue), 작업을 실행기(executor)에 배포하며, 결과를 보고합니다.
스케줄러는 ZooKeeper 클러스터에 연결할 수 있어야 합니다. 또한 연결이 설정된 모든 서비스(Gerrit, GitHub 등)에도 연결할 수 있어야 합니다.
zuul.conf 의 다음 섹션들은 스케줄러에서 사용됩니다:
-
web
-
web.root (required)
웹 서비스의 루트 URL(예:
https://zuul.example.com/) 입니다.화이트라벨(whitelabeled) 테넌트 설정에 대한 추가 옵션은 tenant.web-root 를 참조하십시오.
-
web.root (required)
-
scheduler
-
scheduler.command_socket
Default:/var/lib/zuul/scheduler.socket 스케줄러 프로세스를 위한 명령 소켓(command socket) 파일의 경로입니다.
-
scheduler.tenant_config
테넌트 구성 파일의 경로입니다. 이 속성은 scheduler.tenant_config_script 와 배타적(exclusive)입니다.
-
scheduler.tenant_config_script
실행하여 테넌트 설정(tenant config)을 로드할 스크립트의 경로입니다. 이 속성은 scheduler.tenant_config 와 배타적입니다.
-
scheduler.default_ansible_version
버전을 지정하지 않은 작업(jobs)에 사용할 기본 ansible 버전입니다. 자세한 내용은 job.ansible-version 을 참조하십시오.
-
scheduler.log_config
로그 설정 파일의 경로입니다.
-
scheduler.pidfile
Default:/var/run/zuul/scheduler.pid PID 잠금(lock) 파일의 경로입니다.
-
scheduler.relative_priority
Default:False 스케줄러가 노드 요청에 대해 상대적 우선순위(relative priority) 정보를 제공해야 하는지 여부를 나타내는 부울(boolean) 값입니다.
모든 경우에 각 파이프라인은 우선순위가 더 높은 파이프라인의 요청을 먼저 충족시키는 데 사용되는 우선순위 값(precedence value)을 지정할 수 있습니다.
relative_priority가True로 설정되면, Zuul은 추가로 동일한 파이프라인의 아이템들을 파이프라인 대기열(queue)별로 그룹화하고 해당 프로젝트 그룹 내 위치에 따라 각 요청에 가중치를 부여합니다. 주어진 대기열의 첫 번째 변경 사항(change)에 대한 요청은 가장 높은 상대적 우선순위를 가지며, 두 번째 변경 사항은 더 낮은 상대적 우선순위를 갖습니다. 파이프라인 내 각 대기열의 첫 번째 변경 사항은 제출 순서나 파이프라인에 다른 변경 사항이 얼마나 있는지에 관계없이 동일한 상대적 우선순위를 갖습니다. 이를 사용하면 변경 사항이 많은 프로젝트가 지배하는 시스템에서 변경 사항이 적은 프로젝트에 대한 노드 할당을 더 빠르게 완료할 수 있습니다.처음 10개의 변경 사항 이후에는 상대적 우선순위의 세밀함이 떨어집니다(10개의 변경 사항 그룹을 동일한 우선순위로 일괄 처리). 마찬가지로 100개의 변경 사항 이후에는 100개 그룹으로 일괄 처리(batching)됩니다. 이는 대기열이 길 경우 불필요한 우선순위 변경으로 인해 추가 부하가 발생하는 것을 방지하기 위함입니다.
이 값이
False(기본값)인 경우, 노드 요청은 파이프라인 우선순위에 따라 정렬된 다음 제출된 순서대로 정렬됩니다. 이 값이True인 경우, 파이프라인 우선순위, 상대적 우선순위, 마지막으로 제출된 순서에 따라 정렬됩니다.
-
scheduler.default_hold_expiration
Default:max_hold_expiration 제공되지 않은 경우 보류된(held) 노드 만료에 대한 기본값입니다. 변경되지 않거나 최대값보다 높은 값으로 설정된 경우 이 값은
max_hold_expiration의 기본값으로 설정됩니다.
-
scheduler.max_hold_expiration
Default:0 자동 보류(autohold) 요청을 위해 보류된 노드가 사용 가능한 상태로 유지되는 최대 시간(초)입니다. 값이 0이면 이 기능이 비활성화되며, 노드는 자동 보류 요청이 수동으로 삭제될 때까지 보류된 상태로 유지됩니다. 보류 요청 생성 중에
max_hold_expiration보다 높은 값이 제공되면 이 값으로 낮아집니다.
-
scheduler.prometheus_port
prometheus 메트릭 클라이언트를 시작할 TCP 포트를 설정합니다.
-
scheduler.prometheus_addr
Default:0.0.0.0 prometheus 메트릭 폴링(poll)을 수신 대기할 IPv4 주소입니다. IPv6를 사용하려면 python>3.8이 필요합니다 issue24209 .
-
scheduler.command_socket
병합기 (Merger)
병합기(Merger)는 선택적인 Zuul 서비스입니다. Zuul이 작동하는 데 필수적이지는 않지만 트래픽이 많은 일부 사이트는 병합기를 실행하면 이점을 얻을 수 있습니다. Zuul은 작업 과정에서 상당히 많은 git 작업을 수행합니다. 테스트할 각 변경 사항은 병합이 가능한지 확인하고 Zuul이 수행하는 테스트가 변경 사항 병합 결과를 정확하게 나타내는지 확인하기 위해 대상 브랜치(target branch)의 현재 상태와 추측 기반으로 병합(speculatively merged)되어야 합니다. Zuul의 설정은 상호 작용하는 git 저장소에 저장되고 동적으로 평가되므로, Zuul은 추가 작업을 수행해야 하는지 결정하기 위해 추측 기반 병합(speculative merge)을 수행해야 하는 경우가 많습니다.
이러한 모든 git 작업은 누적되며 Zuul 실행기(executor)도 이러한 작업을 수행할 수 있지만 많은 작업은 작업을 실행하는 기능에 영향을 미칠 수 있습니다. 따라서 관리자는 실행기의 부하를 줄이기 위해 독립 실행형(standalone) 병합기를 실행할 수 있습니다.
병합기는 연결이 설정된 모든 서비스(Gerrit, GitHub 등)뿐만 아니라 ZooKeeper 클러스터에 연결할 수 있어야 합니다.
zuul.conf 의 다음 섹션은 병합기에서 사용됩니다:
-
merger
-
merger.command_socket
Default:/var/lib/zuul/merger.socket 병합기 프로세스를 위한 명령 소켓 파일의 경로입니다.
-
merger.git_dir
Default:/var/lib/zuul/merger-git Zuul이 git 저장소를 클론(clone)할 디렉토리입니다.
-
merger.git_http_low_speed_limit
Default:1000 HTTP 전송 속도가 git_http_low_speed_time보다 긴 시간 동안 git_http_low_speed_limit보다 낮으면 전송이 중단됩니다.
바이트(bytes) 단위의 값이며, 0으로 설정하면 비활성화됩니다.
-
merger.git_http_low_speed_time
Default:30 HTTP 전송 속도가 git_http_low_speed_time보다 긴 시간 동안 git_http_low_speed_limit보다 낮으면 전송이 중단됩니다.
초(seconds) 단위의 값이며, 0으로 설정하면 비활성화됩니다.
-
merger.git_timeout
Default:300 git 클론 및 페치(fetch) 작업에 대한 타임아웃입니다. 큰 저장소를 다룰 때 유용할 수 있습니다. 큰 타임아웃 값은 저장소가 캐시되지 않은 경우 시작 및 재설정 시간을 늘릴 수 있으므로 이 값을 늘릴 때 주의하십시오.
초(seconds) 단위의 값입니다.
-
merger.git_user_email
git config user.email 에 전달할 값입니다.
-
merger.git_user_name
git config user.name 에 전달할 값입니다.
-
merger.log_config
병합기(merger) 프로세스를 위한 로그 설정 파일의 경로입니다.
-
merger.pidfile
Default:/var/run/zuul/merger.pid 병합기 프로세스를 위한 PID 잠금(lock) 파일의 경로입니다.
-
merger.prometheus_port
prometheus 메트릭 클라이언트를 시작할 TCP 포트를 설정합니다.
-
merger.prometheus_addr
Default:0.0.0.0 prometheus 메트릭 폴링(poll)을 수신 대기할 IPv4 주소입니다. IPv6를 사용하려면 python>3.8이 필요합니다 issue24209 .
-
merger.command_socket
실행기 (Executor)
실행기(Executors)는 작업을 실행하는 역할을 담당합니다. 각 작업의 시작 시, 실행기는 종속된 모든 변경 사항이 적절한 브랜치에 병합된 상태로 작업에서 지정한 모든 git 저장소를 포함하여 Ansible을 실행할 환경을 준비합니다. 제안된 변경 사항에 해당하는 브랜치가 (존재하는 경우 모든 프로젝트에서) 체크아웃됩니다. 작업에서 지정한 모든 역할(roles)도 (적절한 경우 종속된 변경 사항이 병합된 상태로) 존재하며 Ansible 역할 경로(role path)에 추가됩니다. 실행기는 또한 작업에서 요청한 모든 노드가 포함된 Ansible 인벤토리(inventory) 파일을 준비합니다.
실행기에는 병합기(merger)도 포함되어 있습니다. 이것은 실행기가 작업에 사용되는 git 저장소를 준비하는 데 사용되지만, 독립 실행형(standalone) 병합기가 일반적으로 수행하는 모든 작업을 수행하는 데에도 사용할 수 있습니다. 실행기가 두 가지 역할을 모두 수행하므로, 소규모 Zuul 설치 환경에서는 독립 실행형 병합기를 실행할 필요가 없을 수도 있습니다.
실행기는 빌드 노드에 직접 연결할 수 있을 뿐만 아니라 ZooKeeper 클러스터 및 연결이 설정된 모든 서비스(Gerrit, GitHub 등)에 연결할 수 있어야 합니다.
신뢰할 수 있는 플레이북 및 신뢰할 수 없는 플레이북 (Trusted and Untrusted Playbooks)
실행기는 플레이북을 포함하는 프로젝트가 config-project 인지 untrusted-project 인지에 따라 두 가지 실행 컨텍스트 중 하나에서 플레이북을 실행합니다. 플레이북이 config 프로젝트에 있는 경우 실행기는 플레이북을 trusted (신뢰할 수 있는) 실행 컨텍스트에서 실행하며, 그렇지 않은 경우 untrusted (신뢰할 수 없는) 실행 컨텍스트에서 실행합니다.
두 실행 컨텍스트 모두 bubblewrap 을 사용하여 플레이북 실행이 격리되고 제한된 환경 외부의 파일에 액세스할 수 없도록 네임스페이스(namespace)를 만듭니다. 관리자는 제한된 환경에서 사용할 수 있도록 실행기에 추가 로컬 디렉토리를 설정할 수 있습니다.
보안 고려 사항 (Security Considerations)
Bubblewrap은 두 실행 컨텍스트 모두에서 빌드 환경 외부의 파일에 대한 액세스를 제한합니다. 운영자는 아래에 설명된 추가 옵션을 사용하여 trusted 컨텍스트 또는 두 컨텍스트 모두에서 추가 경로에 대해 읽기 전용 또는 읽기-쓰기 액세스를 허용할 수 있습니다. 추가 경로를 추가할 때는 주의해야 하며, (상황에 따라) 모든 trusted 또는 untrusted 플레이북이 이러한 경로에 액세스할 수 있다는 점을 고려하십시오.
실행기가 WinRM 인증서를 사용하도록 설정된 경우 Ansible이 이를 사용하려면 해당 인증서를 bubblewrap 환경에서 사용할 수 있어야 합니다. 이로 인해 해당 실행 컨텍스트의 모든 플레이북에서 해당 인증서에 액세스할 수 있게 됩니다. 운영자는 신뢰할 수 있는 플레이북에만 WinRM 자격 증명을 제공하고 사전 플레이북(pre-playbook)에 빌드별 인증서를 설치하거나 WinRM 대신 Ansible의 실험적인 SSH 지원을 사용하는 것을 고려할 수 있습니다.
실행기에서 로컬 코드 실행이 허용되므로, bubblewrap 또는 커널의 취약성으로 인해 제한된 환경에서 탈출할 수 있는 경우, 사용자는 권한을 상승시켜 실행기에서 사용 가능한 모든 데이터나 시크릿(secrets)에 액세스할 수 있습니다.
실행기에서 실행되는 플레이북은 실행기 자체와 동일한 네트워크 액세스 권한을 갖습니다. 조직 내에서 IP 기반 네트워크 액세스 제어를 고려할 때 이 점을 염두에 두어야 합니다. Zuul의 내부 통신은 인증되고 TLS 인증서로 보호되는 ZooKeeper를 통해 이루어지므로, 이 인증서가 작업(jobs)에 제공되지 않는 한 사용자는 Zuul의 내부 통신에 액세스하거나 이를 방해할 수 없습니다. 그러나 statsd는 인증되지 않은 프로토콜이므로 악의적인 사용자가 거짓 statsd 정보를 보낼 수 있습니다.
Zuul 실행기가 네트워크 메타데이터 서비스가 있는 클라우드 환경에서 실행 중인 경우 사용자가 해당 서비스에 액세스할 수 있습니다. 해당 서비스가 자격 증명을 제공하는 경우 사용자는 해당 자격 증명을 얻어 클라우드 리소스에 액세스할 수 있습니다. 운영자는 이러한 환경에서 실행기가 적절하게 제한된 IAM 프로필로 설정되어 있는지 확인해야 합니다.
설정
zuul.conf 의 다음 섹션들은 실행기에서 사용됩니다:
-
executor
-
executor.command_socket
Default:/var/lib/zuul/executor.socket 실행기 프로세스를 위한 명령 소켓 파일의 경로입니다.
-
executor.finger_port
Default:7900 finger 로그 스트리머에 사용할 포트입니다.
-
executor.state_dir
Default:/var/lib/zuul Zuul이 자신의 상태를 저장해야 하는 디렉토리의 경로입니다.
-
executor.git_dir
Default:/var/lib/zuul/executor-git Zuul이 로컬 git 저장소를 클론(clone)해야 하는 디렉토리입니다. 실행기는 작업 속도를 높이고 추측 기반 병합(speculative merging)을 수행하기 위해 작업하는 모든 git 저장소의 로컬 복사본을 보관합니다.
이것은 git 저장소가 작업 공간(job workspaces)으로 클론될 때 로컬 git 캐시에 하드 링크(hard-linked)될 수 있도록 executor.job_dir 과 동일한 파일 시스템에 있어야 합니다.
-
executor.job_dir
Default:/var/lib/zuul/builds Zuul이 임시 작업 디렉토리를 보관하는 데 사용해야 하는 디렉토리입니다. 각 작업이 실행될 때 해당 작업에 대한 설정 및 스크래치 작업 공간(scratch workspace)을 보관하기 위해 이 디렉토리 아래에 새 항목이 생성됩니다. 이 항목은 작업이 끝날 때 삭제됩니다 (
--keep-jobdir명령줄 옵션이 지정되지 않은 경우).이것은 git 저장소가 작업 공간으로 클론될 때 로컬 git 캐시에 하드 링크될 수 있도록 executor.git_dir 과 동일한 파일 시스템에 있어야 합니다.
-
executor.log_config
실행기(executor) 프로세스를 위한 로그 설정 파일의 경로입니다.
-
executor.pidfile
Default:/var/run/zuul/executor.pid 실행기 프로세스를 위한 PID 잠금(lock) 파일의 경로입니다.
-
executor.private_key_file
Default:~/.ssh/id_rsa 빌드 노드에 로그인할 때 사용할 SSH 개인 키 파일입니다.
참고
RSA 키를 사용하는 경우 PEM 형식으로 인코딩되었는지 확인하십시오 ( ssh-keygen 에
-t rsa -m PEM인수를 사용하십시오).
-
executor.default_username
Default:zuul 이미지 설정에서 제공되지 않은 경우, 빌드 노드에 로그인할 때 사용할 사용자 이름입니다.
-
executor.winrm_cert_key_file
Default:~/.winrm/winrm_client_cert.key Windows 노드에 대한 winrm 연결에 사용할 클라이언트 인증서의 개인 키 파일입니다.
-
executor.winrm_cert_pem_file
Default:~/.winrm/winrm_client_cert.pem Windows 노드에 대한 winrm 연결에 사용할 클라이언트 인증서의 인증서 파일입니다.
참고
현재 winrm을 통해 Windows 노드에 연결할 때 인증서 확인(verification)이 비활성화되어 있습니다.
-
executor.winrm_operation_timeout_sec
Default:None. The Ansible default of 20 is used in this case. WinRM 작업에 대한 타임아웃입니다.
-
executor.winrm_read_timeout_sec
Default:None. The Ansible default of 30 is used in this case. WinRM 읽기에 대한 타임아웃입니다. 간헐적인 네트워크 문제가 있고 읽기 타임아웃 오류가 계속 발생하는 경우 이 값을 늘리십시오.
-
executor.variables
사이트 전체 변수를 제공하기 위한 Ansible 변수 파일의 경로입니다. 단일 딕셔너리로 구성된 YAML 형식의 파일이어야 합니다. 내용은 Ansible 변수로서 모든 작업에 제공됩니다. 이 변수들은 다른 모든 형태(작업 변수 및 시크릿)보다 우선합니다. 작업에서 사용하는 변수와 충돌하지 않도록 이 변수들의 이름을 지정할 때 주의해야 합니다. 변수 이름 앞에 사이트 특정 식별자를 붙이는 것이 좋습니다. 기본값은 사이트 전체 변수를 추가하지 않는 것입니다. 자세한 정보는 User’s Guide 를 참조하십시오.
-
executor.manage_ansible
Default:True 시작 중에 zuul-executor가 지원되는 ansible 버전을 설치해야 하는지 여부를 지정합니다. 이것이
True이면 zuul-executor는 executor.ansible_root 에 ansible 버전을 설치합니다.이를
False로 설정하고 Zuul 설치 후zuul-manage-ansible을 실행하여 Ansible을 수동으로 설치하는 것이 좋습니다. 이는 Ansible 설치 중 발생할 수 있는 오류를 조기에 발견할 수 있다는 장점이 있습니다. 또한 특히 컨테이너화된 Zuul 배포의 경우 예측 가능한 버전을 사용할 수 있다는 장점이 있습니다.
-
executor.ansible_root
Default:<state_dir>/ansible-bin zuul-executor가 지원되는 ansible 설치를 찾을 위치를 지정합니다. 기본적으로 다음 디렉토리를 살펴보고 찾을 수 있는 첫 번째 디렉토리를 사용합니다.
<zuul_install_dir>/lib/zuul/ansible<ansible_root>
ansible_root설정을 사용하면manage_ansible이True인 경우 설치에 사용되는 두 번째 위치를 재정의할 수 있습니다.
-
executor.ansible_setup_timeout
Default:60 작업의 첫 번째 플레이북 전에 실행되는 ansible 설정 플레이북의 타임아웃(초 단위)입니다.
-
executor.disk_limit_per_job
Default:250 이 정수는 실행 중인 작업이 디스크에서 소비할 수 있도록 허용된 최대 메가바이트 수입니다. 작업의 스크래치 공간(scratch space)이 이보다 많은 공간을 소비하면 중단됩니다. 제한을 비활성화하려면 -1로 설정하십시오.
-
executor.trusted_ro_paths
신뢰할 수 있는(trusted) bubblewrap 컨텍스트에 읽기 전용으로 바인드 마운트(bind mount)할
:로 구분된 경로 목록입니다.
-
executor.trusted_rw_paths
신뢰할 수 있는(trusted) bubblewrap 컨텍스트에 읽기-쓰기로 바인드 마운트할
:로 구분된 경로 목록입니다.
-
executor.untrusted_ro_paths
신뢰할 수 없는(untrusted) bubblewrap 컨텍스트에 읽기 전용으로 바인드 마운트할
:로 구분된 경로 목록입니다.
-
executor.untrusted_rw_paths
신뢰할 수 없는(untrusted) bubblewrap 컨텍스트에 읽기-쓰기로 바인드 마운트할
:로 구분된 경로 목록입니다.
-
executor.load_multiplier
Default:2.5 실행기 호스트가 너무 바빠지면 시스템에서 타임아웃 및 기타 악영향이 발생할 수 있습니다. 실행기는 부하가 안전한 수준 이하로 낮아질 때까지 한 번에 1개 이상의 작업을 수락하는 것을 중지합니다. 이 수준은 CPU 수에 load_multiplier 를 곱하여 결정됩니다.
예를 들어, 시스템에 2개의 CPU가 있고 load_multiplier가 2.5인 경우 시스템의 안전 부하는 5.00입니다. 시스템 평균 부하(load average)가 5.00을 넘을 때마다 실행기는 한 번에 여러 작업을 수락하는 것을 중지합니다.
실행기는 30초마다 시스템 부하를 관찰하고 더 많은 작업을 수락할지 여부를 결정합니다.
-
executor.max_starting_builds
Default:None 실행기는 코어가 4개를 초과하는 CPU 시스템에서는 executor.load_multiplier 로 정의된 수만큼 시작 빌드(starting builds)를 수락하고, 코어가 4개 이하인 CPU 시스템에서는 최대 2배까지 수락합니다. 예를 들어 2개의 CPU가 있는 시스템에서는 2 * 2.5 * 2 - 이 실행기에서 최대 10개의 시작 빌드가 실행될 수 있습니다; 8개의 CPU가 있는 시스템에서는 2.5 * 8 - 이 실행기에서 최대 20개의 시작 빌드가 실행될 수 있습니다.
CPU/vCPU 수가 많은 시스템에서는 실행기가 너무 많은 시작 빌드를 수락할 수 있습니다. 이 옵션을 사용하여 실행기의 최대 시작 빌드 수를 고정된 숫자로 제공함으로써 이를 덮어쓸 수 있습니다.
-
executor.min_avail_hdd
Default:5.0 이는 executor.state_dir 디렉토리에 대해 사용 가능한 HDD 스토리지의 최소 백분율입니다. 실행기는 더 많은 HDD 스토리지를 사용할 수 있을 때까지 한 번에 1개 이상의 작업을 수락하는 것을 중지합니다. 사용 가능한 HDD 백분율은 사용 가능한 총 디스크 공간을 총 실제 스토리지 용량으로 나누고 100을 곱하여 계산됩니다.
-
executor.min_avail_inodes
Default:5.0 이는 executor.state_dir 디렉토리에 대해 사용 가능한 HDD inode의 최소 백분율입니다. 실행기는 더 많은 inode를 사용할 수 있을 때까지 한 번에 1개 이상의 작업을 수락하는 것을 중지합니다. 사용 가능한 inode 백분율은 사용 가능한 총 inode를 총 실제 inode 용량으로 나누고 100을 곱하여 계산됩니다.
-
executor.min_avail_mem
Default:5.0 이는 시스템 RAM의 최소 사용 가능 백분율입니다. 실행기는 더 많은 메모리를 사용할 수 있을 때까지 한 번에 1개 이상의 작업을 수락하는 것을 중지합니다. 사용 가능한 메모리 백분율은 사용 가능한 총 메모리를 총 실제 메모리로 나누고 100을 곱하여 계산됩니다. 버퍼(Buffers)와 캐시(cache)는 계산 시 사용 가능한 것으로 간주됩니다.
-
executor.output_max_bytes
Default:1073741824 경고
이 옵션은 더 이상 사용되지 않습니다(deprecated). 앞으로 1GiB의 기본값은 고정되어 변경할 수 없게 될 가능성이 높습니다. 이 옵션은 필요한 경우에만, 그리고 기존 작업을 조정하여 제한을 피하는 데 필요한 기간 동안만 설정하십시오.
Zuul은 단일 Ansible 명령에서 stdout 또는 stderr를 통해 출력되는 총 바이트 수를 이 값으로 제한합니다. 명령이 이 바이트 수보다 많이 출력하면 명령 실행이 실패합니다. 이는 실행기가 ansible 태스크 결과에서 과도하게 많은 양의 데이터를 읽어야 하는 상황으로부터 보호하기 위함입니다.
이 제한으로 인해 작업이 실패하는 경우, 출력을 파일로 리디렉션하고 해당 파일을 별도로 수집하도록 명령 태스크(task)를 조정하는 것을 고려하십시오.
-
executor.hostname
Default:hostname of the server 실행기는 zuul-web에서 접근 가능한 자신의 호스트 이름을 알아야 합니다. 그렇지 않으면 라이브 콘솔 로그 스트리밍이 작동하지 않습니다. 대부분의 경우 이는 자동으로 올바르게 감지됩니다. 그러나 호스트 이름을 올바르게 확인할 수 없는 환경에서 실행하는 경우 여기에서 재정의할 수 있습니다.
-
executor.paused_on_start
Default:false 실행기가 일시 중지된(paused) 모드로 시작해야 하는지 여부입니다. 이러한 실행기는 일시 중지가 해제될 때까지 태스크를 수락하지 않습니다.
-
executor.zone
Default:None 지정된 executor-zone 속성을 가진 노드가 있는 모든 작업을 독점적으로 실행할 executor-zone의 이름입니다. 예를 들어, 퍼블릭 액세스 가능한 IP 주소 없이 클라우드에 노드가 존재할 수 있습니다. 실행기를 영역(zone)에 추가하면 노드가 사설 IP 주소를 사용하도록 설정될 수 있습니다.
Nodepool에서 이를 활성화하려면 공급자 풀(provider pool)에서 node-attributes 설정을 사용합니다. 예를 들어:
pools: - name: main node-attributes: executor-zone: vpn
Zuul의 공급자 설정에서 이를 활성화하려면 레이블의
executor-zone속성을 설정하십시오.
-
executor.allow_unzoned
Default:False executor.zone 이 설정된 경우, 기본적으로 노드에 영역(zone)이 전혀 없더라도 해당 특정 영역의 노드가 있는 작업만 처리합니다.
allow_unzoned를 활성화하면 실행기가 영역이 없는 노드가 있는 작업도 수행할 수 있습니다.
-
executor.merge_jobs
Default:True 전역 병합 작업(global merge job)을 비활성화하려면 이를 false로 설정하십시오. 이는 느린 네트워크에서 실행 중인 영역(zoned) 실행기가 모든 이벤트에 대해 병합 작업을 수행하지 않도록 하려는 경우에 유용합니다. 실행기는 여전히 자신이 실행 중인 빌드에 필요한 병합 작업을 수행합니다.
-
executor.sigterm_method
Default:graceful 실행기가
SIGTERM신호에 반응하는 방식을 결정합니다.- graceful
새 작업 수락을 중지하고 종료하기 전에 실행 중인 모든 작업이 완료될 때까지 기다립니다.
- stop
실행 중인 모든 작업을 중단하고 가능한 한 빨리 종료합니다.
-
executor.prometheus_port
prometheus 메트릭 클라이언트를 시작할 TCP 포트를 설정합니다.
-
executor.prometheus_addr
Default:0.0.0.0 prometheus 메트릭 폴링(poll)을 수신 대기할 IPv4 주소입니다. IPv6를 사용하려면 python>3.8이 필요합니다 issue24209 .
-
executor.command_socket
-
keystore
-
keystore.password (required)
Zookeeper에 저장된 개인 데이터(private data)를 위한 암호화 비밀번호입니다.
-
keystore.password (required)
-
merger
-
merger.git_user_email
git config user.email 에 전달할 값입니다.
-
merger.git_user_name
git config user.name 에 전달할 값입니다.
-
merger.prometheus_port
prometheus 메트릭 클라이언트를 시작할 TCP 포트를 설정합니다.
-
merger.prometheus_addr
Default:0.0.0.0 prometheus 메트릭 폴링(poll)을 수신 대기할 IPv4 주소입니다. IPv6를 사용하려면 python>3.8이 필요합니다 issue24209 .
-
merger.git_user_email
-
ansible_callback "<name>""" title="Link to this definition">
ansible 콜백
<name>을 화이트리스트에 추가합니다. 이 섹션에서 발견된 모든 속성은 ansible.cfg의callback_<name>섹션에 추가됩니다.내장 메일 콜백을 설정하는 예시입니다. zuul.conf의 설정입니다.
[ansible_callback "mail"] to = user@example.org sender = zuul@example.org
ansible.cfg에 다음을 생성합니다:
[defaults] callback_whitelist = mail [callback_mail] to = user@example.org sender = zuul@example.org
웹 서버 (Web Server)
Zuul 웹 서버는 Zuul과의 모든 HTTP 상호 작용을 처리하는 단일 프로세스 역할을 합니다. 여기에는 라이브 로그 스트리밍을 위한 웹소켓 인터페이스, REST API 및 html/javascript 대시보드가 포함됩니다. 이 세 가지는 모두 단일 통합(holistic) 웹 애플리케이션으로 제공됩니다. 추가적으로 지원되는 배포 체계에 대한 정보는 웹 (Web) 배포 를 참조하십시오.
웹 서버는 ZooKeeper 클러스터 및 SQL 데이터베이스에 연결할 수 있어야 합니다. GitHub, Gitlab 또는 Pagure 연결이 설정된 경우 알림을 받을 수 있도록 해당 연결에 접근할 수 있어야(reachable) 합니다.
공통 설정 섹션 외에도 zuul.conf 의 다음 섹션들이 웹 서버에서 사용됩니다:
-
web
-
web.command_socket
Default:/var/lib/zuul/web.socket 웹 프로세스를 위한 명령 소켓 파일의 경로입니다.
-
web.listen_address
Default:127.0.0.1 수신 대기(listen)할 IP 주소 또는 도메인 이름입니다.
-
web.log_config
웹 서버 프로세스를 위한 로그 설정 파일의 경로입니다.
-
web.pidfile
Default:/var/run/zuul/web.pid 웹 서버 프로세스를 위한 PID 잠금(lock) 파일의 경로입니다.
-
web.port
Default:9000 웹 서버 프로세스에 사용할 포트입니다.
-
web.websocket_url
웹 애플리케이션의 기본 URL과 다른 경우, 웹소켓 서비스가 노출되는 기본 URL입니다.
-
web.stats_url
statsd를 통해 내보낸 통계를 쿼리할 수 있는 기본 URL입니다.
-
web.stats_type
Default:graphite 통계 정보를 호스팅하는 서버의 유형입니다. 현재 대시보드에서는 ‘graphite’만 지원됩니다.
-
web.static_path
Default:zuul/web/static 정적 웹 에셋(assets)이 포함된 경로입니다.
-
web.static_cache_expiry
Default:3600 zuul-web에서 제공하는 정적 파일에 대한 Cache-Control max-age 응답 헤더 값입니다. 개발 중에는 Cache-Control을 비활성화하려면 0으로 설정하십시오.
-
web.zone
zuul-web이 배포되는 영역(zone)입니다. 이는 환경에 영역이 다른 실행기(executors)가 있고 모든 실행기가 zuul-web에서 직접 주소를 지정할 수 없는 경우에만 필요합니다. 이 매개변수는 실행기가 직접 주소를 지정할 수 있는 영역을 지정합니다. 라이브 로그 스트리밍은 동일한 영역의 실행기로 직접 이동하며, 영역이 다른 경우 대상 영역의 finger 게이트웨이로 라우팅됩니다.
혼합 시스템(영역이 지정된 실행기와 지정되지 않은 실행기가 있는 경우)에는 영역이 지정된(zoned) zuul-web 서비스와 영역이 지정되지 않은(unzoned) zuul-web 서비스가 모두 있을 수 있습니다. 영역이 지정되지 않은 zuul-web 서버의 경우 zone 매개변수를 생략하십시오.
이를 사용하는 경우 이에 따라 finger 게이트웨이를 설정해야 합니다.
-
web.auth_log_file_requests
Default:false true로 설정하면, 로그 파일의 출처(origin)가 Zuul API와 동일한 경우 JavaScript 웹 클라이언트는 로그 파일에 대한 HTTP 요청과 함께 인증(Authorization) 헤더를 전달합니다. 이는 빌드 로그가 API와 동일한 인증된 엔드포인트(예: 리버스 프록시)를 통해 제공될 때 유용합니다.
-
web.command_socket
-
keystore
-
keystore.password (required)
Zookeeper에 저장된 개인 데이터(private data)를 위한 암호화 비밀번호입니다.
-
keystore.password (required)
인증 (Authentication)
사용자는 API 엔드포인트를 쿼리할 때 유효한 JWT(JSON Web Token)를 전달자 토큰(bearer token)으로 제공하여 보호된 REST API 엔드포인트에 대한 액세스 권한을 부여받을 수 있습니다.
JWT는 서명되어 있으므로 서명을 검증할 수 있도록 Zuul을 설정해야 합니다. JWT 표준에 대한 자세한 정보는 IETF’s RFC page 에서 찾을 수 있습니다.
zuul.conf 의 이 선택적 섹션이 존재하는 경우, 보호된 엔드포인트를 활성화하고 JWT 검증(validation)을 설정합니다:
-
auth <authenticator name>
-
auth <authenticator name>.driver
사용할 서명 알고리즘입니다. 허용되는 값은
HS256,RS256,RS256withJWKS또는OpenIDConnect입니다. 드라이버별 설정 옵션은 아래를 참조하십시오.
-
auth <authenticator name>.allow_authz_override
Default:false JWT가 사전 정의된 액세스 규칙을 재정의하도록 허용합니다. JWT를 사용하여 테넌트(tenants)에 액세스 권한을 부여하는 방법에 대한 자세한 내용은 JWT contents 섹션을 참조하십시오.
-
auth <authenticator name>.realm
인증 영역(realm)입니다.
-
auth <authenticator name>.default
Default:false true로 설정하면 HTTP 인증 오류를 처리할 때 이 영역을 기본 인증 영역으로 사용합니다.
-
auth <authenticator name>.client_id
JWT에서 “aud” 클레임(claim)의 예상 값입니다. 이는 검증에 필요합니다.
-
auth <authenticator name>.issuer_id
JWT에서 “iss” 클레임의 예상 값입니다. 이는 검증에 필요합니다.
-
auth <authenticator name>.uid_claim
Default:sub Zuul이 토큰 소지자(bearer)의 고유 식별자로 사용할 JWT 클레임입니다. JWT에서 이 클레임의 일반적인 목적이므로 기본값은 “sub” 입니다. 이 식별자는 감사 로그(audit logs)에서 사용됩니다.
-
auth <authenticator name>.max_validity_time
JWT가 이 시간(초 단위) 이상 유효하지 않도록 보장하는 선택적 값입니다. 이는 Zuul 운영자가 JWT를 발급하는 서비스를 제어할 수 없고 토큰의 수명이 너무 긴 경우에 유용합니다.
-
auth <authenticator name>.skew
Default:0 Zuul과 JWT 발급기(emitter) 각각의 클럭 간의 시간 오차(skew)를 보정하기 위한 선택적 정수 값입니다. Zuul의 클럭이 늦게 실행되는 경우 음수 값을 사용하십시오.
-
auth <authenticator name>.driver
이 섹션은 다른 인증자(authenticators)와 함께 필요에 따라 반복될 수 있으며, 여러 JWT 발급자의 권한 있는 API 작업에 대한 액세스를 허용합니다.
드라이버별 속성 (Driver-specific attributes)
HS256
이것은 JWT 발급자와 JWT 소비자(예: Zuul) 간의 공유 시크릿(shared secret)만 필요한 대칭 암호화 알고리즘입니다. 이 드라이버는 테스트 배포나 사용자에게 수동으로 JWT를 발급할 수 있는 배포에서 사용해야 합니다.
참고
Zuul 명령줄 인터페이스에서 관리자 명령을 사용하려면 하나 이상의 HS256 인증자가 설정되어 있어야 합니다.
-
secret
JWT에 서명하고 서명을 검증하는 데 사용되는 공유 시크릿입니다.
RS256
이것은 RSA 키 쌍이 필요한 비대칭 암호화 알고리즘입니다. Zuul의 서명 검증에는 공개 키(public key)만 필요합니다.
-
public_key
RSA 키 쌍의 공개 키 경로입니다. Zuul이 읽을 수 있어야 합니다.
-
private_key
선택 사항. RSA 키 쌍의 개인 키(private key) 경로입니다. Zuul이 읽을 수 있어야 합니다.
RS256withJWKS
경고
이 드라이버는 더 이상 사용되지 않습니다(deprecated). 대신 OpenIDConnect 를 사용하십시오.
일부 아이덴티티 공급자(Identity Providers)는 키 세트( JWKS 로도 알려짐)를 사용하므로 인증 토큰의 서명을 검증할 때 사용할 키를 미리 알 수 없습니다; 키의 ID는 JWT의 헤더에 저장되며 이후 원격 키 세트에서 키를 찾아야 합니다. 키 세트는 일반적으로 OpenID Connect 아이덴티티 공급자의 “잘 알려진(well-known)” 설정에서 찾을 수 있는 특정 URL에서 사용할 수 있습니다.
-
keys_url
아이덴티티 공급자의 키 세트를 찾을 수 있는 URL입니다. 예를 들어 Google의 OAuth 서비스의 경우: https://www.googleapis.com/oauth2/v3/certs
OpenIDConnect
OpenID Connect 프로토콜을 구현하는 타사 아이덴티티 공급자를 사용합니다. 발급자(issuer) ID는 아이덴티티 공급자의 “잘 알려진” 설정 URI를 유추할 수 있는 URI여야 합니다. 이것은 Zuul의 웹 사용자 인터페이스에서 인증하기 위해 사용됩니다.
-
scope
Default:openid profile 사용자의 세부 정보에 대한 액세스를 요청할 때 사용할 범위(scope)입니다. 이 속성은 다중 값(multivalued)일 수 있습니다(값은 공백으로 구분해야 함). 대부분의 OpenID Connect 아이덴티티 공급자는 기본 범위인 “openid profile”을 지원합니다. 지원되는 범위의 전체 목록은 아이덴티티 공급자의 잘 알려진 설정의 “scopes_supported” 키 아래에서 찾을 수 있습니다.
-
keys_url
선택 사항. 아이덴티티 공급자의 키 세트를 찾을 수 있는 URL입니다. 예를 들어 Google의 OAuth 서비스의 경우: https://www.googleapis.com/oauth2/v3/certs 입니다. 아이덴티티 공급자의 잘 알려진 설정은 “jwks_uri” 키 아래에 이 URL을 제공해야 하므로 이 속성은 일반적으로 필요하지 않습니다.
일부 공급자는 JWT 사양을 준수하지 않을 수 있으며 추가 설정이 필요할 수 있습니다. 이러한 경우 다음과 같은 추가 값을 사용할 수 있습니다:
-
authority
Default:issuer_id 토큰 응답의 권한(authority)이 요청의 issuer_id와 동일하지 않은 경우 여기에 명시적으로 설정할 수 있습니다.
-
audience
Default:client_id 토큰 응답의 대상(audience)이 요청의 issuer_id와 동일하지 않은 경우 여기에 명시적으로 설정할 수 있습니다.
-
load_user_info
Default:true 웹 UI가 “UserInfo” 엔드포인트 액세스를 건너뛰고 토큰에 반환된 정보에만 의존해야 하는 경우, 이 값을
false로 설정하십시오.
런처 (Launcher)
런처는 빌드 노드 및 기타 리소스의 수명 주기(lifecycle)를 담당합니다. 이들은 가상 머신(임시 또는 장기 실행), 고정 주소가 있는 실제 하드웨어, 컨테이너 또는 기타 리소스일 수 있습니다. 정적 호스트 및 다양한 클라우드 제공업체를 위한 기능을 구현하는 여러 드라이버가 있습니다.
런처는 ZooKeeper 및 자신이 담당하는 빌드 노드와 통신해야 합니다. 여러 런처를 실행할 수 있으며, 이들은 협력하여 요청 처리를 확장(scale out)합니다. 특정 런처는 설정에 따라 특정 연결만 서비스하도록 제한될 수 있습니다.
공통 설정 섹션 외에도 zuul.conf 의 다음 섹션들이 런처에서 사용됩니다:
-
launcher
-
launcher.command_socket
Default:/var/lib/zuul/launcher.socket 런처 프로세스를 위한 명령 소켓 파일의 경로입니다.
-
launcher.temp_dir
Default:/tmp 공급자(providers)에게 이미지를 업로드하는 동안 이미지를 다운로드하는 데 사용되는 임시 디렉토리입니다. Zuul이 관리하는 이미지의 수와 크기에 따라 이 공간이 매우 커야 할 수도 있습니다.
-
launcher.connection_filter
이 런처를 특정 연결에만 사용해야 하는 경우 쉼표로 구분된 문자열로 여기에 지정하십시오.
-
launcher.command_socket
클라이언트 (Client)
Zuul의 명령줄 클라이언트는 Zuul의 웹 서버를 호출하도록 설정될 수 있습니다. 클라이언트는 HTTP를 통해 연결을 설정하기 위해 webclient 섹션이 있는 zuul.conf 파일을 찾습니다.
참고
클라이언트에서 관리자 명령을 활성화하려면 Zuul에 하나 이상의 인증자가 설정되어 있어야 합니다.
Finger 게이트웨이 (Finger Gateway)
Zuul finger 게이트웨이는 로그 결과를 스트리밍해야 하는 빌드 UUID를 지정하는 finger 요청에 대해 표준 finger 포트(79)를 수신 대기합니다. 게이트웨이는 현재 해당 빌드를 실행 중인 실행기를 확인하고 해당 실행기에 로그 스트림을 쿼리합니다.
이것은 표준 finger 명령줄 클라이언트와 함께 사용하기 위한 것입니다. 예:
finger UUID@zuul.example.com
위 명령은 UUID 로 식별된 빌드에 대한 로그를 스트리밍합니다.
Finger 게이트웨이 서버는 ZooKeeper 클러스터뿐만 아니라 실행기의 콘솔 스트리밍 포트(일반적으로 7900)에 연결할 수 있어야 합니다.
Finger 게이트웨이는 선택 사항입니다. 다음 목적 중 하나 또는 둘 다를 위해 실행될 수 있습니다:
최종 사용자가 로그를 스트리밍하기 위해 finger 포트에 연결하도록 허용합니다.
다른 방법으로는 접근할 수 없는 원격 영역(zoned) 실행기를 위해 접근 가능한 로그 스트리밍 포트를 제공합니다.
이 경우, finger 게이트웨이 또는 zuul-web의 로그 스트리밍 요청은 동일한 영역의 finger 게이트웨이를 통해 실행기로 라우팅됩니다.
공통 설정 섹션 외에도 zuul.conf 의 다음 섹션들이 finger 게이트웨이에서 사용됩니다:
-
fingergw
-
fingergw.command_socket
Default:/var/lib/zuul/fingergw.socket 실행기 프로세스를 위한 명령 소켓 파일의 경로입니다.
-
fingergw.listen_address
Default:all addresses 수신 대기(listen)할 IP 주소 또는 도메인 이름입니다.
-
fingergw.log_config
finger 게이트웨이 프로세스를 위한 로그 설정 파일의 경로입니다.
-
fingergw.pidfile
Default:/var/run/zuul/fingergw.pid finger 게이트웨이 프로세스를 위한 PID 잠금(lock) 파일의 경로입니다.
-
fingergw.port
Default:79 finger 게이트웨이에 사용할 포트입니다. 명령줄 finger 클라이언트는 일반적으로 포트를 지정할 수 없으므로, 이 값을 기본값으로 두는 것이 강력히 권장됩니다.
-
fingergw.user
zuul-fingergw 프로세스의 사용자 ID입니다. 데몬으로서의 일반적인 운영에서 finger 게이트웨이는
root사용자로 시작해야 하지만, 이 옵션이 설정되면 시작 중에 권한을 이 사용자로 낮춥니다(drop privileges). 이 옵션을 권한이 없는 (unprivileged) 사용자로 설정하는 것이 좋습니다.
-
fingergw.hostname
Default:hostname of the server 멀티 존(multi-zone) 설정에서 finger 게이트웨이를 실행할 때, 게이트웨이는 zuul-web에서 접근 가능한 자신의 호스트 이름을 알아야 합니다. 그렇지 않으면 라이브 콘솔 로그 스트리밍이 작동하지 않습니다. 대부분의 경우 이는 자동으로 올바르게 감지됩니다. 그러나 호스트 이름을 올바르게 확인할 수 없는 환경에서 실행하는 경우 여기에서 재정의할 수 있습니다.
-
fingergw.zone
finger 게이트웨이가 위치한 영역(zone)입니다. 이는 Zuul 배포가 여러 영역에 분산되어 있고 zuul-web에서 모든 실행기에 직접 연결할 수 없는 경우 라이브 로그 스트리밍에만 필요합니다. 자세한 정보는 executor.zone 을 참조하십시오.
혼합 시스템(영역이 지정된 실행기와 지정되지 않은 실행기가 있는 경우)에는 영역이 지정된 finger 게이트웨이 서비스와 영역이 지정되지 않은 서비스가 모두 있을 수 있습니다. 영역이 지정되지 않은 finger 게이트웨이 서버의 경우 zone 매개변수를 생략하십시오.
Zuul 설치가 신뢰할 수 없는 네트워크에 걸쳐 있는 경우(예: 원격 실행기 영역이 있는 경우), 로그 스트리밍을 처리하는 컴포넌트(zuul-executor, zuul-fingergw 및 zuul-web) 간에 TLS를 사용해야 할 수 있습니다. 그렇다면 다음 옵션을 설정하십시오.
이 섹션은 TLS가 필요한 finger 게이트웨이에 연결할 때 사용할 클라이언트 인증서를 로드하기 위해 zuul-web에서도 읽히며, 콘솔 스트리밍 포트용 서버 인증서를 로드하기 위해 zuul-executor에서도 읽힙니다.
이들 중 하나라도 존재하면 세 가지 인증서 옵션이 모두 제공되어야 합니다.
-
fingergw.tls_cert
PEM 인코딩된 인증서 파일의 경로입니다.
-
fingergw.tls_key
PEM 인코딩된 키 파일의 경로입니다.
-
fingergw.tls_ca
PEM 인코딩된 CA 인증서 파일의 경로입니다.
-
fingergw.tls_verify_hostnames
Default:true 사설 CA의 경우 호스트 이름 확인을 비활성화하는 것이 안전하고 편리할 수 있습니다. 그러나 인증서가 공인 CA에서 발급된 경우 호스트 이름 검증(verification)을 활성화해야 합니다.
-
fingergw.tls_client_only
Default:false TLS를 사용하는 원격 finger 게이트웨이 및 실행기에 도달할 수 있지만, 자체적으로는 TLS를 통해 최종 사용자에게 서비스를 제공하지 않는(즉, 보호된 네트워크 내에서 실행되고 사용자가 finger 포트를 통해 직접 액세스하는) finger 게이트웨이를 제공하려면, 이를
true로 설정하십시오. 그러면 finger 게이트웨이는 TLS를 수신 대기하지 않지만, 원격 TLS 연결을 위해 제공된 인증서를 계속 사용합니다.
-
fingergw.command_socket
연결 (Connections)
Zuul 설정의 대부분은 Zuul이 작동하는 git 저장소에 포함되어 있지만, 시스템을 부트스트랩(bootstrap)하려면 여전히 git 저장소 외부의 일부 설정이 필요합니다. 여기에는 Zuul과 다른 시스템 간의 연결에 대한 정보뿐만 아니라 Zuul이 사용하는 프로젝트 식별도 포함됩니다.
외부 시스템과 상호 작용하려면 Zuul에 해당 시스템에 대한 연결(connection) 이 설정되어 있어야 합니다. Zuul에는 시스템에 연결하는 데 필요한 기능을 구현하는 여러 drivers 가 포함되어 있습니다. Zuul의 각 연결은 드라이버와 연결(associated)됩니다.
연결은 Zuul 런처에서 사용하는 클라우드 제공업체와 통신하는 데에도 사용됩니다.
Zuul에서 연결을 설정하려면 연결에 사용할 고유한 이름을 선택하고 zuul.conf 에 [connection NAME] 형식의 섹션을 추가하십시오. 예를 들어, gerrit 서버에 대한 연결은 다음과 같이 나타날 수 있습니다:
[connection mygerritserver]
driver=gerrit
server=review.example.com
Zuul은 주어진 시스템에서 호스팅되는 변경 사항에 대한 정보를 찾기 위해 단일 연결을 사용해야 합니다. 변경 사항을 찾을 때, 찾고 있는 서버 이름과 일치하는 첫 번째 연결을 사용하여 찾습니다. 일반적으로 주어진 서버에 대해 단일 연결만 사용하는 것이 가장 좋지만 두 개 이상이 필요한 경우(예: 고유한 보고 요구 사항을 충족하기 위해), 기본(primary) 연결을 먼저 나열해야 Zuul이 해당 서버의 모든 변경 사항을 찾는 데 기본 연결을 사용할 수 있습니다.