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

基于Docker与Bash脚本trap SIGTERM实现VSTS Agent启停管控

在Docker中用Bash脚本管控VSTS Agent的启动与优雅关停

我在Docker环境下折腾VSTS Agent的时候,发现手动调用官方的config.sh和run.sh太繁琐,而且容器停止时没法自动清理平台上的代理节点——于是写了个轻量的Bash脚本,把代理的注册、运行和关停管控都标准化了。

完整脚本代码

#!/bin/bash

# 关停时执行:从VSTS平台移除当前代理节点
function shutdown() {
    echo "开始清理:从VSTS平台移除代理..."
    ./config.sh remove
    exit 0
}

# 捕获容器停止信号(SIGTERM)和手动中断信号(SIGINT),触发清理逻辑
trap shutdown SIGTERM SIGINT

# 切换到VSTS Agent的安装目录(根据你的实际路径调整)
cd ./vsts

# 执行代理配置:替换成你的VSTS实例参数
# 示例格式:./config.sh --url https://your-vsts-account.visualstudio.com --auth pat --token your-pat-token --pool "Your Agent Pool" --agent "Docker-Agent-$(hostname)" --work _work
./config.sh --url [你的VSTS实例URL] --auth pat --token [你的PAT令牌] --pool [目标代理池名称] --agent [代理节点名称] --work _work

# 启动代理,开始监听任务
echo "启动VSTS Agent,等待任务分配..."
./run.sh

脚本关键部分说明

  • shutdown函数:专门处理代理的优雅清理,调用官方的config.sh remove命令,确保容器停止时,VSTS平台上不会残留无效的代理节点,避免资源浪费。
  • trap命令:监听SIGTERM(Docker容器停止时默认发送的信号)和SIGINT(手动按Ctrl+C的中断信号),不管是用docker stop还是手动中断,都会自动触发清理操作。
  • config.sh配置:这里需要替换成你自己的VSTS实例参数,建议把敏感信息(比如PAT令牌)通过Docker环境变量传递(比如docker run -e VSTS_PAT=xxx ...),脚本里用$VSTS_PAT引用,避免硬编码泄露。
  • run.sh启动:启动后代理会进入持续监听状态,接收VSTS平台的任务分配,直到收到停止信号。

Docker环境额外建议

  • 容器尽量以非root用户运行,符合VSTS Agent的官方安全建议,你可以在Dockerfile里创建用户并切换:RUN useradd -m vstsagent && su - vstsagent。
  • 把这个脚本设为容器的ENTRYPOINT,确保容器启动时自动执行代理的配置和运行:ENTRYPOINT ["/path/to/your/script.sh"]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:26:16