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

如何在Windows Docker容器的自托管GitHub Actions Runner中运行前后置作业脚本

在Windows Docker容器中配置GitHub Actions Runner作业前后置脚本

问题出在Docker环境中环境变量的传递逻辑:setx设置的变量不会在当前CMD会话立即生效,且容器重启后未持久化的变量会丢失,另外GitHub Actions Runner进程需要在启动时就加载到这些钩子变量才能生效。以下是几种可行的解决方案:

1. 自定义Docker镜像时注入环境变量

如果是自己构建Runner镜像,直接在Dockerfile中用ENV指令定义钩子变量,确保容器启动时所有进程都能读取到:

# 假设基于官方Windows Runner镜像
FROM my-github-actions-runner:windows

# 设置作业开始前钩子脚本路径
ENV ACTIONS_RUNNER_HOOK_JOB_STARTED="C:\actions-runner-resources\scripts\pre-post-build\pre-run-script.ps1"
# 设置作业完成后钩子脚本路径
ENV ACTIONS_RUNNER_HOOK_JOB_COMPLETED="C:\actions-runner-resources\scripts\pre-post-build\post-run-script.ps1"

# 其他镜像构建步骤...

构建镜像后启动容器,Runner启动时会自动读取这些环境变量并触发对应脚本。

2. 启动容器时通过参数传递环境变量

如果使用现成的Runner镜像,启动容器时通过-e参数直接注入钩子变量:

docker run `
  -e ACTIONS_RUNNER_HOOK_JOB_STARTED="C:\actions-runner-resources\scripts\pre-post-build\pre-run-script.ps1" `
  -e ACTIONS_RUNNER_HOOK_JOB_COMPLETED="C:\actions-runner-resources\scripts\pre-post-build\post-run-script.ps1" `
  -v C:\host-resources:C:\actions-runner-resources ` # 确保脚本目录挂载到容器内
  your-runner-image-name

这种方式不需要修改镜像,变量会直接注入容器的全局环境中。

3. 修改Runner启动脚本(容器已运行时)

如果容器已经在运行,进入容器后修改Runner的启动脚本,在启动Runner前手动设置环境变量:

  1. 进入容器的CMD会话:
    docker exec -it your-container-name cmd
    
  2. 找到Runner的启动目录(通常是C:\actions-runner),编辑启动脚本(比如start-runner.cmd),添加以下内容在启动命令之前:
    set ACTIONS_RUNNER_HOOK_JOB_STARTED=C:\actions-runner-resources\scripts\pre-post-build\pre-run-script.ps1
    set ACTIONS_RUNNER_HOOK_JOB_COMPLETED=C:\actions-runner-resources\scripts\pre-post-build\post-run-script.ps1
    
  3. 重启Runner服务或重新执行启动脚本:
    .\run.cmd
    

验证要点

  • 确保脚本路径在容器内真实存在,可通过dir C:\actions-runner-resources\scripts\pre-post-build验证。
  • 检查Runner进程是否有脚本的执行权限,Windows容器中可右键脚本查看“安全”选项卡,确保Runner用户有读取和执行权限。
  • 启动Runner前,可通过echo %ACTIONS_RUNNER_HOOK_JOB_STARTED%确认变量已正确设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:40:38