我正在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卷。但是我不知道为什么新的推送试图删除它们。我什至尝试使用“缓存”指令。但没有运气。
任何帮助将不胜感激。
答案 0 :(得分:0)
我猜gitlab运行程序本身以git或gitlab或gitlab-runner或类似的用户身份运行(只需在脚本部分中输入whoami
即可确定您是否不知道)。
您的大多数Docker容器都以root用户身份在容器内运行。因此,每次您使用git存储库中的卷时,当容器更改数据时,权限都会更改。容器停止后,您的gitlab用户将无法清理存储库以进行新作业。
一些想法(但也许没人能解决您的问题)
a)将您的gitlabRunner用户添加到Docker组
b)尝试运行sudo git reset --hard
c)将docker卷的位置移到存储库外部,也许到/ tmp(并且在完成工作后不要忘记删除它们)。