릴리즈 노트
개발 중
새로운 기능
A new label attribute, label.max-nodes is available to limit the number of nodes of that label available in each tenant in which it appears.
업그레이드 안내
The min-ready setting on labels is now only available for top-level label objects and may not be set within a provider or section stanza.
14.0.0
새로운 기능
잡이 워크스페이스에서 불필요한 프로젝트를 필터링할 수 있습니다. 잡이 특정 프로젝트 집합에서만 동작하는 것으로 알려진 경우, job.include-projects 및 job.exclude-projects 속성을 사용하여 해당 잡에 필요하지 않은 프로젝트의 워크스페이스 준비를 Zuul 에게 건너뛰도록 지시할 수 있습니다.
A new component, the Zuul 런처 (Launcher), is available. Zuul-launcher is responsible for managing images and build nodes, and replaces Nodepool. Zuul supports both systems simultaneously for transitional purposes.
See 빌드 노드(Build Nodes) for an overview of the new system and information about migrating.
새로운 유형의 잡인 “reporter” 잡을 사용할 수 있습니다. 큐 항목에 대해 모든 파이프라인 리포터가 동작된 직후에 사용자가 동작을 수행할 수 있습니다. job.type 구성 속성으로 이 기능을 활성화합니다.
태그로 트리거되는 잡에서 롤 저장소 체크아웃을 위한 브랜치 선택 로직이 변경되었습니다.
이전에는 태그 잡을 위해 롤 저장소를 체크아웃할 때 Zuul 이 다음 항목 중 첫 번째로 일치하는 것을 체크아웃했습니다:
프로젝트 override-checkout
잡 override-checkout
롤 프로젝트가 플레이북 프로젝트인 경우, 플레이북 프로젝트 브랜치
롤 프로젝트 기본 브랜치
이제 다음과 같이 변경되었습니다:
프로젝트 override-checkout
잡 override-checkout
플레이북 프로젝트 브랜치
롤 프로젝트 기본 브랜치
일부 잡에는 변경 사항일 수 있으나, 새로운 순서가 더 직관적일 것으로 기대됩니다.
사용 중단 안내
Zuul 잡 변수 zuul.build_refs.project.src_dir 및 zuul.buildset_refs.project.src_dir 가 잘못하여
zuul.build_refs.src_dir및zuul.buildset_refs.src_dir로 제공되고 있었습니다. 이제 올바른 변수가 제공되며, 이전의 잘못된 변수 사용처는 교체하셔야 합니다. 이전 변수는 향후 Zuul 버전에서 제거될 예정입니다.
The use of Nodepool is now deprecated. Support will be removed in a future version of Zuul (after a generous period where both Nodepool and Zuul-launcher are supported).
13.1.1
보안 이슈
zuul-web 컴포넌트의 취약점을 통해 zuul-web 서버(또는 해당 컨테이너)에서 접근 가능한 모든 파일의 내용을 얻을 수 있었습니다. 이 취약점은 Zuul 4 버전 이전부터 존재한 것으로 보이며, 13.1.0 버전에서 수정되었습니다.
13.1.0
새로운 기능
Gerrit 드라이버에
replication_delay구성이 추가되었습니다. 일부 Gerrit 설치는 여러 서버로 구성되며 이 서버들을 동기화하는 방식(푸시 복제, 풀 복제, 멀티 마스터, 공유 스토리지 등)이 다양합니다. 모든 서버가 갱신된 시점을 확실히 알 수 있는 방법이 없으므로, 이 구성으로 이벤트 처리 전 대기 시간을 둘 수 있습니다. Zuul 은 해당 이벤트를 처리하기 전에 최소 이 시간(초)이 경과했는지 확인합니다.
pipeline.<reporter>.<github source>.check 속성이 이제 풀 리퀘스트가 파이프라인에 큐에 추가되었음을 나타내는 queued 값을 받습니다.
merge_request 이벤트로 트리거되는 GitLab 파이프라인 구성에 브랜치 속성 지원이 추가되었습니다. 이를 통해 특정 브랜치에 대해서만 파이프라인이 동작되며, 브랜치별 동작을 세밀하게 제어할 수 있습니다.
새로운 유형의 잡인 “initializer” 잡을 사용할 수 있습니다. 그래프 내 모든 잡이 하나(또는 소수)의 잡에만 의존하는 매우 큰 잡 그래프를 쉽게 구성할 수 있습니다. job.type 구성 속성으로 이 기능을 활성화합니다.
사용 중단 안내
Gerrit 드라이버의
replication_timeout구성은 이제 무시되며zuul.conf파일에서 제거하십시오. 대안은 새replication_delay구성을 참조하십시오.
버그 수정
Ansible 플레이북이 스스로 기록하지 못하는 경우 Zuul 이 job-output.json 에 알림을 기록합니다. Ansible 이 비정상 종료되거나 Zuul 이 타임아웃으로 강제 중단한 경우 발생할 수 있습니다. 정보는 최소한이지만, 웹 UI 콘솔에서 특정 플레이가 기록되지 않은 이유를 사용자에게 알려 줍니다.
13.0.1
보안 이슈
win_command및win_shell모듈의 스트리밍 로그 처리가no_log지시를 올바르게 따르지 않았습니다. 이전에는 Zuul 이job-output.json파일로의 출력은 억제했지만job-output.txt또는 실시간 로그 스트림 출력은 억제하지 않았습니다.
버그 수정
ansible.builtin.command 및 ansible.builtin.shell 용 Zuul 모듈이 no_log: True 가 구성된 경우를 이제 올바르게 처리합니다. 이전에는 프로세스 출력이 버퍼를 채우면 잡이 교착 상태에 빠졌습니다.
13.0.0
새로운 기능
Ansible 11 버전을 사용할 수 있습니다. 기본 Ansible 버전은 여전히 9 이며, job.ansible-version 으로 11 버전을 선택할 수 있습니다.
authorization-rule.conditions 속성에 이제 boolean 클레임에 대한 조건을 포함할 수 있습니다.
Implemented support for the reject attribute in the GitLab driver. It allows specifying Merge Requests which should not be enqueued into a pipeline. The supported conditions cover the same Merge Requests’ parameters as available in the existing require attribute – filtering whether the Merge Request must (not) be open, merged, approved or contain some labels.
변경 사항이 잡의 job.include-vars, job.pre-run, job.run 또는 job.post-run 속성에 있는 파일을 수정하면, 해당 잡은 잡에 구성된 파일 매처와 관계없이 동작됩니다 (job.match-on-config-updates 가 비활성화된 경우 제외).
따라서 파일 매처가 있는 잡은 해당 파일 변경 사항시 동작되도록 플레이북이나 include-vars 파일을 더 이상 명시적으로 나열할 필요가 없습니다.
잡 동작 중 Ansible 이 도달 불가 호스트를 보고하면 이제 nodeset.alternatives 기능이 사용됩니다. 동작 중 노드셋으로의 연결이 끊기면 더 안정적인 노드셋으로 폴백하는 데 활용할 수 있습니다.
업그레이드 안내
Ansible 8 버전 지원이 제거되었습니다. 이 버전에 의존하는 기존 잡은 업그레이드 전에 Ansible 9 로 이전하십시오.
Github 및 Pagure 리포터의 이전에 사용 중단된
status-url속성이 제거되었습니다.
12.1.0
새로운 기능
OpenID Connect (OIDC) 호환 워크로드 신원 연합 지원이 추가되었습니다. secret.oidc 로 구성하면 Zuul 이 OIDC ID 토큰을 생성해 잡에 전달하며, Zuul 을 OIDC IdP 로 신뢰하는 외부 서비스 인증에 사용할 수 있습니다. 자세한 내용은 Secret 을 참조하십시오.
동일한 프로젝트-브랜치에 대해 브랜치 헤드가 진행된 경우 타이머 트리거 큐 항목을 여러 큐 항목에 추가할 수 있는 옵션이 추가되었습니다.
이전에는 타이머 트리거 항목에 프로젝트와 브랜치 정보만 포함되어 있어, 해당 항목의 잡이 타이머 간격보다 오래 동작되면 Zuul 이 두 번째 항목을 큐에 넣지 않았습니다(기반 저장소가 변경되었어도 첫 항목과 동일한 것으로 간주됨).
타이머 트리거의 새
dereference속성을 구성하면 Zuul 이 큐 항목의 브랜치 헤드 SHA 정보를 포함합니다. 따라서 동일한 프로젝트-브랜치의 큐 항목이 이미 큐에 있는 상태에서 타이머가 발동되면, 첫 항목이 큐에 들어간 이후 브랜치가 변경되었을 때만 두 번째 항목이 큐에 들어갑니다. 두 항목의 브랜치 헤드 SHA 가 같으면 두 번째 항목은 큐에 추가지 않습니다.구성 시 해당 큐 항목에 대해 잡의
zuul변수에newrev가 제공됩니다.dereference 를 구성하지 않으면
newrev가 제공되지 않는 이전 동작이 기본값으로 유지됩니다.
대부분의 파이프라인 트리거에서 이제
debug속성을 받으며, 사용자가 변경 사항이 파이프라인에 큐에 추가되었는지 여부와 특정 잡이 동작되었거나 동작되지 않은 이유에 대한 추가 디버그 정보를 요청할 수 있는 트리거를 추가하는 데 사용할 수 있습니다.예를 들어, 사이트에서 “check debug” 코멘트와 매칭되는 트리거를 추가해 변경 사항에 대한 확장 보고를 요청할 수 있습니다.
테넌트 관리자가 이제 웹 UI 또는 zuul-client 명령으로 테넌트의 이벤트 처리를 일시 정지·재개할 수 있습니다.
12.0.0
새로운 기능
잡에서 이제 job.pre-timeout 값을 구성할 수 있습니다. 이 타임아웃은 pre-run 플레이북이 소비할 수 있는 시간을 제한합니다. 이 타임아웃은 일반 job.timeout 값에 포함되며, job.pre-timeout 이 구성되지 않으면 job.timeout 이 사용됩니다.
Zuul 익스큐터에 새로운 거버너 센서가 추가되어 동작기가 새 프로세스 한계에 도달하는 시점을 감지합니다. 동작기에서 Zuul 잡을 동작하려면 Bubblewrap, Ansible, SSH, SSH Agent 등 수많은 프로세스가 필요합니다. 이 새로운 거버너 센서는 이러한 다수의 프로세스 중 하나를 포크(fork)하지 못해 잡이 실패하는 것을 방지하는 데 도움을 줍니다. 대신 동작기는 프로세스 한계에서 벗어날 때까지 동작을 일시 정지합니다.
윈도우 호스트의
`win_shell`및win_command잡에 실시간 콘솔 로그 스트리밍을 사용할 수 있습니다.
업그레이드 안내
MariaDB 데이터베이스로 Zuul 을 사용할 때 database.dburi 구성에서
mariadb방언과mariadb+pymysql://를 사용하도록 구성하십시오.
web.status_url 구성 옵션은 더 이상 지원되지 않으며, 파이프라인 리포터 메시지에서 status_url, change, changes 문자열 치환을 사용하면 오류가 발생합니다.
윈도우 호스트용 실시간 콘솔 로그 스트리밍 추가에 따라 다음 중 하나가 필요합니다:
윈도우 호스트용 기본 잡의 첫 pre-run 플레이북에
zuul_win_console:태스크를 추가하고, 호스트의 19886 포트 연결을 허용하십시오. 이렇게 하면 포직스 시스템과 동일한 방식으로 자동 실시간 로그 스트리밍이 가능합니다.장기 동작 윈도우 호스트에서 위 방법이 어려우면 해당 호스트에
zuul_console_disabled: True를 구성하십시오. 원격 호스트의 스풀링 파일에 콘솔 출력을 쓰지 않으며, 그렇지 않으면 삭제되지 않을 수 있는 파일 쓰기가 비활성화됩니다.
포직스 와 윈도우 로그 스트리밍 서버는 동일 호스트에서 공존할 수 있도록 서로 다른 포트(각각 19885, 19886)에서 동작합니다.
버그 수정
잡 JSON API 응답에 이제 해당 잡의 job.post-timeout 구성 값이 포함됩니다.
11.3.0
새로운 기능
잡의 개별 속성을 이제 final 로 표시하여 해당 속성을 덮어쓰려는 시도가 오류를 일으키도록 할 수 있습니다. job.attribute-control 을 참조하십시오.
Zuul 은 이제 동작 예정인 잡의 강한 의존성인 모든 잡을 동작합니다.
이전에는 잡 B 가 잡 A 에 강하게 의존하고 잡 A 가 파일 매처 때문에 동작되지 않으면 Zuul 이 오류를 보고했습니다. 이제는 잡 B 가 동작될 경우 잡 A 의 파일 매처를 무시합니다.
이를 통해 파일 매처를 더 단순히 하고 동작을 더 직관적으로 할 수 있으며, 잡 A 에는 절대 매칭되지 않는 파일 매처가 있어도 잡 B 가 동작되면 함께 동작되는 잡 그래프 패턴을 사용할 수 있습니다.
Zuul 익스큐터에서 저장소 체크아웃을 비활성화하는 job.workspace-checkout 옵션이 추가되었습니다. 익스큐터에서 사용하지 않는 대형 저장소를 준비할 때 시간이나 공간을 절약하는 데 유용합니다.
업그레이드 안내
Gerrit 드라이버에 리뷰 알림 처리를 구성하는 pipeline.reporter.<gerrit reporter>.notify 옵션이 추가되었습니다. Gerrit changes API Docs 에 명시된 대로, 잡 결과를 리뷰 코멘트로 보고하지 않도록 하는 데 사용합니다. Gerrit 리포터 구성 문법 때문에 “notify” 단어는 더 이상 리뷰 레이블로 사용할 수 없습니다.
단일 Ansible 태스크의 stdout 과 stderr 합산 태스크가 1GiB 로 제한됩니다. 기존 잡이 이 한도를 정당히 초과하는 경우를 대비해 한도를 일시적으로 늘리는 익스큐터 구성 옵션 executor.output_max_bytes 가 추가되었습니다. 이 옵션은 향후 Zuul 버전에서 제거될 가능성이 있습니다. 이 문제를 피하려면 출력량이 많은 Ansible 태스크는 해당 출력을 별도로 수집·처리하는 파일로 리다이렉트하도록 조정하십시오.
스케줄러는 시작 후 더 이상 smart-reconfig 를 트리거하지 않으며, 스케줄러 재시작만으로는 로컬 테넌트 구성이나 zuul 구성 파일의 시스템 속성 변경 사항이 반영되지 않습니다. 테넌트 구성 또는 zuul 구성 변경 시에는 항상 명시적인 (smart) 재구성이 필요합니다.
11.2.0
새로운 기능
project.<pipeline>.fail-fast 속성이 이제 투표 잡의 노드 실패에도 적용됩니다.
잡에서 이제 job.include-vars 잡 구성을 사용해 저장소 내 파일에서 변수를 읽을 수 있습니다. 변수가 많거나 자주 바뀌는 잡은 변수를 파일에서 불러와 Zuul 구성 복잡도를 줄일 수 있습니다. 이 파일은 잡 동작 시 읽히므로 값 변경 사항이 Zuul 테넌트 재구성을 유발하지 않습니다.
업그레이드 안내
Ansible 8 은 유지보수되지 않아 Zuul 에서 사용 중단되었으며, 향후 Zuul 버전에서 제거될 예정입니다. Zuul 의 기본 버전은 이제 Ansible 9 입니다.
Github Enterprise 2.21 미만 버전은 지원되지 않습니다.
태그에서 동작할 때 include-vars 동작이 변경되었습니다. 이전에는 ref(변경 사항이 아닌 태그 또는 브랜치)에서 동작되는 잡의 job.include-vars 사용 시 override-checkout 또는 프로젝트 기본 브랜치에서 변수 파일을 가져왔습니다. 잡이 include-vars 프로젝트의 참조 에서 동작되는 경우 이제 해당 참조 체크아웃 자체에서 파일을 가져오며, 사용자에게 더 유용하고 직관적일 것으로 예상됩니다. 이전 동작을 복원하려면 job.include-vars.use-ref 를 사용하십시오.
11.1.0
새로운 기능
테넌트 구성 파일에 명시적으로 구성하면, 신뢰할 수 없는 프로젝트가 특정 다른 신뢰할 수 없는 프로젝트가 동작하는 잡을 구성하도록 허용할 수 있습니다. “슈퍼 프로젝트” 가 자신의 “하위 프로젝트” 가 동작하는 잡을 구성할 수 있습니다.
자세한 내용은 tenant.untrusted-projects.<project>.configure-projects 를 참조하십시오.
프로젝트 스탠자에 이제 project.branches 속성을 통해 명시적 브랜치 구성을 포함할 수 있습니다. 다른 프로젝트를 구성하는 프로젝트(신뢰할 수 있는 / 신뢰할 수 없는 구분 없이)가 특정 브랜치에서 어떤 잡이 동작될지 더 잘 제어할 수 있습니다.
테넌트 구성에서 Zuul 이 리소스 고갈을 겪지 않도록 파이프라인에 큐에 추가할 변경 사항 건수 상한을 지정할 수 있습니다. 대부분의 경우 필요하지 않으며 기본값은 제한 없음입니다.
일부 잡 속성은 “override control” 을 통해 상속 동작을 바꿀 수 있습니다.
!override와!inherit라는 두 가지 새 YAML 태그가 도입되어, 특정 잡 속성이 부모 잡에서 값을 상속할지 덮어쓸지 명시적으로 지정할 수 있습니다.일반 잡 문서 Job 및 다음 개별 속성 문서를 참조하십시오:
사용 중단 안내
Github 및 Pagure 리포터의
status-url속성은 사용 중단되었습니다. 리포터는 현재 이 구성을 무시하고 항목 정보를 위한 최적의 URL 을 자동으로 사용합니다.
버그 수정
zuul_return Ansible 플러그인이 이제 전달된 데이터, 특히 warnings 및 아티팩트 데이터의 스키마를 검증합니다. 이전에는 잘못된 구조의 데이터에 대한 동작이 정의되지 않았고 조용히 무시되거나 파이프라인 처리에서 예외를 일으키는 경우가 있었습니다. 이제 데이터 형식 오류는 잡 동작 중 감지되며 Ansible 오류와 (무시하지 않을 경우) 잡 실패를 유발합니다.
11.0.1
버그 수정
사후 동작 플레이북과 교차 동작되도록 한 최근 보안 수정이, cleanup 플레이북에서 도달 불가 호스트가 나오면 잡을 잘못 재시도하게 했습니다. 수정되어 이제 cleanup 플레이북이 도달 불가 호스트를 만나도 잡이 재시도되지 않습니다.
11.0.0
업그레이드 안내
기존 cleanup-run 플레이북은 이제 잡의 사후 동작 단계에서 동작됩니다. 플레이북 동작 순서가 이전과 달라지는 동작 변경입니다. 이전에는 모든 cleanup-run 플레이북이 모든 사후 동작 플레이북 이후에 동작되었습니다. 이제 Zuul 은 상속 계층의 각 단계에서 사후 동작, 그다음 cleanup-run 플레이북을 동작합니다(서로 다른 계층의 사후 동작 과 cleanup-run 플레이북이 교차 동작됨).
일부 잡에 영향을 줄 수 있습니다. 특히, 더 중첩된 사후 동작 플레이북(예: 로그 수집 플레이북)이 항상 동작된다고 가정하는 사후 동작 플레이북이 있는 잡을 확인하십시오. 로그 수집은 로그가 생성되는 잡 수준보다 더 깊게 중첩되지 않도록 하십시오. 사후 동작 플레이북에 필요한 아티팩트를 제거하는 cleanup-run 플레이북도 유의하십시오. 더 중첩된 cleanup-run 플레이북이 덜 중첩된 사후 동작 플레이북보다 먼저 동작될 수 있으므로, cleanup 동작을 덜 중첩된 수준으로 옮겨야 할 수 있습니다.
To facilitate upgrades, Zuul will ignore the result of cleanup-run playbooks when specified using the old syntax, but once migrated to the new syntax using post-run, these playbooks may cause a POST_FAILURE just like any other post-run playbook.
사용 중단 안내
The job.cleanup-run attribute is deprecated. Instead, list cleanup playbooks under job.post-run and set the job.post-run.cleanup flag.
보안 이슈
악의적인 cleanup-run 플레이북이 있는 잡이 부모의 자격 증명이나 Nodepool SSH 키에 접근할 수 있는 취약점이 발견되었습니다.
To protect against this, cleanup-run playbooks are now executed during the post-run phase of the job, and Zuul will only execute the post-run playbooks corresponding to the inheritance level of previously-executed pre-run playbooks.
10.2.0
새로운 기능
순환 의존성 큐 항목에서 중복 제거된 잡이 어떤 참조 에 대해 동작 중인지 나타내는 새 잡 변수 zuul.build_refs 를 사용할 수 있습니다.
스케줄러에서 이제
--disable-pipelines인자를 받으며, 이 인자를 사용하면 모든 파이프라인 이벤트를 버리도록 지시합니다. 잡을 시작하거나 보고하지 않는 Zuul 구성으로 동작하는 시스템 구성에 활용할 수 있습니다.
Gerrit 드라이버에서 새 합성 트리거 pipeline.trigger.<gerrit source>.approval-change 를 지원합니다. approval 과 비슷하지만, 승인이 단순히 있는 것이 아니라 승인 값이 변경될 때만 트리거됩니다.
gitlab driver now handles the merge request ‘close’ action.
GitHub 드라이버에서 이제 테넌트 구성 exclude-locked-branches 로 잠긴 (읽기 전용) 브랜치를 제외할 수 있습니다.
사용 중단 안내
일부 파이프라인 리포터 구성에서 사용 가능한 치환 필드
change,changes,status_url은 사용 중단되었습니다. 항목 정보를 위한 최적의 URL 이 자동으로 사용되는item_url을 사용하십시오.
버그 수정
변경이 files 또는 irrelevant-files 매처에 매칭되는지 판단할 때 의사 파일 “/COMMIT_MSG” 는 전혀 고려되지 않습니다. 이전에는 대부분의 경우 고려되지 않았지만 irrelevant-files 스탠자의 부정 정규 표현식에서는 여전히 영향을 줄 수 있었습니다. 수정되어 “/COMMIT_MSG” 를 명시적으로 언급하는 정규식은 이를 제거해도 됩니다.
job.files 와 job.irrelevant-files 속성이 이제 부정을 포함한 새 regular expression 문법을 완전히 지원합니다.
기타 안내
Zuul 은 시작 시 Gerrit 의 submitWholeTopic 구성을 확인합니다. 이 구성이 변경되거나 Gerrit 이 업그레이드되면 변경 사항을 반영하려면 동작 중인 모든 Zuul 스케줄러를 재시작하십시오.
10.1.0
새로운 기능
익스큐터가 이제 스토리지 사용량뿐 아니라 파일시스템 inode 사용량도 모니터링합니다. 잡 수락 임계값은 executor.min_avail_inodes 로 독립적으로 구성할 수 있습니다. inode 사용량은 zuul.executor.<executor>.pct_used_inodes 메트릭으로 별도 보고됩니다.
변경 사항의 토픽(있는 경우)이 이제 zuul.topic 잡 변수에 보고됩니다.
Zuul 웹 UI 의 빌드 및 빌드셋 페이지에서 부분 문자열 검색을 지원합니다. 검색어 어디에든 임의 문자를 나타내는 별표(*) 자리 표시자를 넣어 사용하며, 잡 이름, 브랜치, 프로젝트, 파이프라인 필터에 적용됩니다.
순환 의존성 큐 항목에 연결된 모든 변경 사항(참조) 정보가 이제 zuul.buildset_refs 변수에서 제공됩니다.
잡에서 원격 호스트가 도달 불가로 판명되면 Zuul 은 이후 모든 플레이북에서 해당 호스트를 zuul_unreachable 이라는 새 그룹에 자동으로 넣습니다. 이미 도달 불가로 알려진 호스트에서 특정 사후 동작 단계 동작을 피하는 데 활용할 수 있습니다.
사용 중단 안내
pipeline.trigger.<github source>.event 를 목록으로 지정하는 방식은 사용 중단되었습니다. 해당 인스턴스를 각각 단일 이벤트를 가진 여러 트리거로 지정하도록 수정하십시오.
requested 사용은 이미 일정 기간 사용 중단되었습니다. 사용 시 구성 문법 경고가 발생하며, 향후 Zuul 버전에서는 오류가 발생합니다.
pipeline.trigger.<github source>.require-status 사용은 이미 일정 기간 사용 중단되었습니다. 사용 시 구성 문법 경고가 발생하며, 향후 Zuul 버전에서는 오류가 발생합니다.
버그 수정
종속 파이프라인에서 누락된 레이블로 제출할 수 없는 Gerrit 변경 사항을 Zuul 이 잘못 큐에 추가했던 버그를 수정했습니다.
구체적으로, 변경에 Zuul 이 제공하는 레이블 중 하나라도 점수가 있으면 다른 누락된 레이블이 잘못 무시되고 있었습니다.
브랜치별 큐의 모니터링 통계가 이제 공유 브랜치 큐와 구분됩니다. 공유 브랜치 큐 통계는 다음 위치에 있습니다:
브랜치별 큐 통계는 이제 다음 위치에 있습니다:
이 변경 사항 전에는 한 브랜치 큐의 브랜치별 큐 통계가 다른 큐의 통계를 덮어써 불완전하거나 잘못된 데이터가 나올 수 있었습니다.
10.0.0 에서 supercedent 파이프라인이 의존성 순환에 속한 변경 사항(병합 여부와 무관)을 큐에 추가할 때 예외가 발생할 수 있었습니다. 수정되었으며, supercedent 파이프라인에서는 순환 의존성이 무시된다는 점을 명확히 하도록 문서가 갱신되었습니다.
zuul.items.project.src_dir 값이 잡의 워크스페이스 스킴을 반영하지 않고 항상 golang 스킴으로 구성되고 있었습니다. 수정되어 이제 잡의 스킴을 반영합니다.
10.0.0
서문
이 release에는 순환 의존성의 내부 처리에 대한 대규모 리팩터링이 포함됩니다. Zuul 출력을 사용하는 쪽(일부 리포터 또는 REST API)에 변경 사항이 필요하며 업그레이드 시 주의가 필요합니다. 변경 사항 간 의존성 순환이 있는 경우 Zuul 파이프라인 큐 항목은 이제 단일 변경 사항이 아니라 여러 변경 사항을 나타냅니다. 동작과 정보 표시가 더 직관적이며 잡 중복 제거 처리도 개선됩니다.
새로운 기능
Ansible 9 버전을 사용할 수 있습니다. 기본 Ansible 버전은 여전히 8 이며, job.ansible-version 으로 9 버전을 선택할 수 있습니다.
업그레이드 안내
Ansible 6 버전 지원이 제거되었습니다. 이 버전에 의존하는 기존 잡은 업그레이드 전에 Ansible 8 로 이전하십시오.
Zuul 은 동작 중에는 이 버전으로 업그레이드할 수 없습니다. 업그레이드 절차:
이전 버전으로 동작 중인 모든 Zuul 컴포넌트를 중지합니다(Nodepool 중지는 선택 사항).
스케줄러 머신 또는 이미지에서(스케줄러를 중지한 상태로) 새 버전의 Zuul 로 다음 명령을 동작합니다:
zuul-admin delete-state –keep-config-cache
ZooKeeper 의 모든 파이프라인 상태가 삭제되지만, 구성 캐시(zuul.yaml 의 프로젝트 구성 전체)는 유지됩니다. 시작 과정이 빨라집니다.
새 버전으로 모든 Zuul 컴포넌트를 시작합니다.
MQTT 리포터에 재시도 빌드와 최종 빌드를 연결하는 job_uuid 필드가 포함됩니다.
사용 중단 안내
파이프라인 리포터 메시지의 문자열 치환 문법이 변경되었습니다. 큐 항목이 이제 여러 변경을 나타낼 수 있으므로 메시지의 {change} 치환은 사용 중단되었으며 향후 버전에서 제거됩니다. 하위 호환을 위해 현재는 큐 항목의 변경 사항 목록에서 임의의 첫 번째 변경을 가리킵니다. 목록 형태인 새 {changes} 치환으로 사용처를 업그레이드하십시오.
SMTP 리포터 메시지의 문자열 치환 문법이 변경되었습니다. 큐 항목이 이제 여러 변경을 나타낼 수 있으므로 메시지의 {change} 치환은 사용 중단되었으며 향후 버전에서 제거됩니다. 하위 호환을 위해 현재는 큐 항목의 변경 목록에서 임의의 첫 번째 변경을 가리킵니다. 목록 형태인 새 {changes} 치환으로 사용처를 업그레이드하십시오.
MQTT 및 Elasticsearch 리포터에 이제 항목에 포함된 변경을 나타내는 딕셔너리 목록인 changes 필드가 포함됩니다. 이전에 항목에 연결된 유일한 변경을 나타내던 스칼라 필드는 하위 호환을 위해 유지되며 큐 항목의 변경 목록에서 임의의 첫 번째 변경을 가리킵니다. 이 스칼라 값은 향후 Zuul 버전에서 제거됩니다. 새 changes 항목을 사용하도록 사용처를 업그레이드하십시오.
zuul.bundle_id 변수는 사용 중단되었으며 향후 버전에서 제거됩니다. 하위 호환을 위해 현재는 항목 uuid 를 복제한 값을 반환합니다.
9.5.0
업그레이드 안내
Ansible 6 은 유지보수되지 않아 Zuul 에서 사용 중단되었으며, 향후 Zuul 버전에서 제거될 예정입니다. Zuul 의 기본 버전은 이제 Ansible 8 입니다.
9.4.0
새로운 기능
Gerrit 드라이버에서 이제
hashtags-changed이벤트를 트리거로 지원하며, 해시태그를 트리거 또는 파이프라인 요구 사항으로 사용할 수 있습니다.
버그 수정
MQTT 리포터가 이제 재시도된 빌드의 log_url 을 올바르게 구성합니다. 빌드 결과 페이지 링크는 전용 web_url 필드로 보고됩니다.
9.3.0
새로운 기능
빌드 모니터링 통계가 이제 더 많은 결과에 대해 출력됩니다. 이전에는 SUCCESS, FAILURE, ERROR 등 일부 빌드 결과에만 출력되었으나 이제 NODE_FAILURE 및 기타 결과 값이 포함됩니다.
Gerrit 드라이버에 Google Cloud Pub/Sub 를 이벤트 소스로 사용하는 기능이 추가되었습니다.
업그레이드 안내
대규모 SQL 스키마 마이그레이션이 포함되어 있어 업그레이드 시 각별한 주의가 필요합니다.
문제 발생에 대비해 업그레이드 전 데이터베이스 백업을 권장합니다. 예상 소요 시간을 확인하고 데이터 무결성 문제를 조기에 발견하려면 개발 환경에서 데이터베이스 복사본으로 마이그레이션을 먼저 테스트하는 것도 권장합니다.
스키마 업그레이드 중에는 Zuul 이 정상적으로 동작할 수 없습니다. 다음 절차를 권장합니다:
데이터베이스 백업 수행
모든 Zuul 컴포넌트 중지
스케줄러 하나를 시작하고 마이그레이션 및 초기화가 완료될 때까지 대기
나머지 Zuul 컴포넌트 시작
마이그레이션이 실패하고 백엔드 데이터베이스가 PostgreSQL 이면 마이그레이션이 롤백되며 Zuul 을 이전 버전으로 재시작할 수 있습니다. 백엔드가 MySQL 이면 오류가 충분히 일찍 발생하면 마이그레이션이 롤백될 수 있습니다(스케줄러 로그에서 “Early error in schema migration, rolling back” 확인). 마이그레이션 후반에 오류가 나면 메뉴얼 개입이 필요할 수 있습니다.
Zuul 의 GitHub 드라이버가 GitHub 기본 동작에 맞추어 기본 병합 모드를 갱신했습니다. 프로젝트에서 Zuul 기본 병합 모드를 명시적으로 덮어쓰지 않는 한 Git 2.33.0 이상이 필요합니다. 병합 모드를 덮어쓰지 않으면 Git 및 GitHub 버전에 따라 선택되는 병합 알고리즘이 바뀔 수 있으며, 더 결정론적인 결과를 제공할 것으로 예상됩니다.
부모 잡의 입력 데이터(반환 데이터 또는 아티팩트)는 더 이상 자식 잡의 중복 제거 여부에 영향을 주지 않습니다.
버그 수정
always-dynamic 으로 구성된 브랜치에 대해서는 트리거하지 않도록 타이머 드라이버 동작을 수정했습니다.
9.2.0
새로운 기능
Gerrit 및 GitHub 저장소는 이제 각 시스템에서 지정한 기본 브랜치를 프로젝트 기본 브랜치로 자동 사용합니다. Zuul 에서 project.default-branch 구성으로 여전히 덮어쓸 수 있습니다.
스트리밍 잡 출력에서 발견되면 Zuul 의 조기 실패 감지를 트리거하여, 실패한 잡이 끝나기 전에 종속 파이프라인 게이트 재구성이 시작되도록 하는 정규 표현식을 사용자가 지정할 수 있는 새 잡 구성 옵션 job.failure-output 이 추가되었습니다.
변경 사항 간 의존성을 과도하게 처리해 리소스가 고갈되는 것을 막기 위한 구성 두 가지가 추가되었습니다. Gerrit 드라이버에서는 이벤트 처리 시 내부 의존성 처리를 제한하는 <gerrit connection>.max_dependencies 를 구성할 수 있고, 파이프라인에 변경 사항을 넣을 때 테넌트 처리를 제한하는 tenant.max-dependencies 테넌트 구성을 사용할 수 있습니다.
개별 프로젝트 큐에 대한 추가 파이프라인 통계는 zuul.tenant.<tenant>.pipeline.<pipeline>.queue 에서 확인할 수 있습니다.
regular expressions 를 받는 구성 옵션이 정규식을 부정 매칭으로 처리하도록 지정하는 새 문법을 받도록 갱신되었습니다.
종속 파이프라인 actionable window 의 상한을 pipeline.window-ceiling 구성으로 지정할 수 있습니다. 기본값은 상한 없음입니다.
업그레이드 안내
GitHub 드라이버를 앱 모드로 사용 중이라면
api_token을 생성해 추가하는 것을 권장합니다. 필수는 아니지만 rate limit 이 늘고, 앱이 설치되지 않은 프로젝트에 대한 기능이 추가됩니다.
사용 중단 안내
Python 문법 정규 표현식은 사용 중단되었으며, 속도와 안전을 위해 RE2 문법 사용을 권장합니다. 부정 lookahead 는 negate 키워드로 대체할 수 있습니다. 자세한 내용은 정규 표현식 (Regular Expressions) 를 참조하십시오.
Zuul 이 RE2 에서 지원하지 않는 Python 문법 정규 표현식을 발견하면 구성 문법 경고를 등록합니다. 웹 인터페이스의 구성 오류 페이지에서 확인할 수 있습니다.
향후 Zuul 버전에서 Python 정규식 지원이 완전히 제거되며 이 경고는 오류로 처리됩니다.
9.1.0
새로운 기능
Ansible 명령 태스크 동작 시 stdout 과 stderr 를 분리해 유지하도록 Zuul 에 지시하는 새 잡 속성 ansible-split-streams 가 추가되었습니다.
사용 중단 안내
Zuul 이 표준 Ansible 동작에 맞추기 위해 사용자 정의 Ansible 명령 모듈의 동작을 변경하고 있습니다.
이전 동작이자 현재 기본값은 stdout 과 stderr 스트림을 합치는 것입니다. 이후 Zuul release에서 표준 Ansible 동작에 맞추고 스트림을 분리하기 위해 ansible-split-streams 기본값이 false 에서 true 로 바뀝니다. 그다음 Zuul release에서 해당 옵션은 완전히 제거됩니다.
버그 수정
Ansible block/rescue 스탠자의 태스크 실패가 Zuul 에서 빌드의 조기 실패 동작을 잘못 트리거해 종속 파이프라인에서 일관되지 않은 동작이 나올 수 있었습니다. Ansible block 내 태스크 실패는 더 이상 조기 실패 감지에 사용되지 않으며, 빌드에서 조기 실패가 발생하면 빌드 결과가 모든 경우에 실패로 보고됩니다.
9.0.0
새로운 기능
Ansible 8 버전을 사용할 수 있습니다. 기본 Ansible 버전은 여전히 6 이며, job.ansible-version 으로 8 버전을 선택할 수 있습니다.
Gerrit 드라이버에 AWS Kinesis 를 이벤트 소스로 사용하는 기능이 추가되었습니다.
새 잡 변수 zuul.commit_id 가 추가되었습니다. 모든 드라이버의 파이프라인 큐 항목(변경 사항, 참조, 태그, 브랜치)에 대해 큐 항목을 트리거한 커밋을 식별하는 안정적인 식별자를 제공합니다. 커밋으로 변경 사항을 식별하는 외부 시스템과 연동하는 데 사용할 수 있습니다.
Zuul 은 이제 첫 Ansible 태스크가 실패한 직후 후속 잡 중단 및 파이프라인 재정렬 절차를 시작합니다.
Gerrit 드라이버에 Kafka 를 이벤트 소스로 사용하는 기능이 추가되었습니다.
새 테넌트 프로젝트 구성 옵션 implied-branch-matchers 가 추가되었습니다. 로드 브랜치 집합이 하나와 여러 개 사이로 바뀔 때 Zuul 동작이 달라질 수 있는 브랜치 제외 옵션과 함께 사용하면 유용합니다. 운영자는 이런 경우 휴리스틱에 의존하지 않고 테넌트 구성 파일에서 원하는 동작을 고정할 수 있습니다.
post 및 cleanup 플레이북에서 사용 가능한 새 Zuul 잡 변수 zuul_will_retry 가 추가되었으며, 현재 잡이 재시도될지 여부를 나타냅니다.
업그레이드 안내
Zuul 은 이제 Python 3.11 버전으로만 테스트됩니다.
버그 수정
동일 프로젝트의 여러 브랜치에서 구성이 완전히 같다면 queue 구성 항목의 중복이 이제 허용됩니다. 스크래치 및 세마포어 와 마찬가지로, 저장소 내 구성이 있는 프로젝트를 브랜치할 때 불필요한 구성 오류를 줄이는 데 도움이 됩니다.
8.3.1
보안 이슈
다음 두 조건이 만족되면 Zuul 은 –disable-userns 를 구성한 채 bwrap 을 동작합니다. 1) bwrap 버전이 0.8.0 이상이고 2) zuul-익스큐터 런타임 컨텍스트에서 user 네임스페이스 가 활성화된 경우입니다. 이렇게 하면 zuul-익스큐터 bwrap 런타임이 추가 user 네임스페이스 를 만들지 않아 Zuul 의 보안이 강화됩니다.
8.3.0
새로운 기능
Zuul 웹 인터페이스용 다크 테마가 추가되었습니다.
Zuul 웹 인터페이스에 테마 선택이 추가되었습니다. 기본 테마는 Auto 로 구성되어 시스템/브라우저 환경에 따라 Light 또는 Dark 테마가 사용됩니다. 오른쪽 상단 톱니바퀴를 클릭해 웹 인터페이스 구성에서 원하는 테마를 명시적으로 지정할 수 있습니다.
Gerrit 파이프라인 트리거에서 이제 매칭을 위해 내장 require 및 reject 필터를 지원합니다. require 또는 reject 필터에 구성한 파이프라인 조건은 이벤트 트리거 필터에도 구성할 수 있습니다.
특정 이벤트에 따라 트리거되지만 다른 조건이 만족될 때만 동작하는 파이프라인을 만드는 데 사용할 수 있습니다. 직접 큐에 추가는 항목에만 영향을 주며 파이프라인 요구 사항은 의존성에도 영향을 주므로 파이프라인 요구 사항과는 다릅니다.
모든 Gerrit “requires” 필터가 이제 “reject” 필터로도 사용 가능합니다.
GitHub 파이프라인 트리거에서 이제 매칭을 위해 내장 require 및 reject 필터를 지원합니다. require 또는 reject 필터에 구성한 파이프라인 조건은 이벤트 트리거 필터에도 구성할 수 있습니다.
특정 이벤트에 따라 트리거되지만 다른 조건이 만족될 때만 동작하는 파이프라인을 만드는 데 사용할 수 있습니다. 직접 큐에 추가는 항목에만 영향을 주며 파이프라인 요구 사항은 의존성에도 영향을 주므로 파이프라인 요구 사항과는 다릅니다.
호스트 변수에 nodepool.slot 변수가 추가되었습니다. Nodepool static 및 metastatic 드라이버 8.0.0 부터 제공됩니다. 여러 잡을 동작하는 노드에서 빌드 디렉터리 충돌을 피하는 데 사용할 수 있습니다.
사용 중단 안내
Elasticsearch 리포터가 이제 잡 반환 변수에서 zuul 데이터를 필터링합니다. zuul 키 아래의 잡 반환 변수는 Zuul 용이며 파일 댓글 등 대량 데이터를 포함할 수 있습니다.
Gerrit 트리거 속성 require-approval 및 reject-approval 은 사용 중단되었습니다. 대신 pipeline.trigger.<gerrit source>.require 와 pipeline.trigger.<gerrit source>.reject 를 사용하십시오.
GitHub 트리거 속성 require-status 는 사용 중단되었습니다. 대신 pipeline.trigger.<github source>.require 를 사용하십시오.
버그 수정
zuul-admin prune-database 명령이 데이터베이스에서 예상 데이터를 완전히 삭제하지 못했습니다. 지정한 기준 시간보다 오래된 빌드셋이 모두 삭제되지 않거나 보조 테이블에 고아 데이터가 남을 수 있었습니다. 수정되어 이제 예상대로 동작합니다. Zuul 이 운영 중일 때도 더 원활하게 운영되도록 여러 트랜잭션으로 데이터를 삭제할 수 있는 –batch-size 인자도 추가되었습니다.
이전에 해당 명령을 동작한 사용자는 zuul_buildset 테이블에 대응 항목이 없는 zuul_build, zuul_build_event, zuul_artifact, zuul_provides 테이블의 행을 수동으로 삭제해야 할 수 있습니다.
cherry-pick 병합 모드에서 이제 체리 픽 시 이미 트리에 적용된 커밋은 오류로 실패하지 않고 조용히 건너뜁니다.
예외는 체리 픽 소스가 빈 커밋인 경우이며, 이 경우에는 항상 유지됩니다.
이미 적용된 커밋을 건너뛰는 것은 Gerrit change-merged 이벤트로 트리거되는 파이프라인(예: deploy 파이프라인)에서 중요합니다. 이전에는 스케줄러가 방금 병합된 커밋 위에 변경 사항을 체리 픽하려다 실패했기 때문입니다.
Zuul 은 이제 의존(즉 “gate”) 파이프라인에 변경 사항을 넣을지 결정할 때 Gerrit “submit requirements” 를 반영하려 합니다. 이전에는 Gerrit 의 구 “submit records” 만 반영했습니다. Zuul 이 병합 가능성이 전혀 없다고 명확히 판단할 수 있는 경우 “gate” 파이프라인에 변경 사항을 넣지 않지만, 규칙을 적용할지 무시할지 확실하지 않으면 병합 불가 변경도 여전히 넣을 수 있습니다(이 경우 Gerrit 이 병합에 실패하고 Zuul 은 빌드셋을 MERGE_FAILURE 로 보고합니다).
Gerrit 3.5.0 이상이 필요하며, Zuul 에서 Gerrit 에 대한 HTTP 접근이 구성되어 있어야 합니다.
8.2.0
새로운 기능
변경 메시지(드라이버에 따라 커밋 메시지 또는 풀 리퀘스트 메시지)가 이제 Ansible !unsafe 태그가 붙은 일반 텍스트로 zuul.change_message 에 제공됩니다.
업그레이드 안내
문서 및 예상 사용자 동작에 맞게 tenant.untrusted-projects.<project>.include-branches 가 tenant.untrusted-projects.<project>.exclude-branches 보다 낮은 우선순위로 적용되던 문제를 수정했습니다.
include-branches 와 exclude-branches 를 동시에 사용하는 프로젝트에만 영향합니다. 이제 둘 다 매칭되는 브랜치에서는 include-branches 가 exclude-branches 보다 우선합니다. 즉 include-branches 가 구성되면 exclude-branches 는 무시됩니다.
사용 중단 안내
zuul.message 로 제공되던 변경 메시지의 base64 인코딩 버전은 사용 중단되었으며 향후 Zuul 버전에서 제거됩니다. 대신 zuul.change_message 를 사용하십시오.
8.1.0
새로운 기능
파이프라인 구성에 언급된 연결(트리거, 리포터, 파이프라인 요구 사항 등)의 변경 사항만 큐에 추가하도록 보장하는 새 파이프라인 속성 pipeline.allow-other-connections 가 추가되었습니다.
Zuul 이 이제 빌드의 일시 중지 및 재개 이벤트를 타임스탬프와 함께 저장하며 SQL 데이터베이스 및 MQTT 로 보고합니다.
개별 플레이북을 이제 세마포어로 감쌀 수 있습니다. Zuul 은 잡을 시작하고 세마포어가 필요한 플레이북 지점까지 진행한 뒤 세마포어를 획득할 때까지 대기한 후 계속합니다. 해당 플레이북이 끝나면 세마포어를 해제합니다.
동일한 세마포어를 잡과 플레이북 모두에 사용할 수 있지만, 단일 잡에서 두 목적으로 같은 세마포어를 사용할 수는 없습니다.
업그레이드 안내
잡 구성 변경 사항에 추가 문법 검사가 수행되어, 잡이 허용되지 않은 부모(최종 잡, 자식이 abstract 가 아닐 때의 중간 잡도, 다른 프로젝트의 보호된 잡 등)를 상속하면 Zuul 이 오류를 보고합니다. 이전에는 이러한 경우 잡 그래프 동결 시에만 발견될 수 있었습니다.
현재 이에 해당하는 잡이 있으면 구성 오류로 보고됩니다.
보안 이슈
비라이브 항목은 이제 독립 파이프라인의 파이프라인 요구 사항 적용을 받습니다.
이전에는 독립 파이프라인 최적화로 변경이 파이프라인 요구 사항을 만족하는지 검사하지 않았습니다. 독립 파이프라인이 리뷰된 코드만 동작하도록 되어 있어도 의존 변경 사항을 갱신해 리뷰되지 않은 코드가 동작될 수 있었습니다.
이제 비라이브 항목과 라이브 항목 모두 모든 파이프라인 관리자에서 파이프라인 요구 사항 적용을 받습니다.
새 allow-other-connections 파이프라인 구성 옵션으로 파이프라인 구성에 언급된 연결(트리거, 리포터, 파이프라인 요구 사항 등)의 변경 사항만 큐에 추가하도록 할 수 있습니다. 예를 들어 일반적으로 직접 큐에 추가하지 않는 의존성까지 코드 리뷰 요구 사항을 엄격히 적용하는 파이프라인을 구성할 수 있습니다.
8.0.1
버그 수정
웹 UI “빌드셋” 탭에 결과가 표시되지 않던 오류가 수정되었습니다.
8.0.0
새로운 기능
테넌트 또는 테넌트 목록에 대한 읽기 수준 접근을 tenant.access-rules 및 api-root.access-rules 속성으로 권한 있는 사용자로 제한할 수 있습니다.
GitHub 에서 rebase 병합 모드가 이제 지원됩니다.
업그레이드 안내
Ansible 5 버전 지원이 제거되었습니다. 이 버전에 의존하는 기존 잡은 업그레이드 전에 Ansible 6 로 이전하십시오.
웹 인터페이스 및 REST API 의 접근 제어 기능 확장에 대비해 테넌트 구성 객체
admin-rule이authorization-rule로 이름이 바뀌었습니다. 테넌트에 적용할 때 해당 테넌트의 관리자 접근을 결정하므로 테넌트 속성은 여전히admin-rules입니다. 이 변경 사항으로 향후 비관리자 수준 접근에도 유사한 규칙을 적용할 수 있습니다.테넌트 구성은 이제 다음 예를 따르십시오:
- authorization-rule: name: example-rule - tenant: name: example-tenant admin-rules: - example-rule
하위 호환을 위해 이전 형식은 아직 허용되지만, 이후 Zuul 버전에서 제거될 예정입니다.
Zuul 이 git 저장소를 준비할 때 사용하는 기본 병합 모드는 이전에는 모든 경우에 merge-resolve 였으나, 이제 Gerrit 을 제외한 모든 드라이버에서는 merge 이며 Gerrit 은 여전히 merge-resolve 가 기본입니다. Zuul 이 수행하는 병합 운영이 코드 리뷰 시스템에서 수행할 운영과 더 잘 맞습니다.
버그 수정
override-checkout 가 지정된 잡에서 implied branch matcher 를 사용하면 일부 잡에 의도하지 않은 변형이 포함될 수 있었습니다. 구체적으로 override-checkout 잡 속성에 지정된 브랜치의 부분 문자열과 매칭되는 브랜치에 대한 implied branch matcher 가 있는 잡 변형이 의도치 않게 사용될 수 있었습니다.
변경 사항의 브랜치를 사용하든 override-checkout 으로 지정한 브랜치를 사용하든 동일한 잡 변형 매칭 과정이 적용되도록 수정되었습니다.
7.1.0
새로운 기능
GitHub 드라이버에서 이제 PR 의 draft 상태를 파이프라인 요구 사항으로 지정할 수 있습니다. pipeline.require.<github source>.draft 를 참조하십시오.
세마포어 구성 및 현재 사용 현황은 웹 UI 의 “Semaphores” 탭에서 확인할 수 있습니다.
업그레이드 안내
Ansible 5 는 유지보수되지 않아 Zuul 에서 사용 중단되었으며, 향후 Zuul 버전에서 제거될 예정입니다. Zuul 의 기본 버전은 이제 Ansible 6 입니다.
7.0.0
새로운 기능
MQTT 드라이버에서 이제 보고에 잡에서 반환된 데이터를 포함할 수 있습니다. pipeline.<reporter>.<mqtt>.include-returned-data 를 참조하십시오.
노드셋에서 이제 대안의 순서 목록을 지정할 수 있어, Nodepool 이 특정 레이블 요청을 충족하지 못할 때 하나 이상의 대안 노드셋을 시도할 수 있습니다. 자세한 내용은 nodeset.alternatives 를 참조하십시오.
업그레이드 안내
Ansible 2.8 및 2.9 버전 지원이 제거되었습니다. 이 버전에 의존하는 기존 잡은 업그레이드 전에 Ansible 5 또는 6 으로 이전하십시오.
이전에 사용 중단된
merge-failure및merge-failure-message파이프라인 구성 옵션이 제거되었습니다. 각각merge-conflict및merge-conflict-message를 사용하십시오.
파이프라인 구성에서 프로젝트 변경 사항 큐를 지정하던 사용 중단 문법이 제거되었습니다. 이제 project 스탠자로 큐를 지정하십시오. 자세한 내용은 queue 를 참조하십시오.
6.4.0
새로운 기능
Ansible 6 버전을 사용할 수 있습니다. 기본 Ansible 버전은 여전히 5 이며, job.ansible-version 으로 6 버전을 선택할 수 있습니다.
업그레이드 안내
Ansible 2.8 및 2.9 버전은 둘 다 유지보수되지 않아 Zuul 에서 사용 중단되었습니다. Zuul 의 기본 버전은 이제 Ansible 5 입니다.
6.3.0
새로운 기능
Zuul 구성 오류와 관련된 리포터 동작을 사용자 정의할 수 있는 새 파이프라인 리포터 pipeline.config-error 를 사용할 수 있습니다.
6.2.0
새로운 기능
Zuul 코멘트에 빌드셋 URL 이 추가되었습니다. 사용자가 Gerrit 에서 빌드 셋 페이지로 빠르게 이동할 수 있습니다.
새 테넌트 프로젝트 구성 옵션 tenant.untrusted-projects.<project>.always-dynamic-branches 가 추가되었습니다. Zuul 이 정적 구성을 로드하지 않고 모든 변경 사항을 새로 제안된 동적 구성처럼 취급할 브랜치를 지정하는 데 사용할 수 있습니다. 잘 사용하지 않는 기능 브랜치가 많은 경우에 유용합니다.
Gerrit 연결용 새 ssh_server 옵션으로 SSH 연결에 사용할 호스트 이름을 지정할 수 있으며, 일반 server 옵션은 HTTP 연결에 사용할 호스트 이름을 지정합니다.
전역(테넌트 간) 세마포어 지원이 추가되었습니다. 전역 세마포어(Global Semaphore) 를 참조하십시오.
jitter 가 있는 파이프라인 타이머 트리거에서 이제 jitter 가 파이프라인 전체가 아닌 각 프로젝트-브랜치에 개별 적용됩니다. 비슷한 잡이 많은 주기적 파이프라인에서 외부 시스템에 대한 thundering herd 효과를 줄일 수 있습니다.
스케줄러가 이제 –wait-for-init 인수를 받으며, 모든 테넌트가 초기화될 때까지 대기한 뒤 파이프라인 처리를 시작합니다. 스케줄러 용량이 충분한 대형 시스템에서 스케줄러 롤링 재시작을 더 빠르게 수행하는 데 도움이 됩니다.
버그 수정
Zuul 이 이제 정의되지 않은 잡을 참조하는 잡 의존성을 구성 오류로 처리합니다. 이전에는 존재하지 않는 다른 잡에 의존하는 잡이 초기 문법 검사를 통과하고 Zuul 이 해당 잡을 동작하려 할 때 잡 그래프 동결에서만 실패했습니다. 이제 구성 단계에서 잘못되었거나 누락된 잡 의존성이 감지됩니다. 새 구성 오류가 병합되지 않도록 할 수 있으며, 기존의 잘못된 잡 또는 프로젝트 구성도 기동 시 구성 오류로 처리됩니다.
6.1.0
새로운 기능
cherry-pick 머저 모드에서 이제 변경 사항에 여러 부모가 있으면 git cherry-pick 대신 git merge 를 수행해 브랜치 간 병합을 처리합니다. 이전에는 git 이 병합을 체리 픽하는 것을 허용하지 않아 실패했습니다.
의존성 순환의 여러 변경 사항에 동일한 잡이 동작되는 경우 Zuul 이 이제 특정 조건에서 이를 중복 제거할 수 있습니다. 자세한 내용은 job.deduplicate 를 참조하십시오.
attr:tenant.untrusted-projects.<project>.include-branches 및 attr:tenant.untrusted-projects.<project>.exclude-branches 테넌트 프로젝트 구성 옵션이 추가되었습니다. exclude-unprotected-branches 와 유사하게 Zuul 이 구성을 로드할 브랜치 집합을 줄이는 데 사용할 수 있습니다.
일정 기간보다 오래된 데이터베이스 항목을 제거하기 위해 zuul-admin 에
prune-database명령이 추가되었습니다.
GitHub 드라이버가 GitHub Enterprise repository cache 사용을 지원합니다. 구성 방법은 <github connection>.repo_cache 를 참조하십시오.
업그레이드 안내
prune-database 명령이 삭제할 빌드셋을 판단하는 데 사용할 빌드셋 테이블의
updated컬럼을 추가하는 SQL 스키마 마이그레이션이 추가되었습니다. 마이그레이션은 이 컬럼 초기화 시 빌드셋에 연결된 가장 최근 타임스탬프를 사용하려 하며, 타임스탬프가 없으면 1970-01-01 로 초기화합니다. Zuul 탄생 이전이므로 타임스탬프 정보가 없는 빌드셋은 prune-database 를 처음 동작할 때 제거됩니다. 타임스탬프가 없는 빌드셋은 아주 최근 것도 대개 중요하지 않아 불이익이 없을 것으로 예상됩니다. 설치 환경이 다르다면 데이터베이스를 확인해 해당 경우updated컬럼을 더 최근 값으로 변경하시기 바랍니다.
사용 중단 안내
zuul CLI 가 zuul-admin 으로 이름이 바뀌었습니다. zuul 명령은 향후 버전까지 사용 가능하며 이후 단계적으로 제거됩니다. autohold, 큐에 추가, 큐에서 제거, 승격 같은 테넌트 범위 워크플로 명령도 zuul-admin CLI 에서 사용 중단되었으며 향후 버전에서 제거됩니다. zuul-client CLI 로 계속 수행할 수 있습니다.
6.0.0
새로운 기능
Ansible 5 버전을 사용할 수 있습니다. 기본 Ansible 버전은 여전히 2.9 이며, job.ansible-version 으로 버전 5 를 선택할 수 있습니다.
파이프라인이 이제
wip-state-changed로 트리거되며 pipeline.require.<gerrit source>.wip 로 변경의 wip 상태에 따라 이벤트를 필터링할 수 있습니다.
업그레이드 안내
Ansible 프로젝트가 Ansible 커뮤니티 패키지 배포를 시작한 이후 Zuul 에 추가된 첫 Ansible 버전입니다. Zuul 에는 유용한 모듈이 다수 포함된 Ansible 커뮤니티 패키지가 포함되며, 이전 Ansible 버전에서 기본 포함되던 많은 모듈이 포함됩니다.
Ansible 커뮤니티 의 주 버전만 지정합니다(예:
ansible-version: 5). Ansible core 의 단일 부 버전에 대응합니다(예: Ansible 커뮤니티 5 는 Ansible core 2.12 에 대응). Ansible 은 포함된 Ansible 컬렉션 업데이트 및 Ansible core 마이크로 버전 업데이트가 포함된 커뮤니티 패키지 부 버전을 배포합니다 (예: Ansible 커뮤니티 5.6 에는 ansible-core 2.12.4 가 포함됨).Zuul 은 Ansible 커뮤니티 의 부 버전을 지정하지 않으므로 빌드 시 사용 가능한 최신 마이크로 버전이 설치됩니다. 사용할 Ansible 버전을 더 세밀히 제어하려면
zuul-manage-ansible도움말을 참조하십시오.
Zuul 동작에는 Python 3.8 이상이 필요합니다. Ansible 최소 Python 요구 사항이 3.8 이므로 Ansible 5 이상 지원을 위해 필요한 변경 사항입니다.
ARA Ansible 콜백 플러그인 내장 지원이 제거되었습니다.
신뢰할 수 없는 플레이북에 사용되던 제한된 Ansible 환경이 완화되었습니다.
Zuul 은 이전에 익스큐터의 신뢰할 수 없는 동작 컨텍스트에서 동작되는 플레이북 동작을 제한해 사용자가 사용자 정의 Ansible 플러그인 로드, 익스큐터에서 코드 동작, 내장 Ansible 모듈의 특정 기능 사용을 못 하게 했습니다. Zuul 익스큐터 보안 강화 목적이었으나, 해당 방식은 번거롭고 오류에 취약하며 최신 Ansible 버전과의 호환성이 떨어졌습니다.
따라서 제거되었으며, 이제 신뢰 및 신뢰할 수 없는 동작 컨텍스트의 플레이북 모두 Ansible 모듈 전체에 접근할 수 있습니다. 익스큐터 보안 관련 주의 사항은 보안 고려 사항 (Security Considerations) 절을 참조하십시오.
버그 수정
Nodepool 호스트 변수는 이제 도달 불가 호스트에서도 사용할 수 있습니다. 잡이 도달 불가 상태로 시작하는 네트워크 장비에 유용합니다.
5.2.5
버그 수정
불필요할 때 데이터베이스에 NO_JOBS 결과를 보고하던 추가 인스턴스가 수정되었습니다.
5.2.4
버그 수정
5.2.3 변경 사항으로 의도치 않게 NO_JOBS 결과가 데이터베이스에 보고되기 시작했습니다. 수정되어 더 이상 데이터베이스에 기록되지 않습니다.
5.2.3
버그 수정
정규식에서 특수 문자인 브랜치 이름의 프로젝트와 잡이 변경 사항과 의도대로 매칭되지 않을 수 있었습니다. 브랜치 이름에서 자동 생성된 implied 브랜치 매처는 이제 완전 일치로 처리됩니다. job.branches 및 pragma.implied-branches 등 사용자 지정 브랜치 매처는 여전히 정규식으로 처리됩니다.
프로젝트 이름 정규식 처리가 가능한 모든 일치를 반환하도록 갱신되었습니다. 이전에는 짧은 이름과 충돌하면 오류였습니다. 정규식 시스템은 구성을 단순화하고 일치하는 모든 프로젝트에 구성을 적용하는 것이 목적입니다. 충돌은 이 동작에 영향을 주지 않으므로 해당 경우 오류를 발생시키지 않습니다.
5.2.2
버그 수정
Zuul 5.2.0 에서 도입되어 윈도우 노드에서 동작되는 잡이 Could not find imported module support code for ‘Ansible.ModuleUtils.Legacy’ 오류로 실패할 수 있던 문제가 수정되었습니다.
5.2.1
새로운 기능
일부 프로젝트에서 Gerrit 에서 사이트 전체로 활성화하지 않고 Gerrit
submitWholeTopic동작을 따르고 싶은 Zuul 사용자를 위해 queue.dependencies-by-topic 구성이 추가되었습니다.
승격 관리 동작이 이제 모든 파이프라인 관리자에서 동작합니다. 이전에는 종속 파이프라인에만 영향을 주었으나, 이제 변경 사항 큐 및 모든 유형의 파이프라인 내 변경 사항 순서를 재정렬합니다.
업그레이드 안내
변경 큐 내에서 순서가 재정렬되지 않은 변경 사항에 대해 승격 관리 동작이 더 이상 잡을 재시작하지 않습니다.
버그 수정
5.2.0 에서 도입된 Gerrit 드라이버에서 변경 사항 조회 시 무한 루프가 발생할 수 있던 문제를 수정했습니다.
5.2.0
새로운 기능
종속 큐의 변경 사항이 업스트림 코드 리뷰 시스템이 정한 병합 가능 요구 사항을 더 이상 충족하지 않으면 자동으로 큐에서 제거됩니다.
Gerrit 에서
change.submitWholeTopic이 구성되면 Zuul 이 이제 Gerrit 동작과 맞춥니다.Gerrit 에서 이 구성이 켜져 있고 변경 사항이 제출(병합)되면 동일한 토픽의 모든 변경 사항이 동시에 제출됩니다. Zuul 이 이제 큐에 추가할 때 Gerrit 에서 함께 제출되도록 구성된 변경을 조회하며, 순환 의존 집합처럼 취급합니다.
프로젝트가 순환 의존을 허용하도록 구성된 파이프라인 큐에 속하지 않으면 Zuul 이 큐에 추가 시 실패를 보고합니다. Gerrit 의 submitWholeTopic 구성과 Zuul 의 allow-circular-dependencies 구성이 일치하는지 확인하십시오.
이 기능에는 Gerrit 에 대한 HTTP 연결이 필요합니다. SSH 연결만 있으면 함께 제출된 변경 사항은 무시됩니다.
OpenID Connect 인증 제공자로 Microsoft Login 을 구성하는 기능이 추가되었습니다.
Zuul 이 이제 총 리소스 사용 통계를 보고합니다.
다음 통계가 출력됩니다:
zuul.nodepool.resources.total.tenant.{tenant}.{resource}
테넌트별 현재 사용 중인 리소스 총량 게이지, 즉 해당 테넌트에 속한 모든 노드(상태 무관)입니다.
‘pre-run’ 실패로 인한 재시도를 retry: false 를 반환해 건너뛸 수 있습니다:
- zuul_return: data: zuul: retry: false
업그레이드 안내
Zuul 이 이제 총 리소스 사용량과 사용 중 리소스 사용량 통계를 각각 보고합니다.
구분을 위해 다음 통계 이름이 변경되었습니다:
zuul.nodepool.resources.tenant.{tenant}.{resource} -> zuul.nodepool.resources.in_use.tenant.{tenant}.{resource}
zuul.nodepool.resources.project.{project}.{resource}: -> zuul.nodepool.resources.in_use.project.{tenant}.{resource}
보안 이슈
익스큐터에서 신뢰할 수 없는 코드 동작을 허용하던 취약점이 수정되었습니다.
Zuul 은 untrusted 보안 컨텍스트(신뢰할 수 없는 프로젝트)에서 사용할 수 있는 Ansible 모듈과 플러그인을 제한합니다. Zuul 익스큐터에서 신뢰할 수 없는 보안 컨텍스트로 프로그램 동작도 금지합니다.
Ansible 2.8 이상은 ansible.builtin.<name> 별칭으로 내장 모듈을 참조할 수 있습니다. 이 방식을 쓰는 플레이북은 Zuul 보안 제한을 우회해 임의의 로컬 코드나 제한된 모듈을 동작할 수 있었습니다.
Zuul 이 bubblewrap 을 사용하므로 이 취약점으로 동작된 명령도 제한된 환경 안에 머물러 빌드 디렉터리 밖 파일에 접근하거나 플레이북보다 오래 동작될 수는 없습니다. 다만 빌드 디렉터리 안이지만 work/ 디렉터리 밖 파일에 접근하거나 커널/하이퍼바이저 권한 상승 취약점을 악용했을 수도 있습니다.
Zuul 팀은 제한된 Ansible 환경이 보안 메커니즘으로 비효과적이라고 보며, 제한을 제거하고 앞으로는 bubblewrap 에만 의존하는 계획을 세우고 있습니다. 해당 변경 사항은 Zuul 향후 release(아마 6.0.0)에 적용되며, 변경 사항에 대한 상세 안내가 선행됩니다.
5.1.0
새로운 기능
Added support for adding and removing merge request labels in the GitLab driver, as well as triggering pipelines on label removal (label addition was already supported).
업스트림 코드 리뷰 시스템에서 빌드셋을 병합할 수 없는 경우 빌드 데이터베이스에 새 빌드셋 결과
MERGE_FAILURE가 저장됩니다.
Zuul 시스템 성능 모니터링을 위해 다음 statsd 메트릭을 사용할 수 있습니다:
단일 테넌트 재구성을 수행할 수 있는
zuul-scheduler tenant-reconfigure명령이 추가되었습니다. 코드 호스팅 시스템 연결 문제 후 이슈를 해소하는 데 도움이 됩니다.
zuul-web 전용 새 모니터링 메트릭을 사용할 수 있습니다.
업그레이드 안내
빌드셋 결과
MERGER_FAILURE가MERGE_CONFLICT로, 파이프라인 리포터 구성merge-failure가merge-conflict로 이름이 변경되었습니다.실제로 보고되는 가장 흔한 오류를 더 잘 설명하여 사용자에게 덜 혼란스러울 것으로 예상됩니다. 업스트림 저장소에서 변경 사항을 병합할 수 없음을 나타내는 새 빌드셋 결과
MERGE_FAILURE지원을 위한 향후 변경을 위한 것이기도 합니다.업그레이드 시 모든 스케줄러를 잠시 중지하는 것이 권장됩니다(즉 새 버전의 첫 스케줄러가 시작할 때 이전 버전을 동작 중인 스케줄러가 없어야 함). 새 스케줄러는 기동 시 데이터베이스 마이그레이션을 수행해 기존
MERGER_FAILURE빌드셋 결과를 모두MERGE_CONFLICT로 갱신합니다. 이전 스케줄러가 동작 중이면MERGER_FAILURE항목을 계속 추가할 수 있으며, 웹 UI 또는 REST API 에 보이려면 수동으로 갱신해야 합니다.
사용 중단 안내
파이프라인 구성 옵션
merge-failure및merge-failure-message가 각각merge-conflict및merge-conflict-message로 이름이 변경되었습니다. 이전 구성은 하위 호환을 위해 유지되나 이후 버전에서 제거됩니다. 가능한 빨리 사용처를 갱신하십시오.
버그 수정
gitlab 드라이버의 labels 파이프라인 요구 사항에서 라벨을 boolean and(나열된 모든 라벨이 필요함)가 아닌 boolean or로 잘못 처리하던 문제가 있었습니다. 문서 및 다른 드라이버와 일치하도록 동작이 업데이트되었습니다.
5.0.0
업그레이드 안내
Zuul 은 더 이상 gearman 을 사용하지 않습니다. Gearman 서버를 동작할 필요가 없으며 Zuul 스케줄러도 더 이상 동작하지 않습니다. zuul.conf 의 gearman 관련 구성은 모두 무시되며 제거해도 됩니다.
이전에 Gearman 으로 동작되던 zuul enqueue 같은 명령은 인증 토큰을 만들고 zuul.conf 에 webclient 섹션을 추가하면 계속 사용할 수 있습니다.
zuul.conf에서 데이터베이스를 connection 으로 구성하는 지원은 Zuul 4.0 에서 사용 중단되었으며 이제 제거되었습니다. 현재 데이터베이스 구성 방법은 데이터베이스 를 참조하십시오.
4.12.0
업그레이드 안내
ZooKeeper 데이터 형식 변경 사항으로 다음 업그레이드 절차가 필요합니다:
모든 Zuul 컴포넌트 중지
zuul delete-state동작모든 Zuul 컴포넌트 시작
Zuul-web 이 이제 Zookeeper 키스토어 접근이 필요합니다.
zuul.conf에 최소 스케줄러, 익스큐터, 웹 서버에 keystore.password 옵션이 포함되어 있는지 확인하십시오(원하면 모든 컴포넌트에 포함해도 됨).
Zuul-web 은 정의된 모든 연결에 대한 정보가 필요합니다. 이전에는 구성 파일에 연결이 모두 정의되지 않았거나 원격 서비스 연결용 키 등 일부 요구 사항이 비어 있어도 zuul-web 이 기동할 수 있었습니다. 이제 zuul-web 기동을 위해 필수입니다.
4.11.0
새로운 기능
잡 동작 시 Ansible 이 사용하는 플레이북과 롤 을 디버깅하거나 감사하는 데 도움이 되도록 zuul.playbook_context 변수와 zuul.projects 아래 새 변수들이 추가되었습니다.
이 변수들은 각 Ansible 동작의 플레이북과 롤 에 사용된 저장소 구성을 설명합니다. 해당 저장소는 워크스페이스 저장소와 다른 상태일 수 있습니다.
Gitlab 드라이버에서 <gitlab connection>.disable_connection_pool 로 연결 풀링을 비활성화할 수 있습니다. 네트워크 상태가 불안정할 때 유용합니다.
선택 사항인 프로메테우스 서비스에 준비 상태 및 활성 상태 검사용 엔드포인트가 포함되었습니다. 자세한 내용은 활성 상태 프로브(Liveness Probes) 를 참조하십시오.
권한 있는 사용자가 웹 UI 상태 페이지에서 변경 사항을 큐에서 제거할 수 있습니다.
웹 UI 에 인증을 추가합니다. Zuul 웹 UI 를 OpenID Connect 프로토콜을 지원하는 Identity 제공자 로 사용자 인증을 하도록 구성할 수 있습니다.
업그레이드 안내
이전 버전에서 업그레이드하는 사용자는 Zookeeper 에서 Zuul 의 임시 상태를 삭제하기 위해
zuul delete-state를 동작해야 합니다. 이전 zuul 버전이 만든 임시 상태는 이 release와 호환되지 않습니다. Zookeeper 데이터베이스에 쓰는 것을 막으려면 모든 Zuul 서비스를 중지한 상태에서 이 명령을 동작하십시오. 자세한 내용은 문서를 참조하십시오: https://zuul-ci.org/docs/zuul/reference/client.html#delete-state
프로메테우스 엔드포인트는 이전에는 어떤 URI 에서든 메트릭을 제공했습니다. 이제 / 및 /metrics URI 에서만 메트릭을 반환합니다. 후자 사용을 권장합니다.
4.10.4
버그 수정
ZooKeeper 연결 끊김이 스레드가 과다 생성되어 오류가 나는 문제를 완화하는 수정이 적용되었습니다.
4.10.3
버그 수정
항목이 잡 없이 파이프라인에 갇히게 할 수 있던 변경 캐시 정리 루틴 버그가 수정되었습니다.
Gerrit 드라이버: 대형 구성에서 Zuul 오류 응답이 기본 메시지 길이를 초과해 Gerrit 이 댓글을 거부하고 변경 사항에 대한 Zuul 알림이 없을 수 있었습니다. 해당 코멘트는 이제 안전한 길이로 잘립니다.
4.10.2
버그 수정
변경 캐시 정리를 막아 ZooKeeper 사용량이 무한히 늘어나던 버그가 수정되었습니다.
4.10.1
새로운 기능
GitLab 에서 MR 스쿼시 지원이 추가되었습니다.
zuul 웹 대시보드의 빌드셋 설명 페이지에서 사용자가 해당 빌드셋을 구성하는 빌드의 타임라인을 볼 수 있습니다.
버그 수정
새 Zookeeper 기반 변경 캐시의 정리 루틴 버그를 수정했습니다. 이전에는 변경 캐시에서 항목이 누수되었습니다. 수정된 루틴은 이 새 버전으로 Zuul 을 재시작하면 누수된 항목을 자동으로 정리합니다.
GitLab 드라이버에서 병합 실패 감지를 수정했습니다.
4.10.0
업그레이드 안내
Nodepool 4.3.0 이 필요합니다. Zuul 이 다중 스케줄러 지원 준비를 위해 노드 레코드에 추가 정보를 저장합니다.
스케줄러 시간 데이터베이스가 제거되었습니다. 이전에는 스케줄러 상태 디렉터리(보통
/var/lib/zuul/times)에 저장되었습니다. 스케줄러의 전체 상태 디렉터리는 더 이상 사용되지 않으며 제거해도 됩니다.Zuul 이 이제 예상 빌드 소요 시간을 SQL 데이터베이스에서 가져옵니다.
4.9.0
새로운 기능
zuul delete-state명령으로 ZooKeeper 에 Zuul 이 저장한 모든 임시 상태를 삭제할 수 있습니다. 보통 Zuul 이 스스로 오류를 감지하고 수정하지만, 그렇지 못할 때 메뉴얼 복구용으로 유용합니다.
프로젝트 이름 변경 시 이전 프로젝트 이름에서 새 이름으로 키를 서비스 중단 없이 옮기는 데
zuul copy-keys및zuul delete-keys명령이 유용합니다.
현재 열린 노드 요청을
zuul.nodepool.tenant.<tenant>.current_requests로 내보내는 새 statsd 게이지 메트릭이 추가되었습니다. 테넌트별 현재 열린 노드 요청을 추적하며, 전체zuul.nodepool.current_requests메트릭을 세분화합니다.
업그레이드 안내
Zuul 이 더 이상 스케줄러 파일시스템에서 프로젝트 개인 키 파일을 읽거나 쓰지 않습니다. 기존 키를 ZooKeeper 에 로드하려면 아직 하지 않았다면 스케줄러 4.6.0 버전을 최소 한 번 동작하십시오.
ZooKeeper 의 암호화된 키를 백업용으로 파일시스템에 내보내는
zuul export-keys명령이 추가되었습니다.zuul import-keys는 이전에 내보낸 백업을 ZooKeeper 에 로드합니다. 시스템 백업 스크립트에서 이 명령 사용을 권장합니다.
4.8.1
업그레이드 안내
Zuul 내부 구성 캐시 관련 변경 사항에서 오류가 있어, Zuul 이 더 이상 존재하지 않는 캐시된 저장소 내 구성 파일을 사용할 수 있었습니다.
zuul.yaml(또는zuul.d/*등) 파일이 삭제되거나 이름이 바뀌면 Zuul 은 해당 변경 사항을 즉시 반영하지만, 다음 재시작 시 캐시에서 이전 내용과 새 내용을 모두 로드하려 했습니다.이 오류는 4.8.0 버전에서 도입되었습니다.
4.8.0 에서 업그레이드하는 경우 캐시를 올바르게 갱신하려면
zuul-scheduler full-reconfigure를 동작하십시오.
버그 수정
실수로 제거된 job.success-message 및 job.failure-message 기능이 복원되었습니다.
4.8.0
새로운 기능
Zuul 이 이제 핑거 게이트웨이를 통해 실시간 로그 스트림을 라우팅해, zuul-web 에서 모든 익스큐터에 직접 접속할 수 없이 여러 데이터센터에 익스큐터를 분산할 수 있습니다. 쿠버네티스 기반 배포에서 일반적입니다.
핑거 게이트웨이와 익스큐터 로그 스트리밍 시스템이 TLS 연결을 지원합니다.
보통 zuul-web 은 로그 스트리밍을 위해 익스큐터에 직접 연결합니다. 이 새 옵션으로 신뢰할 수 없는 네트워크를 지날 때 해당 연결을 암호화할 수 있습니다.
핑거 게이트웨이 서버를 통한 로그 스트리밍 연결 라우팅이 최근 추가되었으며, 필요 시 TLS 를 사용합니다.
핑거 게이트웨이 서버는 최종 사용자도 사용할 수 있으며, 암호화된 익스큐터 또는 핑거 게이트웨이에 연결해 로그를 스트리밍해야 하면 TLS 인증서가 필요할 수 있습니다. TLS 를 사용하는 핑거 클라이언트가 없으므로 서버로 동작할 때 TLS 사용을 끄는 옵션이 제공됩니다.
세 컴포넌트 모두에서 암호화 연결을 사용하려면 fingergw.tls_cert 및 관련 옵션을 참조하십시오.
4.7.0
새로운 기능
익스큐터가 이제
SIGTERM을graceful명령(기본값)과 동일하게 할지stop명령과 동일하게 할지 결정하는 executor.sigterm_method 구성 파일 값을 따릅니다.
Github 드라이버가 이제 Github 리포터의 pipeline.<reporter>.<github source>.check 속성에 ‘skipped’ 및 ‘neutral’ 상태를 사용할 수 있습니다.
업그레이드 안내
익스큐터가 SIGTERM 을 받을 때 기본 동작이 잡을 즉시 중지하는 것에서 잡이 끝날 때까지 정상적으로 대기하는 것으로 바뀌었습니다. 이전 동작을 유지하려면 구성 파일의 executor.sigterm_method 를
stop으로 구성하십시오.
zuul.scheduler.eventqueues.result 게이지가 제거되었습니다.
내부 API 변경 사항으로 Zuul 에서 이제 최소 Nodepool 4.2.0 버전이 필요합니다.
사용 중단 안내
다음 속성은 이제 무시됩니다:
테넌트 구성
report-build-page.잡 속성
success-url.잡 속성
failure-url.
빌드 페이지 URL 이 이제 모든 빌드에 대해 항상 보고됩니다. 진행 중 빌드에도 동일하여 더 일관된 사용자 경험을 제공합니다.
빌드 페이지가 항상 URL 로 보고되므로 success/failure URL 잡 속성은 더 이상 쓸모가 없어 해당 기능도 제거되었습니다.
Zuul 구성 문법 검사기는 당분간 이 구성을 허용하며(단순히 무시됨), 5.0 버전에서 제거되고 사용 시 오류로 처리됩니다.
비슷한 결과를 내려면 zuul_return 으로 잡에서 URL 을 아티팩트로 반환하는 방법을 고려하십시오. 빌드 페이지의 “Artifacts” 섹션에 링크가 표시됩니다.
4.6.0
새로운 기능
종속 잡에 전달하기 위해 잡에서 민감한 데이터를 반환해야 하면
zuul_return속성의secret_data속성을 일반data대신 사용할 수 있습니다. 데이터는 잡 시크릿과 동일한 방식으로 제공되며 잡 디렉터리에 디스크에 쓰이지 않습니다. 잡 내에서 민감한 데이터를 표시하거나 저장하지 않도록 주의하십시오. 예:tasks: - zuul_return: secret_data: password: foobar data: this_is: not secret
보안 이슈
보안 조치를 우회하는 데 사용될 수 있어 잡 정의에서 다음 연결 관련 변수 구성이 더 이상 허용되지 않습니다:
ansible_connection
ansible_host
ansible_python_interpreter
ansible_shell_executable
ansible_user
Nodepool 의 해당 구성으로 여전히 지정할 수 있습니다.
Zuul 잡 변수에서 Ansible Jinja 템플릿 사용이 부분적으로 제한됩니다.
Zuul 잡 변수에서 Jinja 템플릿을 사용하면 시크릿 내용이 노출될 수 있는 것으로 밝혀졌습니다. 이를 막기 위해 Zuul 잡 변수 값이 잡 시작 시 동결되며, 신뢰할 수 있는 플레이북 및 시크릿이 있는 플레이북에는 이 값이 사용됩니다. 동결 시 시크릿에 접근하지 않아 노출되지 않습니다.
잡 시작 시 알려진 비시크릿 값(zuul.* 변수 포함)을 참조하는 Zuul 잡 변수는 예상대로 동작합니다. 시크릿을 참조하는 잡 변수는 동작하지 않으며(정의되지 않음). 신뢰할 수 없는 플레이북에서는 잡 변수가 여전히 동적으로 평가되며 잡 시작 후 구성된 값을 사용할 수 있습니다.
또한 job.extra-vars 는 더 이상 Ansible 에 “-e” 명령줄 옵션으로 전달되지 않습니다. 일부 경우 내부 플레이북 변수보다 우선해 시크릿 노출에 악용될 수 있었습니다. Zuul extra-vars 는 이제 일반 인벤토리 변수로 전달되며, 시크릿을 제외한 다른 모든 Zuul 잡 변수(vars, host-vars, group-vars)보다 우선합니다.
같은 이유로 시크릿도 이제 인벤토리 변수로 전달됩니다. Zuul 잡 변수 중 가장 높은 우선순위를 가지며, Ansible 이 Jinja 식으로 평가하지 않도록
!unsafe로 태그됩니다.시크릿에 들어 있는 값이 Jinja 식으로 평가해도 안전하다고 확신하면, 플레이북에서 다음 구문으로 이 제한을 우회할 수 있습니다:
- set_fact: unsafe_var_eval: "{{ hostvars['localhost'].secret.var }}"
변수의 명시적 평가를 강제합니다. 플레이북이 범위에 다른 시크릿 없이 이름으로 단일 시크릿에 접근하는 경우에는 일반적으로 안전합니다. 플레이북이 정의된 프로젝트가 제어하지 않는 시크릿이 둘 이상이면 이 기능을 사용하지 마십시오.
마찬가지로
!unsafe로 태그된 모든 원래 잡 변수 버전이unsafe_vars변수 계층 아래에 있습니다. 예: 잡 변수 myvar 는 unsafe_vars.myvar 에 있습니다. 가장 통제된 상황이 아니면unsafe_vars식 평가는 권장하지 않습니다. 안전하게 렌더링하기가 거의 불가능합니다.
4.5.1
버그 수정
zuul tenant-conf-check 명령이 테넌트 구성 파일 유효성을 검사할 때 더 이상 ZooKeeper 연결이 필요하지 않습니다.
4.5.0
서문
체크포인트 release입니다. 버그 수정 및 사용자에게 보이지 않는 변경 사항이 포함되어 있으며, Zuul 기능을 ZooKeeper 로 더 옮기는 과정의 체크포인트 역할을 합니다. 이 버전은 OpenDev 에서 프로덕션 사용 중이며 안정적이고 널리 쓸 준비 상태가 된 것으로 봅니다. 업그레이드 후 문제는 zuul-discuss 로 보고해 주십시오. 문제가 있으면 이전 release로 다운그레이드할 수 있습니다. 최신 개발 빌드를 동작 중인 운영자도 문제 시 이 release로 다운그레이드할 수 있습니다.
4.4.0
새로운 기능
서비스용 새 프로메테우스_port 옵션으로 프로메테우스 Python 클라이언트를 시작하고 메트릭을 노출할 수 있습니다.
잡에서 이제 여러 세마포어를 요청할 수 있으며, 모든 세마포어를 획득할 때까지 시작하지 않습니다.
새 job.semaphores 속성으로 지정하십시오.
상속 및 잡 변형에서 새 속성은 추가 방식입니다. 즉 semaphores 속성이 있는 잡 정의는 부모가 제공한 세마포어 목록을 덮어쓰지 않고 확장합니다(사용 중단 속성의 동작과 다름).
사용 중단 안내
잡 속성 job.semaphore (복수형이 아닌 단수형)은 사용 중단되었습니다. 대신 복수형 job.semaphores 를 사용하십시오. Zuul 구성의 대부분의 목록 항목처럼 단일 항목도 목록 없이 받으므로, 기존 잡을 바꿀 때는 속성 철자만 바꾸면 되며 값 변경 사항은 필요 없습니다.
단수형은 Zuul 5.0 에서 제거됩니다.
4.3.0
새로운 기능
MQTT 리포터에 이제 빌드 결과와 함께 아티팩트 정보가 포함됩니다.
잡에서 이제 워크스페이스에 저장소를 준비할 때 사용할 대안 스킴을 지정할 수 있습니다. 기본값은 동일한 golang 스타일이며, flat 이라는 대안 스킴을 사용할 수 있습니다. 자세한 내용은 job.workspace-scheme 을 참조하십시오.
프로젝트 시크릿 키와 SSH 키가 이제 Zookeeper 에 저장됩니다. 모든 비공개 데이터는 저장 시 암호화되며,
zuul.conf에 새 필수 구성 keystore.password 가 필요합니다.백업 목적으로 시크릿 키와 SSH 키는 이전과 같이 스케줄러 로컬 파일시스템에 남아 있습니다.
업그레이드 안내
머저와 익스큐터가 유지하는 내부 git 저장소 캐시가 충돌을 피하기 위해 새 이름 규칙을 사용합니다. 기존 익스큐터와 머저를 재시작하면 git 저장소 캐시를 제거하고 새 규칙으로 저장소를 다시 클론합니다. 캐시가 다시 준비될 때까지 잡 시작이 느려질 수 있습니다.
프로젝트 시크릿 키와 SSH 키가 Zookeeper 에 암호화 저장되므로
zuul.conf의 새 옵션 keystore.password 가 필요합니다. 스케줄러와 익스큐터 모두 구성에 추가하십시오.
사용 중단 안내
Zuul 이 이제 check run 트리거 정의(check_run)의
rerequested액션을 문자 그대로 올바르게 처리합니다. 이전에는 GitHub API 와 맞지 않는requested였습니다.requested값은 사용 중단되었으며 이후 release에서 제거됩니다.
버그 수정
동일 유형의 연결이 여러 개일 때 잘못된 연결에서 오는 트리거 이벤트를 필터링하지 못하던 버그를 수정했습니다.
4.2.0
서문
체크포인트 release입니다. 버그 수정 및 사용자에게 보이지 않는 변경 사항이 포함되어 있으며, Zuul 기능을 ZooKeeper 로 더 옮기는 과정의 체크포인트 역할을 합니다. 이 버전은 OpenDev 에서 프로덕션 사용 중이며 안정적이고 널리 쓸 준비 상태가 된 것으로 봅니다. 업그레이드 후 문제는 zuul-discuss 로 보고해 주십시오. 문제가 있으면 이전 release로 다운그레이드할 수 있습니다. 최신 개발 빌드를 동작 중인 운영자도 문제 시 이 release로 다운그레이드할 수 있습니다.
4.1.0
새로운 기능
executor.zone 으로 구성한 익스큐터에서 이제 executor.allow_unzoned 를 켜서 영역이 없는 잡도 처리하도록 구성할 수 있습니다.
Zuul 이 이제 Nodepool 의 shell-type 구성을 반영하여 ansible_shell_type 을 구성하며, SSH 로 윈도우 워커에 연결할 때 필요합니다.
Linux 워커에서는 기본이 아닌 ansible_shell_type 과 become 를 함께 쓰는 오래된 ansible 이슈가 있어, 이 기능은 주로 윈도우 워커를 대상으로 합니다.
프로젝트에서 이제 변경 사항 큐를 브랜치별로 큐에 넣도록 구성할 수 있습니다. 자세한 내용은 queue 를 참조하십시오.
순환 의존성이 이제 선택적으로 지원됩니다(기본값은 비활성). 의존성 순환을 큐에 추가하려면 queue.allow-circular-dependencies 옵션을 참조하십시오.
잡에서 이제 zuul_return 으로 변경 사항에 경고 메시지를 남길 수 있습니다. 예는 반환 값 를 참조하십시오.
Zuul 이 이제 나열된 테넌트의 전체 구성 유효성을 검사하는
--validate-tenants옵션을 지원합니다.
업그레이드 안내
익스큐터에 대해 영역 지정 / 영역 미지정 두 종류의 statsd 메트릭이 보고됩니다. 기존 statsd 키는 사용 중단되었으며, 영역 지정 / 영역 미지정 익스큐터 모두를 위한 새 statsd 키를 사용할 수 있습니다. 자세한 내용은 zuul.executors 를 참조하십시오.
사용 중단 안내
공유
queues는 이제 파이프라인별이 아니라 프로젝트별로 구성해야 합니다. project.<pipeline>.queue 지정은 사용 중단되었으며 향후 release에서 제거됩니다.
버그 수정
이전 Zuul release에서 영역이 지정된(zoned) 익스큐터를 사용한 경우 보고된 익스큐터 통계가 단일의 지정되지 않은 영역만 나타냈습니다. 수정되었습니다.
4.0.0
서문
이번이 Zuul 의 첫 4.x release입니다. Zuul 5 를 위해 운영자가 수행할 배포 변경 사항이 필요하며, 5는 모든 컴포넌트가 내결함성과 확장을 갖춘 첫 버전입니다. 마지막 3.x 릴리즈 노드를 읽었다면 필요한 변경 사항을 이미 적용했을 수 있습니다. 아니라면 4 버전으로 업그레이드하기 전에 적용하십시오. 4 버전에서 요구하는 모든 변경은 3.19 에서 선택적으로 지원되므로, 변경 사항을 적용한 뒤 업그레이드해도 안전합니다. 아래 노트, 특히 “업그레이드” 섹션을 모두 읽어 보십시오. 주요 추가 요구 사항은 다음과 같습니다:
TLS ZooKeeper 연결
모든 컴포넌트에서 ZooKeeper 로의 네트워크 연결
SQL 데이터베이스
이러한 변경 사항이 적용되면, 스케일아웃 스케줄러 잡을 지원하기 위한 Zuul 의 추가 업그레이드는 4와 5 버전 사이의 정식 release 과정에서 최소한의 영향으로 진행될 것으로 예상됩니다.
새로운 기능
zuul cli 를 통해 테넌트 단위 REST API 로 “promote” 동작을 사용할 수 있습니다.
SQL 리포터의 빌드가 autohold 요청을 트리거한 경우 “held” 속성이 True 로 구성됩니다. 빌드를 held 상태로 필터링할 수 있습니다.
zuul.d또는.zuul.d의 하위 디렉터리 안에.zuul.ignore파일을 두면 구성 읽기 시 해당 디렉터리를 무시합니다.
익스큐터에서
find모듈 동작이 이제 허용됩니다.
Github checks API 를 통해 변경 사항을 이제 큐에서 제거할 수 있습니다. github 리포터가 checks API 를 사용하도록 구성된 경우, 동작 중인 모든 check 에 커스텀 “Abort” 동작이 제공됩니다.
Zuul 이 게이트 파이프라인에 큐에 추가할 때 GitHub 리뷰 요구 사항을 준수합니다. github.com 및 2.21.0 이상 GitHub Enterprise 에서 동작합니다.
잡에 새
intermediate플래그를 지정해 추상 잡에서만 상속받을 수 있음을 표시할 수 있습니다. 베이스 잡이 인스턴스화되는 위치를 제한하고 싶은 잡 계층을 구성할 때 유용합니다.
builds/ 및 빌드셋/ API 엔드포인트에 재시도된 빌드 정보가 포함됩니다. 최소 한 번 재시도된 빌드라 사용자에게 지금까지 보이지 않았던 것들을 non-final 이라 부릅니다.
builds/ API 로 해당 재시도 빌드를 필터링할 수 있으며, API 요청에
final=false를 구성하면 결과에서 제외할 수 있습니다.
리포팅 시 Zuul 빌드 페이지 URL 을 사용하는 옵션이 추가되었습니다. 이 기능은 테넌트의 모든 파이프라인에 SQL 리포터가 구성되어 있어야 하며, tenant.web-root 또는 web.root 중 하나 이상이 정의되어 있어야 합니다.
tenant.report-build-page를 참조하십시오.
REST API: authorizations: ‘/api/tenant/{tenant}/authorizations’ 에 테넌트 단위 엔드포인트가 추가되었습니다. 사용자가 해당 테넌트에 대한 관리자 권한이 있으면 엔드포인트 호출 시 해당 테넌트로 제한된 관리자 테넌트 목록이 반환됩니다.
해당 Nodepool 구성에서
host-key-checking이False로 구성된 경우 생성된 Ansible 인벤토리에서 해당 호스트에 대한 호스트 키 검사가 비활성화됩니다.
업그레이드 안내
Ansible 2.7 지원이 제거되었습니다.
SQL 리포터를 사용하는 경우 zuul_builds 테이블에 ‘held’ 열이 추가됩니다. 변경 사항을 적용하려면 zuul-scheduler 와 zuul-web 서비스를 함께 재시작해야 합니다.
이전에는 SqlReporter 가 url 이 비어 있으면 데이터베이스에 잡 이름을 url 대신 기록했습니다. 이제 해당 경우 데이터베이스에 null 을 저장하도록 변경되었습니다. Zuul 이 이전 값을 수정하기 위해 데이터베이스 마이그레이션을 자동으로 동작합니다.
-d 옵션은 더 이상 포그라운드 동작을 강제하지 않습니다. 디버그 로깅만 활성화합니다. zuul 을 포그라운드로 시작하려면 대신 -f 옵션을 사용하십시오.
Python 3.5 에서 Zuul 동작 지원이 중단되었습니다.
웹 인터페이스와의 추가 연동이 예정되어 있어
zuul.conf의 web.root 구성이 필수로 표시되었으며, 누락 시 향후 release에서 오류가 발생할 수 있습니다. 지금 구성에 추가하십시오. 화이트 라벨 테넌트 관련 자세한 내용은 tenant.web-root 를 참조하십시오.
zuul-scheduler 와 zuul-web 컴포넌트에 이제 데이터베이스 구성이 필요합니다. 지원되는 데이터베이스 연결은 하나뿐이며, 여러 sql 연결이 구성된 경우 첫 번째만 사용됩니다.
스케줄러의 시그널 기반 full-reconfiguration 트리거(3.3.0 부터 사용 중단)가 제거되었습니다. 대신
zuul-scheduler full-reconfigure를 사용하십시오.
zuul.conf의 zookeeper 섹션이 모든 컴포넌트에 필요하며, 모든 컴포넌트가 ZooKeeper 에 연결할 수 있어야 합니다. 또한 모든 ZooKeeper 연결에 TLS 가 필요합니다. 자세한 내용은 Encrypted Connections 를 참조하십시오.
사용 중단 안내
sql connection 으로 데이터베이스 연결을 정의하는 방식은 사용 중단되었습니다. 현재 데이터베이스 구성 방법은 데이터베이스 를 참조하십시오.
REST API: authorizations: /api/user/authorizations 엔드포인트가 테넌트 단위 엔드포인트로 대체되어 사용 중단되었습니다. 다음 release에서 제거될 예정입니다.
버그 수정
문서에는 MQTT 리포터가 빌드의 log_url 을 보고한다고 되어 있으나,
tenant.report-build-page가 비활성화된 경우에만 그렇습니다. 해당 구성이 활성화되면 MQTT 리포터가 Zuul 의 빌드 결과 페이지 URL 을 보고했습니다. MQTT 는 기기가 소비하는 용도이므로 로그 후처리 같은 사용 사례가 깨졌습니다.<mqtt schema>.buildset.builds.log_url 이 이제 항상 로그 URL 을 담고,
tenant.report-build-page가 활성화된 경우 추가 필드 <mqtt schema>.buildset.builds.web_url 에 빌드 결과 페이지 URL 이 담기도록 수정되었습니다.
3.19.1
보안 이슈
익스큐터에서 코드 동작과 관련된 오래된 보안 취약점이 수정되었습니다.
Zuul 익스큐터는 신뢰할 수 없는 플레이북에서 익스큐터 자체(즉 Ansible 의 localhost)에서 command 또는 쉘 태스크 동작을 금지하도록 설계되었습니다. Tobias Henkel 이 이 검사가 한동안, 아마도 2018년 6월 이후로 깨져 있었음을 발견했습니다.
bubblewrap 사용으로 이 취약점을 통해 동작된 명령도 제한된 환경 안에 갇혀 있어, 빌드 디렉터리 밖의 파일에 접근하거나 잡보다 오래 동작될 수는 없습니다. 다만 임의 명령 동작으로 사용자가 보호되지 않은 내부 네트워크 서비스에 연결했을 가능성은 있습니다.
이 버그가 오래 존재해 사용자가 의도치 않게 이 동작에 의존했을 가능성이 있습니다. zuul-jobs 라이브러리에서 dco-license 와 promote-docker-image 두 잡이 그렇게 사용되고 있음을 발견했습니다. promote-docker-image 는 익스큐터에서 명령을 동작할 필요가 없도록 수정했고, dco-license 는 노드에서 동작되도록 수정했습니다. 익스큐터에서 동작하려면 validate-dco-license 롤 을 사용하는 config-project 에 새 잡을 만들 수 있습니다.
시스템에서 이 영향이 있을 수 있는 다른 잡을 찾아보시기 바랍니다. 이를 위해 이전 빌드로 생성된 job-output.json 파일을 검사해, 이제 (다시) 금지된 잡을 출력하는 스크립트를 만들어 두었습니다. 스크립트는 다음에서 확인할 수 있습니다:
버그 수정
TLS 로 Zookeeper 를 사용하기 위한 중요 수정이 포함된 kazoo 2.8.0 으로 의존성이 올라갔습니다.
사용 중단 경고를 제거하기 위해 Github 액세스 토큰 URL 이 갱신되었습니다.
3.19.0
서문
예상치 못한 버그 수정 release가 없다면 이번이 Zuul 의 마지막 3.x release가 될 것으로 예상됩니다.
다음 Zuul release인 4.0.0 에서는 아래 배포 변경 사항이 필요합니다:
TLS ZooKeeper 연결
모든 컴포넌트에서 ZooKeeper 로의 네트워크 연결
SQL 데이터베이스
이 기능들은 현재 지원되므로, 이번에 ZooKeeper 연결을 TLS 로 전환 하고 SQL 연결을 구성 하는 것이 중요합니다. 현재 일부 Zuul 컴포넌트만 ZooKeeper 에 연결하더라도, 모든 컴포넌트의 zuul.conf 에 [zookeeper] 섹션이 있고 ZooKeeper 서버로 네트워크 연결이 되도록 해 두면 4.0.0 업그레이드를 원활히 할 수 있습니다.
이 변경 사항은 확장성과 가용성을 위한 다중 스케줄러 프로세스 지원 잡을 위한 것입니다. 4.0.0 release 이후에는 이 잡을 지원하는 Zuul 의 추가 업그레이드가 일반 release 과정에서 최소한의 영향으로 진행될 것으로 예상됩니다.
새로운 기능
Zuul 이 ansible_callback “<name>” 로 ansible 콜백 화이트리스트 및 구성을 지원합니다.
파이프라인에 pipeline.dequeue 리포터 동작이 추가되어, 항목이 큐에서 제거될 때마다 리포터가 동작될 수 있습니다. 큐에서 제거 리포터는 항목이 성공도 실패도 아닌 경우에만 적용됩니다.
동적 Badges 생성 지원이 추가되었습니다.
Github checks API 로 보고되는 파일 댓글의 annotation 레벨을
zuul_return에서 구성할 수 있습니다. 각 파일 댓글 항목에 Github 리포터가 사용할 선택 매개변수level([info|warning|error]) 을 지정할 수 있습니다.Zuul 에서 파일 댓글을 제공하는 방법은 반환 값 문서를 참조하십시오.
Github 드라이버의 pipeline.require.<github source>.status 파이프라인 요구 사항이 이제 Github checks API 로 보고되는 상태와도 매칭됩니다.
테넌트 구성에서 config 프로젝트에서 master 가 아닌 다른 브랜치를 로드하는 것을 지원합니다. tenant.config-projects.<project>.load-branch 를 참조하십시오.
Zuul 이 이제 태그 항목을 포함 브랜치와 매칭합니다. 인트리에서 release 잡을 두기가 더 단순해집니다. 자세한 내용은 job.branches 를 참조하십시오.
zuul-익스큐터가 일시 정지될 때 머저 관련 잡도 모두 일시 정지됩니다. 또한
zuul-merger pause로 zuul-머저 도 일시 정지할 수 있습니다.
serial 파이프라인 매니저가 추가되었습니다. 모든 병합에서 모든 병합이 동작되지 않는 경우 supercedent 가 적합하지 않은 직렬화된 배포 파이프라인을 처리하도록 설계되었습니다.
웹 인터페이스에 새 타임존 선택기 추가
Zuul 이 ZooKeeper 에 대한 TLS 보안 연결을 지원합니다.
업그레이드 안내
Ansible 2.6 지원이 제거되었습니다.
Ansible 2.7 은 보안 업데이트만 제공되며 곧 수명이 끝나 사용 중단되었습니다.
버전을 지정하지 않으면 Zuul 이 이제 Ansible 2.9 를 기본으로 사용합니다.
GitHub 에서 Zuul 앱에 check run 읽기/쓰기 권한이 필요합니다.
tools/encrypt_secret.py헬퍼 스크립트의 기본 동작이 입력의 앞뒤 공백을 제거하는 것으로 변경되었습니다. 앞뒤 공백이 유효한 시크릿을 쓰는 경우를 위해--no-strip옵션이 추가되었습니다.
Zuul 이 TLS 보안 연결을 사용하도록 구성하십시오. ZooKeeper 에 대한 비보안 연결로 Zuul 을 동작하는 것은 사용 중단되었으며 향후 release에서 지원되지 않습니다. 자세한 내용은 zookeeper 를 참조하십시오.
보안 이슈
Zuul 이 더 이상
ZUUL_접두사로 시작하는 환경 변수를 Ansible 환경에 추가하지 않아, 시크릿이 노출될 위험이 제거되었습니다.
버그 수정
익스큐터에 구버전 kubectl 이 있거나 익스큐터의 kubectl 이 OpenShift 용인 경우 등에서 쿠버네티스 또는 OpenShift 파드의 로그 스트리밍이 동작하지 않는 경우가 있었습니다. 로그 스트리밍이 더 다양한 kubectl 버전에서 동작하도록 수정되었고 오류 로깅이 개선되었습니다.
3.18.0
새로운 기능
Github 드라이버가 이제 Github checks API 로 파일 댓글을 보고할 수 있습니다. github 리포터가 checks API 를 사용하도록 구성된 경우,
zuul_return으로 제공한 파일 댓글이 Github 의 풀 리퀘스트에 자동으로 보고됩니다.Zuul 에서 파일 댓글을 제공하는 방법은 반환 값 문서를 참조하십시오.
업그레이드 안내
Nodepool 의 쿠버네티스 또는 OpenShift pod 리소스를 사용하는 경우 Zuul 익스큐터에 kubectl 과 socat 가 설치되어 있어야 합니다. 또한 Nodepool 3.12.0 이상이 필요하며, Zuul-jobs 의 “start-zuul-console” 롤 을 베이스 잡의 pre-playbook 에서 동작해야 합니다.
사용 중단 안내
zuul 프로세스를 포그라운드 동작하도록 -d 옵션으로 동작하는 것은 사용 중단되었습니다. 해당 목적에는 -f 를 사용하십시오. -d 옵션은 향후 디버그 로깅만 활성화하는 것으로 바뀝니다.
보안 이슈
add_host host-vars 블랙리스트는 신뢰할 수 있는 플레이북에는 더 이상 적용되지 않습니다.
버그 수정
이전에는 파드의 쉘 또는 command 잡 출력이 잡 출력에 포함되지 않았습니다. 수정되어 이제 스트리밍 출력을 사용할 수 있습니다.
3.17.0
새로운 기능
Github 드라이버가 Github checks API 의 기본 지원을 제공합니다. checks API 로 빌드 결과를 보고하려면 Github 리포터에 pipeline.<reporter>.<github source>.check 속성을 구성하면 됩니다. check_run 이 requested 또는 completed 일 때 트리거할 수도 있습니다.
checks API 를 사용하려면 zuul 이 Github 앱으로 인증되어 있어야 합니다. 필요 요구 사항은 GitHub 드라이버 문서를 참조하십시오.
보안 이슈
localhost 명령 동작을 우회하는 데 쓰일 수 있는 add_host 모듈 속성이 extra-vars 를 통해 블랙리스트에 추가되어, 신뢰할 수 없는 host_vars 로의 악용을 막습니다.
3.16.1
버그 수정
GitHub 앱 인증 사용 시 zuul 앱이 설치되지 않은 저장소에서 익명 액세스로의 폴백이 동작하지 않았습니다.
3.16.0
새로운 기능
tenant.allowed-labels 와 유사한 새 테넌트 옵션 tenant.disallowed-labels 로 테넌트가 접근할 수 있는 레이블을 제한할 수 있습니다.
업그레이드 안내
auth_type 기본값이
digest에서basic으로 바뀌었습니다. Gerrit 2.15 부터 digest 인증은 지원되지 않습니다.HTTP 인증으로 구버전 Gerrit 에 연결하는 경우 이 값을 명시적으로 구성해야 할 수 있습니다.
사용 중단 안내
인증: JWT 드라이버 “RS256withJWKS” 가 “OpenIDConnect” 드라이버로 대체되어 사용 중단되었습니다. “OpenIDConnect” 드라이버는 관리자 구성을 단순화하며 OIDC 구성 발견 규칙과 더 잘 맞습니다.
3.15.0
버그 수정
테스트된 변경 사항에 파일이 없을 때 files 매처가 irrelevant files 매처처럼 동작하도록 수정되었습니다. 즉, 이제 해당 빈 변경 사항을 거부하지 않고 매칭합니다.
3.14.0
새로운 기능
zuul-scheduler smart-reconfigure명령으로 스마트 재구성을 트리거할 수 있습니다.
업그레이드 안내
Zuul 이 잡 동작에 Ansible 2.5 를 더 이상 지원하지 않습니다.
3.13.0
새로운 기능
Zuul 이 잡 동작에 Ansible 2.9 를 지원합니다.
업그레이드 안내
Zuul 잡에서 사용하는 Ansible 기본 버전이 2.8 로 변경되었습니다. 자세한 내용은 job.ansible-version 을 참조하십시오.
Ansible 2.8 로 전환하면서 노드셋의 ansible_python_interpreter 가 ‘auto’ 로 바뀔 수 있습니다. 이로 인해 잡이 이전 release와 다른 Python 버전에서 동작될 수 있습니다. 추가 내용은 Ansible과 Python 3 를 참조하십시오.
Zuul 잡용 Ansible 2.6 이 사용 중단 표시되었으며 향후 release에서 제거됩니다.
3.12.0
새로운 기능
전역 병합 운영을 켜거나 끄는 새 익스큐터 옵션 executor.merge_jobs 가 추가되었습니다.
업그레이드 안내
Gerrit 드라이버에 잡 결과를 리뷰 코멘트로 보고하지 않도록 하는 옵션 pipeline.reporter.<gerrit reporter>.comment 가 추가되었습니다. Gerrit 리포터 구성 문법 때문에 “comment” 단어는 더 이상 리뷰 레이블로 사용할 수 없습니다.
기타 안내
autohold-delete 및 autohold-info zuul CLI 명령 모두에서 –id 옵션이 제거되었습니다.
3.11.1
버그 수정
소프트 의존성이 있는 실패한 잡이 있는 변경 사항이 큐에 무한히 남는 회구를 수정했습니다.
3.11.0
새로운 기능
항목이 파이프라인에 큐에 들어갈 때 리포터가 동작되도록 pipeline.enqueue 리포터 동작이 추가되었습니다.
항목이 어떤 잡도 동작하지 않은 채 파이프라인에서 큐에서 제거될 때 리포터가 동작되도록 pipeline.no-jobs 리포터 동작이 추가되었습니다.
기존 autohold 요청의 상세 정보를 조회하는 zuul CLI 명령 autohold-info 가 추가되었습니다.
Autohold 요청이 메모리가 아닌 ZooKeeper 에 저장됩니다. 이에 따라 기존 요청을 삭제하는 zuul CLI 명령 autohold-delete 가 추가되었습니다.
autohold 요청으로 확보한 노드를 얼마나 유지할지 제어하는 스케줄러 옵션 max_hold_expiration 과 default_hold_expiration 이 추가되었습니다. max_hold_expiration 기본값은 0 이며, 확보된 노드가 자동 만료되지 않음을 의미하고, default_hold_expiration 은 max_hold_expiration 값을 따릅니다.
업그레이드 안내
HTTP 비밀번호가 구성된 경우 Gerrit 드라이버가 쿼리 동작을 HTTP 로 수행합니다. 이 경우 SSH 연결은 이벤트 수신에만 사용됩니다. HTTP 비밀번호는 필수는 아니지만, 라인 코멘트 등 더 많은 리포팅 옵션을 위해 권장됩니다.
3.10.2
새로운 기능
CPU 코어 수에 따른 동시 시작 빌드 수를 executor.max_starting_builds 구성으로 제한할 수 있습니다.
보안 이슈
보안상 synchronize 의 rsh rsync_opts 가 금지되었습니다. 익스큐터 호스트 명령 동작 제한을 우회하는 데에 사용될 수 있었기 때문입니다.
버그 수정
특정 조건에서 Zuul 이 git 저장소를 제대로 갱신하지 못해 master 로 테스트하는 경우가 있었습니다. 현재 master 가 아닌 커밋을 대상으로 할 때 잘못된 커밋을 테스트하게 됐습니다. Zuul 이 이제 저장소를 올바르게 갱신하며 모든 경우에 올바른 커밋을 테스트해야 합니다.
기존 브랜치의 커밋에서 새 브랜치를 만든 경우에 특히 발생할 수 있었습니다. 그러면 이 새 브랜치에 대한 첫 번째 제안 변경 사항이 master 기준으로 테스트되었습니다.
3.10.1
버그 수정
JavaScript 의존성 누락으로 Zuul 대시보드가 제대로 로드되지 않던 문제를 수정했습니다.
3.10.0
새로운 기능
JWT 표준 기반으로 zuul-web REST API 또는 zuul 클라이언트를 통해 테넌트 특권 작업을 수행할 수 있습니다. 유효한 베어러 토큰이 필요하며, 범위는 토큰 클레임 조건 매칭으로 정해지고, 이 조건은 Zuul 테넌트 구성에 정의할 수 있습니다. Zuul 은 HS256/RS256 으로 토큰 서명·검증을 지원하며, 외부 JWKS 는 토큰 검증 전용으로 지원됩니다. 현재 테넌트 단위 동작은 “autohold”, “enqueue”, “dequeue” 입니다.
config 프로젝트에서 allowed-projects 구성(신뢰할 수 없는 프로젝트의 시크릿 사용 잡에 대한 암묵적 구성 포함)과 관계없이 어떤 프로젝트의 파이프라인에도 잡을 추가할 수 있습니다.
GitHub 가 풀 리퀘스트 를 기본 브랜치에 병합할 때 사용할 병합 방식을 선택할 수 있습니다.
관리자가 테넌트 내 특정 프로젝트에서 추가 구성을 로드하도록 지정할 수 있는 tenant.untrusted-projects.<project>.extra-config-paths 옵션이 추가되었습니다.
공유 잡·역할을 주로 두는 프로젝트가 자체 테스트용 추가 인리포 구성을 포함할 수 있게 하는 데 유용할 수 있습니다(프로젝트 다른 사용자와 무관할 수 있음).
Github 에서 merge-mode
squash-merge가 지원됩니다.
잡 동작 후 수행할 새 정리 단계를 위한 job.cleanup-run 속성이 추가되었습니다.
Pagure 코드 리뷰 시스템 지원이 추가되었습니다.
파이프라인에서 pipeline.supercedes 속성으로 다른 파이프라인을 대체함을 표시할 수 있습니다.
다른 파이프라인을 대체하는 파이프라인에 변경 사항이 큐에 들어가면 다른 파이프라인에서는 제거됩니다. 예를 들어 gate 파이프라인이 check 파이프라인을 대체해 거의 동일한 잡을 동시에 돌리며 테스트 리소스을 쓰지 않게 할 수 있습니다.
업그레이드 안내
프로젝트에서 보호되지 않은 브랜치가 제외되면 이제 잡에서도 걸러집니다.
executor.job_dir 구성 기본값이
/tmp에서/var/lib/zuul/builds로 변경되었습니다. executor.job_dir 과 executor.git_dir 이 같은 파일시스템에 있어야 하므로, 이 변경 사항으로 대부분의 기본 구성에서 같은 파일시스템을 쓰게 됩니다.builds하위 디렉터리는 없으면 생성되지만,/var/lib/zuul은 존재하고 Zuul 사용자가 쓸 수 있어야 합니다.
파일 매처가 있는 잡은 잡 구성이 변경되면 자동으로 매칭됩니다. 따라서 잡 구성 변경 사항이 자체 테스트되도록 Zuul 구성 파일을 매칭 파일 목록에 넣을 필요가 없습니다.
이전 동작을 유지하려면 job.match-on-config-updates 를
False로 구성하십시오.
3.9.0
새로운 기능
Zuul 이 잡 동작에 Ansible 2.8 을 지원합니다.
빌드셋에서 첫 실패 시 즉시 보고하고 빌드를 취소하는 project.<pipeline>.fail-fast 를 Zuul 이 지원합니다.
Nodepool 이 제공하면 Zuul 이 리소스 사용 통계를 보고합니다.
다음 통계가 출력됩니다:
zuul.nodepool.resources.tenant.{tenant}.{resource}: 테넌트별 현재 사용 리소스 게이지 및 테넌트별 합계 사용량 카운터. 예: cpu 초
zuul.nodepool.resources.project.{project}.{resource}: 프로젝트별 현재 사용 리소스 게이지 및 프로젝트별 합계 사용량 카운터. 예: cpu 초
3.8.1
버그 수정
3.8.0 에서 발생한 메모리 누수를 수정했습니다.
3.8.0
새로운 기능
부모 잡이 반환한 artifacts 가 이제 동일 빌드셋의 자식 잡에서도 사용 가능합니다.
보안 이슈
config(trusted) 레이아웃 갱신이 병합 전에 동적 로드 레이아웃으로 쓰일 수 있던 버그를 수정했습니다. config(trusted) 저장소 밖에서 온 구성 오류로 Zuul 이 동작 중일 때 발생할 수 있었고, 논리 오류로 이 경우 신뢰된 레이아웃이 반환되었습니다.
사용자는 업그레이드하십시오.
버그 수정
job.requires 를 쓰는 잡이 요구 사항을 충족하지 못하면 이제 “SKIPPED” 가 아니라 “FAILED” 로 기록됩니다. 아티팩트를 만들어야 하는 선행 잡이 오류로 실패한 경우 발생할 수 있습니다.
3.7.1
버그 수정
Ansible 2.7 사용 시 uri 모듈이 모듈 오류로 비정상 종료되던 문제를 수정했습니다.
scheduler.default_ansible_version 이 무시되던 문제를 수정했습니다.
3.7.0
새로운 기능
add_host 잡에 ansible_python_interpreter 변수가 화이트리스트에 추가되었습니다.
Zuul 이 잡 동작에 Ansible 2.6 을 지원합니다.
Zuul 이 잡 동작에 Ansible 2.7 을 지원합니다.
잡에서 사용할 Ansible 버전을 지정할 수 있습니다. job.ansible-version 으로 지정합니다.
업그레이드 안내
Ansible 기본 버전이 이제 2.7 입니다. 잡에 문제가 있으면 job.ansible-version, tenant.default-ansible-version 또는 scheduler.default_ansible_version 으로 덮어쓸 수 있습니다.
[fingergw]구성의user값이 이전에는zuul이었으나 이제 기본값이 없어 fingergw 가 권한을 낮추지 않습니다. 비특권 사용자로 명시 구성하는 것을 권장합니다.
여러 Ansible 버전을 동시에 쓰기 위해 Zuul 이 가상 환경에서 직접 관리합니다. 기본적으로 Zuul 이 기동 시 필요한 Ansible 버전을 설치하므로 사용자 조치는 필요 없습니다. 다만 설치 시
zuul-manage-ansible을 동작해 Ansible 환경을 미리 설치하는 것을 권장합니다.
[zookeeper]구성의hosts값이 이전에는localhost:2181이었으나 이제 기본값이 없습니다. 이 값은 필수이며 명시적으로 구성해야 합니다(문서에도 항상 그렇게 되어 있음).
3.6.1
보안 이슈
로컬 잡에 raw 모듈이 차단되지 않았습니다. 이로 인해 보호를 우회해 익스큐터에서 명령을 동작할 수 있었습니다.
3.6.0
새로운 기능
아티팩트에 SQL 데이터베이스에 아티팩트 관련 임의 메타데이터를 저장하는 metadata 필드를 포함할 수 있습니다.
job.run 속성에서 이제 플레이북 하나 또는 목록을 지원합니다.
의존 관계로 서로 다른 변경 사항에서 동작되는 잡 간 아티팩트·리소스 의존성(예: 한 프로젝트에서 빌드한 컨테이너 이미지를 다른 프로젝트에서 사용)을 표현하는 기능이 job.provides 및 job.requires 잡 속성으로 추가되었습니다.
job.dependencies 속성으로 “소프트” 의존성을 표현할 수 있습니다. 즉, 다른 잡이 완료된 뒤에만 동작되며, 해당 잡이 동작될 때만 적용됩니다. 예: 항상 동작되어야 하는 배포 잡이, 소스 변경 사항 시에만 동작되는 빌드 잡에 의존하는 경우.
업그레이드 안내
JavaScript 대시보드에서 Service Worker 가 기본적으로 비활성화됩니다. 사용하려면 배포자가
REACT_APP_ENABLE_SERVICE_WORKER를 구성해야 합니다.
Zuul 이 잡 변수 zuul.message 를 추가했습니다. jinja 태그가 들어갈 수 있어 잡에서 zuul 변수 접근에 문제를 일으킬 수 있습니다. 이에 메시지가 base64 인코딩되며, 이 변수를 쓰는 잡은
{{ zuul.message }}를{{ zuul.message | b64decode }}로 바꿔야 합니다.
3.5.0
새로운 기능
executor.min_avail_mem 구성이 이제 cgroup 제한을 반영합니다. zuul.executor.<executor>.pct_used_ram_cgroup 메트릭도 사용할 수 있습니다.
부모 잡의 플레이북에서 시크릿을 사용할 수 있도록 job.secrets.pass-to-parent 속성이 추가되었습니다(시크릿을 쓰도록 설계했지만 실제 제공은 자식 잡에 맡기는 경우 등). Secret 문서도 참조하십시오.
플레이북에서
known_hosts사용 제한이 해제되었습니다.
익스큐터가 잡이 시작 단계에서 소비한 시간을 zuul.executor.<executor>.starting_builds 타이머로 내보냅니다.
업그레이드 안내
zuul_return 모듈이 Ansible action 플러그인으로 바뀌었습니다. 잡 플레이북에서 delegate_to 나 localhost 전용 플레이를 쓸 필요가 없으며, 이 모듈은 action 플러그인으로 기본적으로 localhost 에서 동작됩니다.
보안 이슈
신뢰할 수 없는 프로젝트에서 시크릿을 쓰는 잡에 allowed-projects 가 자동 구성됩니다.
프로젝트 정의를 바꾸는 변경 사항을 Depends-On 하는 변경 사항을 만들면 신뢰할 수 없는 프로젝트에서 allowed-projects 를 우회할 수 있습니다. 이 동작은 예상 밖일 수 있어, 민감한 경우에 의존하지 않도록 문서에 경고가 추가되었습니다.
독립적인 병합 전 사후 리뷰 파이프라인(즉 post-review 가 true, manager 가 independent 이고 병합 전 변경 사항에 동작하는 파이프라인)이 있는 시스템에서 신뢰할 수 없는 프로젝트에 시크릿을 쓰는 잡이 정의된 경우, 시크릿이 노출되거나 시크릿으로 보호된 리소스가 사용될 수 있었습니다.
이 상황에서 노출·사용을 막기 위해, 신뢰할 수 없는 프로젝트에 정의된 잡에서 시크릿을 쓰면 allowed-projects 가 현재 프로젝트로 자동 구성되며 덮어쓸 수 없습니다.
버그 수정
신뢰할 수 없는 플레이북에서 localhost 에 add_host Ansible 잡을 쓸 때 ‘인벤토리에 ansible_user 로 ssh 호스트 추가가 금지됨’ 메시지가 더 이상 나오지 않습니다.
git 드라이버 연결 구성의 baseurl 끝에 슬래시가 있으면 잡이 무한 대기하던 문제를 수정했습니다.
3.4.0
새로운 기능
잡이 아티팩트 URL 을 반환할 수 있으며, SQL 데이터베이스(구성된 경우)에 저장됩니다. 사용법은 아티팩트 URL 반환 를 참조하십시오.
하나 이상의 zuul 익스큐터를 executor.zone 에 넣을 수 있습니다. Nodepool 노드에 공인 IP 가 없는 클라우드에서 유용하며, Nodepool 노드와 같은 사설망에 zuul 익스큐터를 둘 수 있습니다.
OpenStack Nodepool 드라이버로 띄운 노드인 경우 Ansible 인벤토리 파일에 nodepool.host_id 변수가 포함됩니다.
새 스케줄러 옵션 scheduler.relative_priority 로 Nodepool 에게 덜 바쁜 프로젝트의 요청을 더 빨리 처리하도록 지시할 수 있습니다.
업그레이드 안내
하위 통계가 올바르게 동작하도록 zuul.nodepool 통계가 zuul.nodepool.requests 아래로 옮겨졌습니다. 예: zuul.nodepool.requested 가 zuul.nodepool.requests.requested.total 이 됐습니다. 이전에 없던 label, size 카운터는 zuul.nodepool.requests.<state>.<size|label> 에 있습니다. 자세한 내용은 모니터링 문서를 참조하십시오.
zuul-web 서비스가 ZooKeeper 접근을 요구하므로 방화벽에서 해당 서비스 접근을 허용하도록 수정해야 할 수 있습니다. 또한 zuul.conf 에 zookeeper 구성 섹션이 있어야 합니다.
3.3.1
새로운 기능
테넌트가 접근할 수 있는 연결을 제한하는 새 테넌트 옵션 tenant.allowed-triggers 와 tenant.allowed-reporters 가 추가되었습니다.
테넌트가 접근할 수 있는 레이블을 제한하는 tenant.allowed-labels 옵션이 추가되었습니다.
세마포어를 쓰는 잡에서 리소스를 요청하기 전에 획득할지, 동작 직전에 획득할지 구성할 수 있습니다.
업그레이드 안내
세마포어를 쓰는 잡의 획득 동작이 바뀌었습니다. 이전에는 잡이 리소스를 요청한 뒤 동작 직전에 세마포어를 획득했습니다. 이로 인해 리소스 낭비가 컸습니다. 이제는 기본적으로 리소스 요청 전에 세마포어를 획득합니다. 리소스 낭비가 허용되면 job.semaphores.resources-first 로 이 동작을 덮어쓸 수 있습니다.
보안 이슈
add_host 모듈 옵션이 호스트 이름, 포트, 사용자, 비밀번호로 제한됩니다. 이전에는 악의적 옵션으로 보호를 우회해 익스큐터에서 잡을 동작할 수 있었습니다. ssh 와 kubectl 연결만 허용됩니다.
버그 수정
도달 불가 노드를 만난 잡이 이제 올바르게 감지되어 재시도됩니다.
3.3.0
새로운 기능
encrypt_secret.py 도구가 로컬 프로젝트 키 파일 URI(예:
file:///path/to/key.pub)를 지원합니다. Zuul 웹 API 에 접근해 프로젝트 키를 가져오지 않고도 시크릿을 암호화할 수 있습니다.
zuul-scheduler full-reconfigure명령으로 전체 재구성을 트리거할 수 있습니다.
Gerrit 드라이버가 이제 (선택적으로) SSH 대신 HTTP 로 보고할 수 있습니다. 앞으로 파일·라인 코멘트 보고에 사용될 예정입니다(SSH API 는 리뷰 메시지만 지원).
Zuul 이 파일 댓글을 남기는 것을 지원하며, 현재는 Gerrit 드라이버 사용 시에만 가능합니다. 자세한 내용은
zuul_return문서를 참조하십시오.
잡이 반환 값 로 스스로 일시 정지한 뒤 자식 잡이 끝날 때까지 동작되게 할 수 있습니다. 자식 잡이 사용할 서비스를 제공하는 데 쓸 수 있습니다.
프로젝트마다 SSH 키쌍이 생성되며, 해당 프로젝트를 신뢰하는 시스템에 접근하는 사후 리뷰 잡에서 사용할 수 있습니다.
GitHub <github connection>.rate_limit_logging 을 구성할 수 있습니다. 비활성화하면 네트워크 왕복 시간을 줄일 수 있으며, 연결별로 구성할 수 있습니다.
Zuul 웹 대시보드가 React 로 다시 작성되었습니다.
플레이북에서
add_host사용 제한이 해제되었습니다.
웹 인터페이스에 단일 빌드 정보를 표시하는 새 빌드가 페이지가 추가되었습니다.
웹 인터페이스에 알림 서랍과 config-errors 엔드포인트 데이터를 표시하는 ConfigErrors 페이지가 추가되었습니다.
웹 인터페이스에 잡 구성을 탐색하는 새 Job 페이지가 추가되었습니다.
winRM 연결에서 사용할 클라이언트 인증서 위치를 이제 구성할 수 있습니다.
업그레이드 안내
Zuul 웹 대시보드가 단일 index.html 이 되었으며 정적 오프로드 서버에 새 재작성 규칙이 필요합니다. 설치 안내에서 하위 호환 재작성 규칙을 확인하십시오. 하위 디렉터리에서 웹 대시보드를 제공하려면 원하는 홈페이지 위치로 애플리케이션을 다시 빌드해야 합니다.
사용 중단 안내
zuul-scheduler PID 에 SIGHUP 을 보내는 시그널 기반 전체 재구성 트리거는 사용 중단되었습니다. 이제
zuul-scheduler full-reconfigure명령을 사용하십시오.
3.2.0
새로운 기능
Zuul 클라이언트에 ‘tenant-conf-check’ 명령이 추가되었습니다. 테넌트 구성 스키마를 검사하며 오류가 있으면 -1 로 종료합니다.
잡이 성공적으로 끝난 뒤 동작될 1단계 자식 잡 목록인 새 Ansible 인벤토리 변수 zuul.child_jobs 가 추가되었습니다.
잡 동작 시 –extra-vars 플래그를 사용하는 job.extra-vars 를 잡에서 사용할 수 있습니다.
프로젝트와 프로젝트 템플릿에서
vars구성 항목으로 변수를 정의할 수 있습니다. 잡은 동작 시 잡 변수와 같은 방식으로 이 변수에 접근할 수 있습니다.
supercedent 파이프라인 관리자가 추가되었습니다. 병합 후 아티팩트 빌드 파이프라인을 더 효율적으로 만들기 위한 것입니다.
Zuul CLI 에 dequeue 명령이 추가되었습니다. 운영자가 지정한 빌드셋을 원할 때 중지할 수 있습니다.
zuul_return 으로 자식 잡을 건너뛸 수 있습니다. zuul.child_jobs 인벤토리 변수로 동작되도록 구성된 자식 잡 목록을 가져온 뒤 zuul_return 으로 목록을 수정할 수 있습니다. zuul_return zuul.child_jobs 에 없는 자식 잡은 건너뜁니다. 예는 반환 값 를 참조하십시오.
버그 수정
프로젝트 템플릿이 브랜치를 인식하며 프로젝트 스탠자와 비슷하게 동작합니다. 브랜치에 템플릿이 정의되면 해당 브랜치 변경 사항에만 적용됩니다.
타이머 트리거가 더 이상 모든 프로젝트의 모든 브랜치에 대해 이벤트를 큐에 넣지 않으며, 타이머로 트리거되는 파이프라인을 실제로 사용하는 프로젝트만 처리합니다.
3.1.0
새로운 기능
GitHub 드라이버가 게이트 파이프라인 진입에 필요한 풀 리퀘스트의 필수 상태 검사를 판별할 수 있습니다. 게이트 파이프라인에 필수 상태 검사를 하드코딩할 필요가 없어지며 다른 GitHub 앱과의 연동이 더 유연해집니다.
Zuul 이 이제 잘못된 구성으로도 기동할 수 있습니다. 프로젝트 저장소에서 구성 파일을 읽을 때 문제가 발견되면 Zuul 이 해당 이슈를 저장하고 깨진 구성 블록은 건너뜁니다. 이슈는 구성 단계 끝에 스케줄러 로그에 보고됩니다.
MQTT 메시지로 빌드 보고를 하는 <mqtt connection> 드라이버가 추가되었습니다.
GitHub 드라이버가 pipeline.require.<github source>.merged 요구 사항을 지원합니다.
json 로그에 이제 잡 항목과 마찬가지로 롤 이름과 uuid 가 포함됩니다.
업그레이드 안내
files(및 irrelevant-files) 매처를 이제 덮어쓸 수 있습니다. Zuul 이 잡 변형 수집에 브랜치 매처만 사용합니다. 변형이 수집되면 결합되고, files 와 irrelevant-files 속성은 다른 잡 속성처럼 상속·덮어쓰기됩니다. 최종 값으로 잡 동작 여부를 결정합니다.
Zuul 이 이제 Ansible 2.5 를 사용합니다.
보안 이슈
Tobias Henkel(BMW Car IT GmbH)이 이 release에서 수정된 취약점을 발견했습니다. 빌드 중 노드가 오프라인이 되면 잡의 no_log 속성이 무시됩니다. 루프 변수(예: with_items)를 쓰는 잡에서 도달 불가 오류가 나면 루프 항목 내용이 콘솔에 출력될 수 있어 자격 증명이나 시크릿이 유출될 수 있습니다. MITRE 가 이 취약점에 CVE-2018-12557 을 부여했습니다.
버그 수정
신뢰할 수 없는 플레이북에서 zuul_return Ansible 잡을 쓸 때 ‘로컬 코드 동작이 금지됨’ 메시지가 더 이상 나오지 않습니다.
3.0.3
새로운 기능
project.default-branch 옵션이 문서화되었습니다. 3.0.0 부터 지원되었으나 문서에 빠져 있었습니다.
프로젝트 스탠자에서 project.name 의 정규식 매칭을 지원합니다. 여러 프로젝트에 한 번에 프로젝트 파이프라인을 적용하는 데 쓸 수 있습니다.
사용 중단 안내
Project Template 스탠자에는
merge-mode와default-branch속성을 더 이상 넣을 수 없습니다.
버그 수정
동적 구성 변경(
zuul.yaml파일 변경 사항)에 대한 구성 로딩이 CPU·메모리 측면에서 훨씬 효율적으로 바뀌었으며, 일반 변경 사항 대비 약간의 부담만 있습니다.
3.0.2
새로운 기능
GitHub 트리거 상태 필터 status 및 파이프라인 요구 사항 pipeline.require.<github source>.status 가 정규 표현식을 지원합니다.
업그레이드 안내
의존성으로
fb-re2Python 라이브러리가 추가되었습니다. 빌드하려면re2라이브러리와 헤더 설치가 필요할 수 있습니다.
빌드 시작·종료 시각이 이제 데이터베이스에 UTC 로 저장됩니다. zuul 웹에서 지역화를 하지 않으므로 zuul API 도 이 시각을 UTC 로 노출합니다.
버그 수정
스토리 2001441 이 수정되었습니다. 한 Zuul 리포터의 실패가 다른 리포터 보고를 중단시키지 않습니다. 일부 실패가 있어도 변경 사항당 가능한 한 많은 정보가 보고됩니다. 첫 번째 실패한 리포터 이후 빌드셋 상태가 ‘ERROR’ 로 바뀝니다.
zuul-changes.py 스크립트가 새 zuul-web API 라우트에 맞게 수정되었습니다.
3.0.1
새로운 기능
Git 저장소에 추측 상태의 이전 변경 사항을 가리키는 참조(들)를 가진
origin리모트가 생깁니다.잡이 변경 사항에 포함된 커밋을 판별할 수 있게 되었으며, 이전에는 불가능했습니다. 리모트 URL 은 가짜 값으로 구성되어 리모트 저장소와 통신하는 git 명령에는 쓸 수 없습니다.
PostgreSQL 이 데이터베이스 백엔드로 공식 지원됩니다. 데이터베이스 연결 구성은
sql connection을 참조하십시오.
스케줄러 옵션 scheduler.tenant_config_script 로 Zuul 에게 스크립트를 동작하고 그 yaml 출력을 테넌트 구성으로 읽으라고 할 수 있습니다. 이 옵션은 scheduler.tenant_config 옵션과 함께 쓸 수 없습니다.
업그레이드 안내
alembic version 테이블도 접두사가 붙도록 수정되었습니다.
table_prefix사용 시 필요합니다. 이미table_prefix를 쓰고 있다면 Zuul 기동 전에alembic_version테이블을<prefix>alembic_version으로 이름을 바꿔야 합니다. 그렇지 않으면 zuul 이 테이블을 다시 만들려다 실패합니다.table_prefix를 쓰지 않으면 무시해도 됩니다.
버그 수정
Zuul 롤 저장소 체크아웃이 이제 job.override-checkout 을 따릅니다.
이전에는 잡에 Zuul 롤 이 지정되면 해당 저장소가 패치 의존성 체인에 있지 않은 한 보통 master 브랜치를 체크아웃했습니다. 이제는 job.override-checkout 옵션을 포함해 체크아웃할 브랜치를 정하는 일반 절차를 따릅니다.
기존 잡 동작이 바뀔 수 있습니다. 상황에 따라 job.override-checkout 구성이나 프로젝트의 다른 브랜치로 롤 복사가 필요할 수 있습니다.