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

GoCD Agent如何在工作目录外的路径复制制品并执行命令

GoCD 跨工作目录部署制品及执行后置命令方案

前置权限配置

GoCD Agent 默认以go用户运行,要操作工作目录外的路径必须先配好对应权限,否则流水线会直接报权限拒绝错误:

  • 先执行ps aux | grep go-agent确认Agent实际运行用户,避免自定义安装后用户不一致的问题
  • 给运行用户授予目标目录/var/www/vhosts/project的读写执行权限,二选一即可:
    • 直接修改目录所有者:chown -R go:go /var/www/vhosts/project
    • 如果目录需要保留原有属主(比如属于www-data用户组),就把go用户加入对应组并开放组权限:
      usermod -aG www-data go
      chmod -R g+rwX /var/www/vhosts/project
      
  • 权限修改完成后必须重启go-agent服务,用户组的权限变更才会生效。

流水线任务配置

GoCD 从上游拉取的制品默认会存放在当前流水线的Agent工作子目录中,直接在自定义命令任务里写shell逻辑就能实现跨目录操作,不需要修改Agent默认工作路径。

1. 制品复制任务

优先用rsync做复制,比原生cp兼容性更好,能自动处理隐藏文件、跨磁盘分区复制的问题:

# 清空目标目录旧版本残留文件
rm -rf /var/www/vhosts/project/*
# 全量同步当前工作目录的制品到目标路径,末尾斜杠不要遗漏,--delete参数会清除目标目录里源端不存在的旧文件
rsync -av --delete ./ /var/www/vhosts/project/

如果机器没有装rsync,用cp的话注意要覆盖隐藏文件:

rm -rf /var/www/vhosts/project/*
cp -r ./* /var/www/vhosts/project/
# 补充复制隐藏文件,无隐藏文件时忽略报错
cp -r ./.[!.]* /var/www/vhosts/project/ 2>/dev/null || true

2. 目标目录后置命令执行

GoCD 任务默认的执行路径是Agent的工作目录,执行目标路径下的命令时必须先切换目录,所有路径尽量用绝对路径避免出错:

# 切换到目标目录后执行生产构建命令,如果用nvm管理Node版本先加载nvm环境
source /home/go/.nvm/nvm.sh
nvm use 18
cd /var/www/vhosts/project
npm ci
npm run production
# 后续需要执行的服务重启、配置重载命令同理,注意如果要用到sudo,提前给go用户配置对应命令的免密sudo权限,不要在流水线里写明文密码

避坑提示

  • 不要为了适配单个项目修改GoCD Agent的默认工作目录,多流水线共用Agent、后续升级Agent时很容易出现路径冲突、权限混乱的问题
  • 如果目标目录是挂载的网络存储,提前在Agent机器上切到go用户手动测试读写、执行权限,避免流水线运行时才暴露权限问题
  • 涉及服务重启类的高权限操作,只给go用户开放对应单条命令的免密sudo权限,不要给全量sudo权限,避免安全风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:39:31