运行环境
- Ubuntu 16
- gitlab.com
- gitlab-runner v11
问题描述
上一篇 在 gitlab.com 上配置持续集成和持续部署 介绍过如何在 gitlab.com 上面部署 CI,但你马上就可以发现另一个问题:gitlab-runner 和 www-data 用户的权限问题。
按照官网的文档安装 gitlab-runner,它演示了创建一个 gitlab-runner
用户来运行 gitlab-runner 服务,但因为官网的文档并没有具体教你如何用脚本进行部署,所以它到这里为止,也并没有涉及权限的问题。
一般来说,Web 目录的所有者是 www-data
,而我们在创建部署 gitlab-runner 时,它是由 gitlab-runner
用户来运行的。因此,进行部署时,如果 web 目录不是属于 gitlab-runner
用户,那么它是没有权限把更新内容 fetch 或 clone 到 web 目录里面。
解决办法
如果你还没有创建和运行 gitlab-runner,那么,按照 gitlab 安装 gitlab-runner 教程,在第 4 个步骤时,把这条命令跳过:
1 | sudo useradd –comment ‘GitLab Runner’ –create-home gitlab-runner –shell /bin/bash |
然后把第 5 个步骤的命令改成:
1 2 | # www-data 用户默认的 home 目录是 /var/www sudo gitlab-runner install –user=www-data –working-directory=/var/www |
但如果你已经运行了 gitlab-runner,那么:
- 先 uninstall gitlab-runner;
- 重新 install;
- 重启 gitlab-runner。
1 2 3 4 5 6 7 8 | # 1. uninstall gitlab-runner gitlab-runner uninstall # 2. 重新 install gitlab-runner install –user=www-data –working-directory=/var/www # 3. 重启 gitlab-runner gitlab-runner restart |
然后,别忘记 double check 一次,你的 web 目录的所有权是不是属于 www-data
用户,如果不是,则需要运行:
1 | chown 33.33 -R /xxx/xxx/www |
最后,把之前部署在 /home/gitlab-runner
下面的脚本和 ssh key 等,移到 /var/www
并修改 owner 即可。