99 lines
4.0 KiB
PowerShell
99 lines
4.0 KiB
PowerShell
# ============================================================================
|
|
# 05 — Install act_runner (Gitea Actions runner) as Windows service
|
|
# PREREQUISITE:
|
|
# 1. Gitea đã chạy (04-install-gitea.ps1)
|
|
# 2. Đã lấy registration token từ Gitea:
|
|
# Site Admin → Actions → Runner Management → Create new Runner → Copy token
|
|
# Usage:
|
|
# .\05-install-act-runner.ps1 -Token <registration-token>
|
|
# ============================================================================
|
|
|
|
param(
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$Token,
|
|
|
|
[string]$GiteaUrl = 'http://127.0.0.1:3000',
|
|
[string]$RunnerName = 'dyd-windows-runner',
|
|
[string]$Labels = 'windows:host,windows-latest:host'
|
|
)
|
|
|
|
#Requires -RunAsAdministrator
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
$RunnerDir = 'C:\Tools\act_runner'
|
|
$NSSM = 'C:\Tools\nssm\nssm.exe'
|
|
|
|
if (-not (Test-Path $NSSM)) {
|
|
Write-Error "NSSM chưa cài. Chạy 04-install-gitea.ps1 trước."
|
|
exit 1
|
|
}
|
|
|
|
# --- DOWNLOAD ---------------------------------------------------------------
|
|
Write-Host "1/4 — Download act_runner" -ForegroundColor Cyan
|
|
New-Item -ItemType Directory -Force -Path $RunnerDir | Out-Null
|
|
|
|
$runnerExe = "$RunnerDir\act_runner.exe"
|
|
if (-not (Test-Path $runnerExe)) {
|
|
$url = 'https://dl.gitea.com/act_runner/0.2.11/act_runner-0.2.11-windows-amd64.exe'
|
|
Invoke-WebRequest -Uri $url -OutFile $runnerExe
|
|
Write-Host " [OK] downloaded" -ForegroundColor Green
|
|
}
|
|
|
|
# --- REGISTER ---------------------------------------------------------------
|
|
Write-Host "2/4 — Register with Gitea" -ForegroundColor Cyan
|
|
Set-Location $RunnerDir
|
|
if (-not (Test-Path "$RunnerDir\.runner")) {
|
|
& $runnerExe register --no-interactive `
|
|
--instance $GiteaUrl `
|
|
--token $Token `
|
|
--name $RunnerName `
|
|
--labels $Labels
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Error "Register failed. Check token + Gitea URL."
|
|
exit 1
|
|
}
|
|
Write-Host " [OK] Registered as $RunnerName" -ForegroundColor Green
|
|
} else {
|
|
Write-Host " [OK] Already registered (.runner exists)" -ForegroundColor Green
|
|
}
|
|
|
|
# --- CONFIG -----------------------------------------------------------------
|
|
Write-Host "3/4 — Generate config.yaml" -ForegroundColor Cyan
|
|
$cfgFile = "$RunnerDir\config.yaml"
|
|
if (-not (Test-Path $cfgFile)) {
|
|
& $runnerExe generate-config | Set-Content $cfgFile -Encoding UTF8
|
|
Write-Host " [OK] config.yaml ready — edit nếu cần tùy chỉnh" -ForegroundColor Green
|
|
}
|
|
|
|
# --- SERVICE ----------------------------------------------------------------
|
|
Write-Host "4/4 — Install NSSM service 'act_runner'" -ForegroundColor Cyan
|
|
$svc = Get-Service -Name 'act_runner' -ErrorAction SilentlyContinue
|
|
if (-not $svc) {
|
|
& $NSSM install act_runner $runnerExe daemon --config "$cfgFile"
|
|
& $NSSM set act_runner AppDirectory $RunnerDir
|
|
& $NSSM set act_runner AppStdout "$RunnerDir\runner-stdout.log"
|
|
& $NSSM set act_runner AppStderr "$RunnerDir\runner-stderr.log"
|
|
& $NSSM set act_runner AppRotateFiles 1
|
|
& $NSSM set act_runner AppRotateBytes 10485760
|
|
& $NSSM set act_runner DisplayName 'Gitea Actions Runner (DYD)'
|
|
& $NSSM set act_runner Start SERVICE_AUTO_START
|
|
Write-Host " [OK] Service installed" -ForegroundColor Green
|
|
}
|
|
|
|
Start-Service act_runner
|
|
Start-Sleep 3
|
|
$svc = Get-Service act_runner
|
|
Write-Host " Service status: $($svc.Status)" -ForegroundColor $(if ($svc.Status -eq 'Running') {'Green'} else {'Red'})
|
|
|
|
# --- DONE -------------------------------------------------------------------
|
|
Write-Host ""
|
|
Write-Host "=========================================================" -ForegroundColor Green
|
|
Write-Host " act_runner ready — Gitea Actions sẵn sàng" -ForegroundColor Green
|
|
Write-Host "=========================================================" -ForegroundColor Green
|
|
Write-Host ""
|
|
Write-Host "Verify:"
|
|
Write-Host " Gitea UI → Site Admin → Actions → Runner — phải thấy '$RunnerName' online"
|
|
Write-Host ""
|
|
Write-Host "Labels: $Labels"
|
|
Write-Host "Logs: $RunnerDir\runner-*.log"
|