Windows 버전에 대한 도커 실행기 지원 추가하기

GitLab은 특정 Windows 버전을 지원합니다.

Docker 실행기에 대한 새 Windows 버전을 지원하려면 동일한 Windows 버전의 도우미 이미지를 릴리스해야 합니다. 그런 다음 해당 도우미 이미지를 Windows 호스트 OS에서 실행할 수 있습니다.

해당 버전을 위한 도우미 이미지를 빌드하려면 해당 Windows 버전에 GitLab 러너를 설치해야 합니다. Windows에서는 호스트 OS와 컨테이너 OS 버전이 일치해야 합니다.

인프라

사용자 작업에 사용할 도우미 이미지를 빌드해야 합니다.

인프라용 베이스 이미지 생성

Windows는 호스트 OS 버전이 컨테이너 OS와 일치해야 하므로, 예를 들어 Windows Server Core 2004 이미지를 빌드한다면 Windows Server Core 2004gitlab-runner를 설치해야 합니다.

이를 위해 windows-containers 저장소를 업데이트하여 베이스 이미지를 빌드해야 합니다. 이 베이스 이미지는 CI의 자동 스케일러에서 사용될 것입니다. 새 기본 이미지는 GitLab 러너 도우미 이미지를 빌드하는 데 사용됩니다.

예를 들어, 우리가 13.7 마일스톤에서 Windows Server Core 2004를 지원하고 싶다면 다음 병합 요청을 확인할 수 있습니다. GCP에서 제공하는 기본 이미지에 따라 빌드 프로세스 중에 Docker를 설치해야 할 수도 있고 아닐 수도 있습니다. 이 MR에서는 다음 파일을 업데이트합니다:

  1. .gitlab-ci.yml
  2. .gitlab/ci/build.gitlab-ci.yml

생성된 이미지 테스트

생성된 이미지를 dev 단계에서 테스트하는 것을 권장합니다. 이는 dev xxx로 이름이 지정될 가능성이 높습니다. 여기서 xxx은 Windows 서버 버전을 나타냅니다.

이미지를 테스트하려면 다음 단계를 따를 수 있습니다:

  1. GitLab 러너 프로젝트에서 새 Windows 서버 버전을 지원하고 gitlab-runner-helper.x86_64-windows.exe 이진 파일을 생성합니다.
  2. dev 단계 중에 생성된 디스크 이미지를 사용하여 VM을 생성합니다. windows server ltsc2022를 지원하기 위해 디스크 이미지 이름은 다음과 같았습니다 (runners-windows-21h1-core-containers-dev-40-mr).
  3. 이 VM에서 gitlab-runner-helper 도커 이미지를 생성합니다. 이를 위해 VM에서 gitlab-runner-helper.x86_64-windows.exe 이진 파일을 다운로드해야 합니다. Invoke-WebRequest PowerShell 명령이 사용할 수 없는 경우 Start-BitsTransfer 명령을 대신 사용해야 합니다.
  4. 새 GCP Windows 서버 이미지를 사용하여 다른 VM을 생성합니다.
  5. 이전에 업데이트한 GitLab-Runner 프로젝트용으로 생성된 gitlab-runner 실행 파일을 설치하고 프로젝트에 등록합니다.
  6. 작업을 성공적으로 시작합니다.

이 프로시저의 예시는 이 코멘트에 요약되어 있습니다.

이미지 배포

앞 단계에서 생성한 병합 요청을 병합한 후 이미지를 우리의 프로덕션 GCP 프로젝트에 게시하려면 게시 작업을 수동으로 실행해야 합니다.

게시 작업에서 생성된 이미지 이름에 유의하십시오. 예를 들어, 이 작업에서 runners-windows-2019-core-containers-2020-07-17라는 이미지를 생성했습니다. 이는 설치 부분에 사용될 것입니다.

두 개의 새 Runner 관리자 추가

이 시점에서 우리의 프로덕션 환경에 준비된 베이스 이미지가 있어야 하므로 이를 GitLab 러너 프로젝트의 CI 파이프라인에서 사용할 수 있게 설정하기만 하면 됩니다. 남은 일은 Runner 관리자를 설정하는 것뿐입니다.

