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

使用GitLab Runner部署Angular项目出现cp cannot stat permission denied错误如何解决

错误原因

该报错的核心原因是GitLab Runner 任务的执行用户对部署目标目录没有写入权限:

  • 默认情况下 GitLab Runner 用 gitlab-runner 用户执行 CI 任务
  • /var/www 下的站点目录默认归属为 root 或 www-data 用户,权限通常为755,仅所有者拥有写入权限,gitlab-runner 用户无写入权限,因此覆盖目录内文件时触发权限拒绝错误
解决方案

可根据场景选择以下任意一种方案:

方案1(简单高效,仅Runner部署场景适用)

直接修改站点目录的所有者为gitlab-runner用户,在部署服务器上执行以下命令即可:

# 开发环境目录赋权
sudo chown -R gitlab-runner:gitlab-runner /var/www/my-website-dev/
# 生产环境目录赋权(同步配置避免后续生产部署报错)
sudo chown -R gitlab-runner:gitlab-runner /var/www/my-website/

方案2(更规范,兼容Web服务读取需求)

如果站点同时需要Nginx/Apache等Web服务读取(Web服务通常用www-data用户运行),推荐通过用户组赋权:

  1. 把gitlab-runner用户加入www-data用户组
sudo usermod -aG www-data gitlab-runner
  1. 给站点目录开放用户组写入权限
sudo chgrp -R www-data /var/www/my-website-dev/ /var/www/my-website/
sudo chmod -R g+w /var/www/my-website-dev/ /var/www/my-website/
  1. 重启GitLab Runner服务让用户组配置生效
sudo systemctl restart gitlab-runner

方案3(不推荐,仅临时测试使用)

可以给gitlab-runner用户配置cp命令的免密sudo权限,实现提权写入:

  1. 执行sudo visudo编辑sudoers配置,添加以下内容:
gitlab-runner ALL=(ALL) NOPASSWD: /usr/bin/cp
  1. 修改.gitlab-ci.yml中的部署命令,加上sudo前缀:
script:
  - sudo cp -r dist/my-website/* /var/www/my-website-dev/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:45:02