Docker executor에서 Windows 버전 지원 추가
GitLab은 특정 버전의 Windows를 지원합니다. Docker executor에서 새로운 Windows 버전을 지원하려면, 동일한 Windows 버전의 헬퍼 이미지를 릴리스해야 합니다. 해당 버전의 헬퍼 이미지를 빌드하려면 해당 Windows 버전에 GitLab Runner가 설치되어 있어야 합니다.
GitLab은 특정 버전의 Windows를 지원합니다.
Docker executor에서 새로운 Windows 버전을 지원하려면, 동일한 Windows 버전의 헬퍼 이미지를 릴리스해야 합니다. 그런 다음 Windows 호스트 OS에서 헬퍼 이미지를 실행할 수 있습니다.
해당 버전의 헬퍼 이미지를 빌드하려면 해당 Windows 버전에 GitLab Runner가 설치되어 있어야 합니다. Windows는 호스트 OS와 컨테이너 OS 버전이 일치해야 하기 때문입니다.
인프라#
사용자 작업에 사용될 헬퍼 이미지를 빌드해야 합니다.
인프라용 기본 이미지 생성#
새 Windows 버전을 지원하려면 새 헬퍼 이미지를 생성해야 할 수 있습니다. Windows 버전은 이전 헬퍼 이미지를 사용할 수도 있고(하위 호환성), 새로 빌드된 헬퍼 이미지가 필요할 수도 있습니다. 호환성 상세 내용은 Windows 컨테이너 버전 호환성을 참조하세요.
새 호스트 OS 환경이나 헬퍼 이미지를 지원하려면 windows-containers 리포지터리를 업데이트하여 기본 이미지를 빌드하세요. autoscaler는 이 기본 이미지를 사용하여 GitLab Runner 헬퍼 이미지를 빌드합니다.
예를 들어, Windows Server 2025 지원을 추가할 때는 하위 호환성 덕분에 기존 2022 헬퍼 이미지를 재사용할 수 있었습니다. 그러나 Windows Server 2022 지원을 추가할 때는 Windows Server 2019 헬퍼 이미지가 프로세스 격리와 호환되지 않아 새 이미지가 필요했습니다.
일부 GCP 기본 이미지는 빌드 프로세스 중 Docker 설치가 필요합니다. 새 이미지를 위한 CI/CD 환경을 업데이트하려면 다음 파일을 업데이트하세요:
.gitlab-ci.yml.gitlab/ci/build.gitlab-ci.yml
생성된 이미지 테스트#
dev 단계에서 생성된 이미지를 테스트하는 것을 권장합니다. 이미지 이름은 dev xxx 형식이며 xxx는 Windows 서버 버전을 나타냅니다.
이미지를 테스트하려면 다음 단계를 수행하세요:
GitLab Runner 프로젝트에서 새로운 Windows 서버 버전에 대한 지원을 추가하고gitlab-runner-helper.x86_64-windows.exe바이너리를 생성합니다.dev단계에서 생성된 디스크 이미지를 사용하여 VM을 생성합니다.windows server ltsc2022지원을 추가할 때 디스크 이미지 이름은runners-windows-21h1-core-containers-dev-40-mr이었습니다.- 이 VM에서
gitlab-runner-helperDocker 이미지를 생성합니다. 이를 위해 VM에gitlab-runner-helper.x86_64-windows.exe바이너리를 다운로드해야 합니다.Invoke-WebRequestPowerShell 명령을 사용할 수 없는 경우Start-BitsTransfer명령을 대신 사용하세요. - 지원할 새로운 GCP Windows 서버 이미지를 사용하여 다른 VM을 생성합니다.
- 이전에 업데이트한
GitLab-Runner프로젝트에서 생성된gitlab-runner실행 파일을 설치하고 프로젝트에 등록합니다. - 작업을 성공적으로 시작합니다.
이 절차의 예시는 이 코멘트에 요약되어 있습니다.
이미지 게시#
이전 단계에서 생성한 머지 리퀘스트를 머지한 후, 이미지를 프로덕션 GCP 프로젝트에 게시하려면 publish 작업을 수동으로 실행해야 합니다.
publish 작업에서 생성되는 이미지 이름을 기록해 두세요.
예를 들어, 이 작업에서는
runners-windows-2019-core-containers-2020-07-17라는 이미지를 생성했습니다. 이 이름은
설치 단계에서 사용됩니다.
두 개의 새 러너 매니저 추가#
이 시점에서 프로덕션 환경에 기본 이미지가 준비되어 있어야 하므로, GitLab Runner 프로젝트의 CI 파이프라인 내에서 사용할 수 있습니다. 남은 작업은 Runner Manager를 설정하는 것입니다.
등록#
gitlab-runner register를 실행하여
두 개의 새 러너를 등록합니다. 이는 프로젝트별 러너여야 하므로,
프로젝트 설정에서
등록 토큰을 사용해야 합니다.
러너 이름은 기존 러너와 동일한 명명 규칙을 따라야 합니다.
예를 들어, Windows Server Core 2004의 경우 Runner Manager를 다음과 같이 이름을 지정해야 합니다:
windows-2004-private-runner-manager-1windows-2004-private-runner-manager-2
등록 후, config.toml 파일에서 찾은 러너 토큰을 안전하게 저장해 두세요.
설치 단계에서 이 토큰이 필요합니다.
마지막으로, 새 Runner Manager를 security 포크 프로젝트와 'liveness' 테스트 지원 프로젝트에 할당해야 합니다. 각각의 새 Runner Manager에 대해 다음을 수행하세요:
- Runner 프로젝트 CI/CD 설정 페이지의 Runners 섹션으로 이동합니다.
- 새 Runner의 속성을 편집하여
Lock to current projects를 해제함으로써 잠금을 해제합니다. - security 포크 프로젝트의 경우:
- 프로젝트 CI/CD 설정 페이지의 Runners 섹션으로 이동합니다.
Other available runners섹션으로 스크롤하여 이 프로젝트에서 러너를 활성화합니다.
- 'liveness' 테스트 지원 프로젝트의 경우:
- 프로젝트 CI/CD 설정 페이지의 Runners 섹션으로 이동합니다.
Other available runners섹션으로 스크롤하여 이 프로젝트에서 러너를 활성화합니다.
- Runner 프로젝트 CI/CD 설정 페이지에서 Runner를 다시 잠급니다.
설치#
해당 Windows 버전에 대한 특정 config.toml을 갖기 위해
autoscaler의
새 인스턴스를 설치합니다. Ansible 리포지터리(https://ops.gitlab.net/gitlab-com/gl-infra/ci-infrastructure-windows)를
업데이트하여 새 Windows 버전을 포함해야 합니다.
예를 들어, 13.7 마일스톤에서 Windows Server Core 2004에 대한 지원을 추가하려면 다음 머지 리퀘스트를 참고하세요:
https://ops.gitlab.net/gitlab-com/gl-infra/ci-infrastructure-windows/-/merge_requests/70.
이 MR에서 다음 파일을 업데이트합니다:
ansible/roles/runner/tasks/main.ymlansible/roles/runner/tasks/autoscaler.ymlansible/group_vars/gcp_role_runner_manager.ymlansible/host_vars/windows-shared-runners-manager-1.ymlansible/host_vars/windows-shared-runners-manager-2.yml
머지 리퀘스트를 생성할 때, 메인테이너에게 2개의 새 러너를 등록하고
ansible/host_vars에 정의된 키로 CI/CD 변수에 저장해야 한다는 점을 알려야 합니다.
registry.gitlab.com/gitlab-org/ci-cd/tests/liveness 게시#
registry.gitlab.com/gitlab-org/ci-cd/tests/liveness 이미지는
GitLab Runner의 CI 프로세스 일부로 사용됩니다.
새 Windows 버전을 기반으로 하는 이미지가 게시되어 있는지 확인하세요.
예를 들어, 13.7 마일스톤에서 Windows Server Core 2004에 대한 지원을 추가하려면 다음
머지 리퀘스트를 참고하세요.
이 MR에서 다음 파일을 업데이트합니다:
.gitlab-ci.ymlMakefile
특정 Windows 버전을 지원하도록 GitLab Runner 업데이트#
사용자가 Docker executor를 사용할 수 있도록 헬퍼 이미지를 제공해야 하므로, 코드베이스에 특정 검사가 있으며 새 Windows 버전을 허용해야 합니다.
다음 항목을 업데이트해야 합니다:
- 지원 버전 목록 및 관련 테스트.
- 기본 이미지 목록 및 관련 테스트.
- 기본 브랜치에서 테스트를 실행하도록 GitLab CI 업데이트.
release스테이지 업데이트.
예를 들어, 13.7 마일스톤에서 Windows Server Core 2004에 대한 지원을 추가하려면 다음
머지 리퀘스트를 참고하세요.
이 MR에서 다음 파일을 업데이트합니다:
helpers/container/helperimage/windows_info.gohelpers/container/helperimage/windows_info_test.gohelpers/container/windows/version.gohelpers/container/windows/version_test.go.gitlab/ci/test.gitlab-ci.yml.gitlab/ci/coverage.gitlab-ci.yml.gitlab/ci/_common.gitlab-ci.yml.gitlab/ci/release.gitlab-ci.ymlci/.test-failures.servercore2004.txtdocs/executors/docker.md