등록

두 개의 새 Runner를 등록하려면 gitlab-runner register을 실행하세요. 이러한 Runner는 프로젝트별 Runner이어야 하므로 프로젝트 설정에서 등록 토큰을 사용해야 합니다. Runner의 이름은 기존 Runner와 동일한 네이밍 규칙을 따라야 합니다.

예를 들어, Windows Server Core 2004를 위해 Runner 관리자의 이름은 다음과 같아야 합니다:

  1. windows-2004-private-runner-manager-1
  2. windows-2004-private-runner-manager-2

등록한 후 config.toml 파일에서 찾은 Runner 토큰을 안전하게 저장해야 합니다. 이는 설치 단계에서 필요할 것입니다.

마지막으로, 새 Runner 관리자를 security 분기 프로젝트 및 ‘liveness’ 테스트 지원 프로젝트에 할당해야 합니다. 이를 위해 각 새 Runner 관리자에 대해 다음을 수행하세요:

  1. Runner 프로젝트 CI/CD 설정 페이지의 Runner 섹션으로 이동합니다.
  2. 해당 프로젝트에 대한 Runner를 활성화하기 위해 해당 프로젝트의 CI/CD 설정 페이지에 있는 기타 사용 가능한 Runner 섹션으로 스크롤하고 해당 Runner를 활성화합니다.
  3. Runner 프로젝트 CI/CD 설정 페이지에서 Runner를 다시 잠근 다음, security 분기 프로젝트와 ‘liveness’ 테스트 지원 프로젝트에 대해 이러한 단계를 수행합니다.

설치

새로운 인스턴스를 설치하려면 autoscaler에 해당 config.toml을 Windows 버전에 맞게 설정해야 합니다. 새로운 Windows 버전을 포함하도록 Ansible 저장소(https://ops.gitlab.net/gitlab-com/gl-infra/ci-infrastructure-windows)를 업데이트해야 합니다.

예를 들어, 13.7 마일스톤에서 Windows Server Core 2004를 지원하고 싶다면 다음과 같은 병합 요청을 볼 수 있습니다: https://ops.gitlab.net/gitlab-com/gl-infra/ci-infrastructure-windows/-/merge_requests/70, 여기서 다음 파일을 업데이트합니다:

  1. ansible/roles/runner/tasks/main.yml
  2. ansible/roles/runner/tasks/autoscaler.yml
  3. ansible/group_vars/gcp_role_runner_manager.yml
  4. ansible/host_vars/windows-shared-runners-manager-1.yml
  5. ansible/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를 지원하고 싶다면 다음과 같은 병합 요청을 볼 수 있습니다. 여기서 다음 파일을 업데이트합니다:

  1. .gitlab-ci.yml
  2. Makefile

특정 Windows 버전 지원을 위한 GitLab Runner 업데이트

도커 실행자를 사용할 수 있도록 사용자에게 도움 되는 이미지를 제공해야 해서 코드 베이스 내에 특정 확인이 필요하므로 새로운 Windows 버전을 허용해야 합니다.

다음을 업데이트해야 합니다:

  1. 지원 버전 목록, 및 관련 테스트.
  2. 베이스 이미지 목록, 및 관련 테스트.
  3. GitLab CI에서 기본 브랜치에서 테스트 실행을 업데이트.
  4. 릴리스 스테이지 업데이트.

예를 들어, 13.7 마일스톤에서 Windows Server Core 2004를 지원하고 싶다면 다음과 같은 병합 요청을 볼 수 있습니다. 여기서 다음 파일을 업데이트합니다:

  1. helpers/container/helperimage/windows_info.go
  2. helpers/container/helperimage/windows_info_test.go
  3. helpers/container/windows/version.go
  4. helpers/container/windows/version_test.go
  5. .gitlab/ci/test.gitlab-ci.yml
  6. .gitlab/ci/coverage.gitlab-ci.yml
  7. .gitlab/ci/_common.gitlab-ci.yml
  8. .gitlab/ci/release.gitlab-ci.yml
  9. ci/.test-failures.servercore2004.txt
  10. docs/executors/docker.md