Windows용 호스티드 러너
Windows용 호스티드 러너 (Hosted runners on Windows)
Windows용 호스티드 러너는 Google Cloud Platform에서 가상 머신을 띄우며 자동 확장(autoscale)해요. 이 방식은 GitLab이 custom executor를 위해 만든 autoscaling driver를 사용해요. Windows 호스티드 러너는 현재 beta 단계에 있어요.
GitLab은 Windows 러너를 안정적인 상태로 만들어 일반 공개하는 작업을 계속하고 있어요. 이 목표를 향한 진행 상황은 관련 epic에서 따라갈 수 있어요.
출처: 문서
본문
Windows에서 사용 가능한 머신 타입
GitLab은 Windows 호스티드 러너에 대해 다음과 같은 머신 타입을 제공해요.
| Runner Tag | vCPUs | Memory | Storage |
|---|---|---|---|
saas-windows-medium-amd64 |
2 | 7.5 GB | 75 GB |
지원되는 Windows 버전
Windows 러너 VM 인스턴스는 GitLab Docker executor를 사용하지 않아요. 즉 파이프라인 설정에서 image나 services를 지정할 수 없어요.
이미지 빌드가 실행될 때 최신 Docker 버전이 설치되며, shell 러너 잡에서 리터럴 Docker 명령을 사용할 수 있어요.
다음 Windows 버전 중 하나에서 잡을 실행할 수 있어요:
| Version | Status |
|---|---|
| Windows 2022 | GA |
사용 가능한 런타임
다음 파일들은 사전 설치된 소프트웨어 목록을 제공해요:
- Chocolatey — 추가 설치에 사용할 수 있어요.
- Git, Git LFS, GitLab Runner
- 사전 설치된 개발 도구:Docker.NET Core SDK 3.1, Ruby, Go, Node.js, OpenJDK, Python37-Zip, Wget, curl, jq, Docker Compose, NuGet CLI, CMake, GitLab CLI (glab)Visual C Runtimes. 버전은 연결된 파일을 참고하세요.Visual Studio Build Tools. 버전은 연결된 파일을 참고하세요.
.NET 런타임
설치된 .NET Core SDK 버전과 특정 버전의 Visual Studio Build Tools가 함께 사전 설치된 .NET 런타임 버전을 결정해요.
다음 코드는 GitLab CI의 PowerShell Pipelines에서 정기적으로 실행되며 다음 예시 목록을 만들어요:
세 런타임(Microsoft.AspNetCore.App, Microsoft.NETCore.App, Microsoft.WindowsDesktop.App) 모두에 사용 가능한 버전은:
- 3.1.32
- 8.0.24
- 9.0.13
.NET Framework는 버전 4.8.04161이에요.
현재 상태를 확인하려면 다음 코드를 실행하거나 GitLab CI의 PowerShell Pipelines의 최근 로그를 보세요:
Write-Host "=== Modern .NET (Core 3.1, 5, 6, 7, 8+) runtimes ===" -ForegroundColor Cyan
if (Get-Command dotnet -ErrorAction SilentlyContinue) {
dotnet --list-runtimes
} else {
Write-Host "Not present"
}
Write-Host "`n=== .NET Framework versions ===" -ForegroundColor Cyan
$ndp = "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP"
if (Test-Path $ndp) {
$found = Get-ChildItem $ndp -Recurse |
Get-ItemProperty -Name Version, Release -ErrorAction SilentlyContinue |
Where-Object { $_.Version -and $_.PSChildName -notmatch '^S' } |
Select-Object @{n='Component';e={$_.PSChildName}}, Version, Release |
Sort-Object Version -Unique
if ($found) { $found } else { Write-Host "Not present" }
} else {
Write-Host "Not present"
}
Docker 런타임
이미지 빌드가 실행될 때 최신 Docker 버전(이미지 빌드 날짜 기준)이 설치되며, shell 러너 잡에서 리터럴 Docker 명령을 사용할 수 있어요.
Docker 명령을 실행하기 전에 다음 코드로 Docker 서비스를 시작하세요.
버전을 확인하려면 다음 코드를 실행하거나 GitLab CI의 PowerShell Pipelines 파이프라인을 보세요:
$svc = Get-Service -Name docker -ErrorAction SilentlyContinue
if ($null -eq $svc) {
Write-Host "Docker service is not installed."
}
else {
if ($svc.Status -eq 'Stopped') {
Write-Host "Docker service is stopped; starting it..."
Start-Service -Name docker
(Get-Service -Name docker).WaitForStatus('Running', '00:00:30')
Write-Host "Docker service is now $((Get-Service -Name docker).Status)."
}
else {
Write-Host "Docker service is already $($svc.Status); no action taken."
}
Write-Host "`n=== Docker client and service version ==="
if ((Get-Service -Name docker).Status -eq 'Running') {
docker info
docker version
}
}
지원되는 셸
Windows 호스티드 러너는 셸로 PowerShell이 설정되어 있어요. 따라서 .gitlab-ci.yml 파일의 script 섹션에는 PowerShell 명령이 필요해요.
승격된 권한
GitLab.com의 Windows 호스티드 러너는 CI/CD 잡을 승격된 관리자 프로세스로 실행해요. 이 프로세스 덕분에 잡 실행 전에 추가 소프트웨어를 설치하거나 OS를 구성할 수 있어요.
이 권한 수준은 괜찮은데, 러너가 각 잡마다 새 VM을 만들고 잡 완료 후 폐기하기 때문이에요. 이 과정은 보안과 폐기 측면에서 컨테이너 잡이 동작하는 방식과 본질적으로 같아요.
예제 .gitlab-ci.yml 파일
이 예제 .gitlab-ci.yml 파일로 Windows 호스티드 러너를 시작해보세요:
.windows_job:
tags:
- saas-windows-medium-amd64
before_script:
- Set-Variable -Name "time" -Value (date -Format "%H:%m")
- echo ${time}
- echo "started by ${GITLAB_USER_NAME} / @${GITLAB_USER_LOGIN}"
build:
extends:
- .windows_job
stage: build
script:
- echo "running scripts in the build job"
test:
extends:
- .windows_job
stage: test
script:
- echo "running scripts in the test job"
알려진 이슈
- beta 기능 지원에 대한 자세한 내용은 beta를 참고하세요.
- 새 Windows 가상 머신(VM)의 평균 프로비저닝 시간은 5분이라서, beta 기간 동안 Windows 러너 플릿에서 빌드 시작 시간이 더 느려질 수 있어요. VM 사전 프로비저닝을 활성화하는 autoscaler 업데이트가 향후 릴리스에서 제안되어 있어요. 이 업데이트는 Windows 플릿의 VM 프로비저닝 시간을 크게 줄여줄 예정이에요. 자세한 내용은 issue 32를 참고하세요.
- Windows 러너 플릿은 유지보수나 업데이트로 인해 가끔 사용할 수 없을 수 있어요.
- 잡이 Linux 러너보다 더 오래 pending 상태로 머물 수 있어요.
- Windows 러너 플릿을 사용하는 파이프라인을 업데이트해야 하는 호환성 파괴 변경이 도입될 가능성이 있어요.
더 알아보기
다음으로는 GitLab Runner 사용자 지정 executor 문서와 autoscaler 드라이버 문서를 보면서 Windows 러너가 자동 확장되는 방식을 더 이해해보세요. beta 이슈의 진행 상황은 관련 epic에서 추적해볼 수 있어요.