You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitLab CI脚本中重启机器后恢复runner连接继续执行任务

GitLab CI 绑定特定Shell Runner重启后继续执行脚本的实现方案

核心逻辑

Shell执行器的CI任务进程会随机器重启被中断,因此无法将重启前后的逻辑放在同一个任务中。我们通过拆分流水线阶段、配置Runner开机自启、增加任务重试机制的方式,实现重启后自动衔接后续操作。

前置配置

首先确保你的绑定机器的Shell Runner已配置开机自启,机器重启后Runner服务会自动拉起并连接GitLab:

  • 如果还未安装Runner服务,执行命令:gitlab-runner install --user <运行Runner的Windows用户> --password <对应用户密码> --startup auto
  • 如果已安装Runner,执行命令设置服务自动启动:Set-Service -Name gitlab-runner -StartupType Automatic
  • 确认Runner运行用户拥有重启机器的权限,可在本地安全策略的「用户权限分配」中给用户添加「关闭系统」权限。

流水线配置示例

将流水线拆分为重启前任务和重启后任务两个阶段,两个任务绑定同一个Runner标签确保运行在目标机器上:

stages:
  - pre_restart
  - post_restart

# 重启前执行的任务
job_before_restart:
  stage: pre_restart
  tags:
    - your-specific-runner-tag # 替换为你绑定目标机器的Runner专属标签
  script:
    # 此处填写所有重启前需要执行的业务逻辑
    - Write-Host "开始执行重启前操作..."
    # 后台触发重启,避免当前CI进程被中断导致任务报错失败
    - Start-Job -ScriptBlock { Restart-Computer -Force }
    # 预留5秒等待重启指令触发,随后正常退出任务返回成功状态
    - Start-Sleep 5
    - exit 0

# 重启后执行的任务
job_after_restart:
  stage: post_restart
  tags:
    - your-specific-runner-tag # 和上方使用同一个Runner标签
  needs: ["job_before_restart"]
  # 配置重试机制,机器未完全启动、Runner未连接时自动重试
  retry:
    max: 5 # 可根据机器启动速度调整重试次数
    when: runner_system_failure
  script:
    - Write-Host "机器重启完成,开始执行后续操作..."
    # 此处填写所有重启后需要执行的业务逻辑

补充说明

如果需要在重启前后传递参数,可以将参数写入目标机器的本地临时文件,重启后读取即可:

  • 重启前写入参数:"key1=value1nkey2=value2" | Out-File -FilePath C:\ci_temp\restart_params.txt -Encoding utf8`
  • 重启后读取参数:$params = Get-Content -Path C:\ci_temp\restart_params.txt

内容的提问来源于stack exchange,提问作者emi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:45:02