Docker 从共享缓存同时安装两个项目时,CI上的composer拒绝访问

Docker 从共享缓存同时安装两个项目时,CI上的composer拒绝访问,docker,caching,gitlab,composer-php,Docker,Caching,Gitlab,Composer Php,我们正在使用 Composer version 2.0.11 2021-02-24 14:57:23 在docker Box上的GitLab CI环境中安装软件包 其目的是在所有容器中都有一个全局编写器来保存bandwith 容器中的合成缓存设置为/cache 我们的/etc/gitlab runner/config.toml如下所示: concurrent = 6 check_interval = 0 [session_server] session_timeout = 1800 [

我们正在使用

Composer version 2.0.11 2021-02-24 14:57:23
在docker Box上的GitLab CI环境中安装软件包

其目的是在所有容器中都有一个全局编写器来保存bandwith

容器中的合成缓存设置为
/cache

我们的
/etc/gitlab runner/config.toml
如下所示:

concurrent = 6
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "docker-git-runner-example-dev"
  url = "https://git.example.de/"
  token = "xxxxx"
  executor = "docker"
  [runners.custom_build_dir]
    enabled = true
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
  [runners.docker]
    tls_verify = false
    image = "ubuntu"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache:/cache", "/var/run/docker.sock:/var/run/docker.sock", "/builds:/builds", "/results:/results", "/var/review-test-deploy/:/var/review-test-deploy/" ]
    shm_size = 0
现在,当管道被触发时,两个作业(
test
deploy review app
)在不同的容器中执行相同(Magento 2)项目的composer安装

人们偶尔会得到这样的东西

 [ErrorException]                                                                                                           
 copy(/cache/files/aws/aws-sdk-php/3cf3ce74eb752563151499d9305ecba2045b86aa.zip): failed to open stream: Permission denied  
有人也经历过这个问题吗?我们知道还有GitLab缓存,它可以在下一台机器上上传和下载缓存,但我们认为这样更有效

我们是否应该将此报告为编写器问题,并查看是否可以改进某些锁定机制

编辑

我试图在没有docker参与的情况下制作一个最小的可复制示例,如下所示:

concurrent = 6
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "docker-git-runner-example-dev"
  url = "https://git.example.de/"
  token = "xxxxx"
  executor = "docker"
  [runners.custom_build_dir]
    enabled = true
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
  [runners.docker]
    tls_verify = false
    image = "ubuntu"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache:/cache", "/var/run/docker.sock:/var/run/docker.sock", "/builds:/builds", "/results:/results", "/var/review-test-deploy/:/var/review-test-deploy/" ]
    shm_size = 0
  • mkdir/tmp/composer/1;cd/tmp/composer 1;composer安装(创建锁文件)
  • 创建任何composer.json
  • cd
  • cp-r12;cp-R 13
  • 执行此操作几次:

    rm */vendor -r ; (cd 1 ; composer2 install; cd .. ) & (cd 2 ; composer2 install; cd .. ) & (cd 3 ; composer2 install; cd .. )
    
    这个错误是不可产生的

    我得用容器试试

    EDIT2也不能与docker版本的composer/a共享缓存一起复制

    sudo rm -r */vendor ; docker run --rm --volume `pwd`/1:/app   --volume /tmp/composer-cache:/tmp composer:2.0.11 composer -v install & docker run --rm --volume `pwd`/2:/app   --volume /tmp/composer-cache:/tmp composer:2.0.11 composer install & docker run --rm --volume `pwd`/3:/app   --volume /tmp/composer-cache:/tmp composer:2.0.11 composer install & docker run --rm --volume `pwd`/4:/app   --volume /tmp/composer-cache:/tmp composer:2.0.11 composer install
    

    为什么不使用一个作业来构建应用程序,并根据第一个作业的结果运行下一个测试呢?还有,是什么让你认为这是作曲家的问题?好建议。我只是想了解composer是否能够使用同一缓存目录并行运行多个安装。如果同一服务器上的不同应用程序并行安装,那么问题也可能发生。为什么不为每个应用程序使用不同的目录呢?我不认为这位作曲家是为了支持这样一个案子而创作的是的,我想也是。这个想法是通过使用记录在案的缓存方式来最终节省流量(请参阅),我从未见过这样的问题