Windows 버전에 대한 Docker 실행 프로그램 지원 추가

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

Docker 실행 프로그램에 새 Windows 버전을 지원하려면 동일한 Windows 버전을 가진 도우미 이미지를 릴리스하여야 합니다. 그런 다음 도우미 이미지를 Windows 호스트 OS에서 실행할 수 있습니다.

해당 버전에 대한 도우미 이미지를 빌드하려면, 해당 Windows 버전에 GitLab Runner가 설치되어 있어야 합니다. 왜냐하면 Windows는 호스트 OS와 컨테이너 OS 버전이 일치해야하기 때문입니다.

인프라

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

인프라 사용을 위한 기본 이미지 생성

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

이를 위해 windows-containers 리포지터리를 업데이트하여 기본 이미지를 빌드해야 합니다. 이 기본 이미지는 CI에서 autoscaler에서 사용될 것입니다. 새로운 기본 이미지는 GitLab Runner 도우미 이미지를 빌드하는 데 사용될 것입니다.

예를 들어, 13.7 마일스톤에서 Windows Server Core 2004를 지원하려면 다음에 해당하는 Merge Request을 확인할 수 있습니다. GCP가 제공하는 기본 이미지에 따라 빌드 프로세스 중에 Docker를 설치해야 할 수도 있고 그렇지 않을 수도 있습니다. 해당 MR에서 다음 파일을 업데이트합니다.

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

생성된 이미지 테스트

dev 단계에서 생성된 이미지를 테스트하는 것을 권장합니다. 이것은 dev xxx로 이름을 짓는 것이 일반적입니다. 여기서 xxx는 Windows 서버 버전을 나타냅니다.

이미지를 테스트하기 위해 다음 단계를 따를 수 있습니다.

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

이 절차의 예는 이 댓글에서 요약되어 있습니다.

이미지 배포

이전 단계에서 생성된 Merge Request을 Merge한 후, 이미지가 우리의 프로덕션 GCP 프로젝트에 게시되도록 하기 위해 발행 작업을 매뉴얼으로 실행해야 합니다.

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

두 개의 새 Runner 관리자 추가

이 시점에서 프로덕션 환경에서 기본 이미지가 준비되어 있어야 하므로, GitLab Runner 프로젝트의 CI 파이프라인 내에서 사용할 수 있습니다. 남은 것은 Runner 관리자를 설정하는 것뿐입니다.

등록

새 Runner를 등록하려면 두 개의 새 Runner에 대해 gitlab-runner register를 실행해야 합니다. 이들은 프로젝트별 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 관리자를 보안 fork 프로젝트와 ‘liveness’ 테스트 지원 프로젝트에 할당해야 합니다. 따라서 각각의 새 Runner 관리자에 대해 다음을 수행합니다.

  1. Runner 프로젝트 CI/CD 설정 페이지의 Runners 섹션으로 이동합니다.
  2. 해당 Runner의 속성을 수정하여 현재 프로젝트에 잠금을 선택 취소합니다.
  3. 보안 fork 프로젝트에 대해:
    1. 프로젝트의 CI/CD 설정 페이지의 Runners 섹션으로 이동합니다.
    2. 기타 사용 가능한 러너 섹션으로 스크롤하고 이 프로젝트를 위해 러너를 활성화합니다.
  4. ‘liveness’ 테스트 지원 프로젝트에 대해:
    1. 프로젝트의 CI/CD 설정 페이지의 Runners 섹션으로 이동합니다.
    2. 기타 사용 가능한 러너 섹션으로 스크롤하고 이 프로젝트를 위해 러너를 활성화합니다.
  5. Runner 프로젝트 CI/CD 설정 페이지에서 Runner를 다시 잠금합니다.

설치

특정 config.toml을 가진 새로운 autoscaler 인스턴스를 설치하여 해당 Windows 버전을 지원해야 합니다. 새 Windows 버전을 포함하도록 Ansible 리포지터리를 업데이트해야 합니다.

예를 들어, 13.7 마일스톤에서 Windows Server Core 2004를 지원하려면 다음과 같이 해당 Merge Request을 확인할 수 있습니다. 이 MR에서 다음 파일을 업데이트합니다.

  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

Merge Request을 오픈할 때 관리자가 두 개의 새 Runner를 등록하고 그것들을ansible/host_vars에서 정의된 키를 사용하여 CI/CD 변수에 저장해야 함을 확인합니다.

registry.gitlab.com/gitlab-org/ci-cd/tests/liveness 발행

이미지 registry.gitlab.com/gitlab-org/ci-cd/tests/livenessGitLab Runner의 CI 프로세스의 일부로 사용됩니다. 새로운 Windows 버전을 기반으로 한 이미지를 발행해야 합니다.

예를 들어, 13.7 마일스톤에서 Windows Server Core 2004를 지원하고 싶다면, 다음과 같이 해당 Merge Request을 확인할 수 있으며, 이를 통해 다음 파일들을 업데이트합니다:

  1. .gitlab-ci.yml
  2. Makefile

특정 Windows 버전을 지원하기 위해 GitLab Runner 업데이트

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

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

  1. 지원 버전 디렉터리, 및 관련된 테스트
  2. 베이스 이미지 디렉터리, 및 관련된 테스트
  3. GitLab CI에서 기본 브랜치에서 테스트 실행 업데이트
  4. release 단계 업데이트

예를 들어, 13.7 마일스톤에서 Windows Server Core 2004를 지원하고 싶다면, 다음과 같이 해당 Merge Request을 확인할 수 있으며, 여기에 관련된 파일들을 업데이트합니다:

  1. helpers/container/helperimage/windows_info.go
  2. helpers/container/helpers/image/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