fengzifz.com

水则资车,旱则资舟

0%

解决 gitlab-runner 和 www-data 权限的问题

运行环境

  • 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,那么:

  1. 先 uninstall gitlab-runner;
  2. 重新 install;
  3. 重启 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 即可。