由于Docker永久卷,在GitLab顶部构建的管道失败

时间:2019-01-05 15:36:55

标签: docker gitlab gitlab-ci-runner

我正在gitlab中设置CI / CD管道。我在服务器上运行了自托管的gitlab版本11.4。我正在使用gitlab-runner实例的shell执行程序。在我的源代码中,有一个docker-compose.yml文件,其中包含8个不同的容器(mysql,elasticsearch,php,nginx,队列)。

当我推送新代码时,它会触发定义的管道并因以下错误而停止

Running with gitlab-runner 11.6.0 (f100a208)
  on iZAPLabs runner 9a639f82
Using Shell executor...
Running on ip-10-250-142-190...
Fetching changes...
warning: could not open directory 'docker/.data/db/ginvoicing_dev/': Permission denied
warning: could not open directory 'docker/.data/db/mysql/': Permission denied
warning: could not open directory 'docker/.data/db/performance_schema/': Permission denied
warning: failed to remove docker/.data/redis/dump.rdb: Permission denied
warning: failed to remove docker/.data/db/ib_logfile0: Permission denied
warning: failed to remove docker/.data/db/ginvoicing_dev: Permission denied
warning: failed to remove docker/.data/db/ibdata1: Permission denied
warning: failed to remove docker/.data/db/auto.cnf: Permission denied
warning: failed to remove docker/.data/db/mysql: Permission denied
warning: failed to remove docker/.data/db/performance_schema: Permission denied
warning: failed to remove docker/.data/db/ib_logfile1: Permission denied
warning: failed to remove docker/.data/elasticsearch: Permission denied
warning: failed to remove docker/var/run/php: Permission denied
ERROR: Job failed: exit status 1

.data目录在不同容器中挂载了docker卷。但是我不知道为什么新的推送试图删除它们。我什至尝试使用“缓存”指令。但没有运气。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我猜gitlab运行程序本身以git或gitlab或gitlab-runner或类似的用户身份运行(只需在脚本部分中输入whoami即可确定您是否不知道)。
您的大多数Docker容器都以root用户身份在容器内运行。因此,每次您使用git存储库中的卷时,当容器更改数据时,权限都会更改。容器停止后,您的gitlab用户将无法清理存储库以进行新作业。

一些想法(但也许没人能解决您的问题)

a)将您的gitlabRunner用户添加到Docker组 b)尝试运行sudo git reset --hard c)将docker卷的位置移到存储库外部,也许到/ tmp(并且在完成工作后不要忘记删除它们)。