Windows 버전에 대한 Docker 실행자 지원 추가

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

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

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

인프라

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

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

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

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

예를 들어, 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 Runner 프로젝트에서 새로운 Windows Server 버전을 지원하고 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 이진 파일을 다운로드해야 합니다. Invoke-WebRequest PowerShell 명령이 사용할 수 없는 경우, 대신 Start-BitsTransfer 명령을 사용해야 합니다.
  4. 새 GCP Windows Server 이미지를 지원하기 위해 다른 VM을 생성합니다.
  5. 이전에 업데이트한 GitLab-Runner 프로젝트를 위해 생성된 gitlab-runner 실행 파일을 설치하고 프로젝트에 등록합니다.
  6. 작업을 성공적으로 시작합니다.

이 절차에 대한 예제는 다음 코멘트에 요약되어 있습니다: 이 코멘트.

이미지 공개

이전 단계에서 생성된 병합 요청을 병합한 후, 공개 작업을 수동으로 실행하여 이미지가 우리의 프로덕션 GCP 프로젝트에 게시되어야 합니다.

publish 작업으로 생성된 이미지 이름을 기록해 두어야 합니다. 예를 들어, 이 작업에서 runners-windows-2019-core-containers-2020-07-17라는 이름의 이미지를 생성했습니다. 이 이미지는 설치 부분에서 사용될 것입니다.

두 개의 새로운 Runner 관리자 추가

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

등록

gitlab-runner register를 실행하여 두 개의 새로운 러너를 등록합니다. 이들은 프로젝트별 러너여야 하며, 따라서 프로젝트 설정에서 등록 토큰을 사용해야 합니다. 러너의 이름은 기존 러너와 동일한 네이밍 컨벤션을 따라야 합니다.

예를 들어, Windows Server Core 2004의 경우 다음과 같이 러너 매니저의 이름을 지어야 합니다:

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

등록이 완료되면 config.toml 파일에서 찾을 수 있는 러너 토큰을 안전하게 보관해야 합니다. 왜냐하면 설치 단계에 이를 필요로 하기 때문입니다.

마지막으로, 새로운 러너 매니저를 security 포크 프로젝트 및 ‘liveness’ test support 프로젝트에 할당해야 합니다. 따라서 각각의 새로운 러너 매니저에 대해 다음을 수행하세요:

  1. 러너 프로젝트 CI/CD 설정 페이지의 러너 섹션으로 이동합니다.
  2. 해당 러너의 속성을 편집하고 Lock to current projects를 해제합니다.
  3. security 포크 프로젝트에 대해서:
    1. 프로젝트 CI/CD 설정 페이지의 러너 섹션으로 이동합니다.
    2. Other available runners 섹션으로 스크롤하여 이 프로젝트에 러너를 활성화합니다.
  4. ‘liveness’ test support 프로젝트에 대해서:
    1. 프로젝트 CI/CD 설정 페이지의 러너 섹션으로 이동합니다.
    2. Other available runners 섹션으로 스크롤하여 이 프로젝트에 러너를 활성화합니다.
  5. 러너를 다시 러너 프로젝트 CI/CD 설정 페이지에서 잠깁니다.

설치

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

예를 들어, 13.7 마일스톤에서 Windows Server Core 2004를 지원하려는 경우 다음 병합 요청에서 다음 파일을 업데이트합니다:

  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/livenessGitLab 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