ddv88
@ddv88
Binance Futures

Запуск docker от имени gitlab-runner?

Здравствуйте.

Gitlab-Runner:
1. Debian 10
2. Docker, Docker-Compose

Приложение:
1. Сборка через Make
2. В зависимостях запуск контейнеров

Ситуация:
1. В докере во врема сборки запускаются утилиты которые оперируют в текущей папке приложения, подключенной через volume.
2. Когда это происходит локально на ПК от имени root, все впорядке.
3. Когда запускаю через ci (shell executor) на серваке, клонирование происходит от имени gitlab-runner, а созданные файлы во время запуска контейнера имеют права root.
4. При запуске следующего шага или запуска теста из кэша ранера, артефакты созданные в контейнерах из под root не могут быть использованы ранером из за Permission Denied.

Что пробовал:
1. Давать SU права и доабавлять в группу юзера gitlab-runner.
Каждый раз вываливает системную интеракцию где просит подтвердить пароль при запуске контейнера.
2. Давать права запуска docker от gitlab-runner.
В контенейнере Permission Denied на все команды с примонтированными volume.
3. Запускать образ с юзером gitlab-runner типа docker run --user $(id a gitlab-runner).
Тоже самое что и в предыдущем случаем, нет прав на работу с файлами в примонтированном разделе, тк на хосте они из под root.

Нашел полурабочий костыль для решения:
В CI скрипте в секции pre_clone_script выполнять каждый раз chown -r gitlab-runner для каждой папки с который работали контейнеры из под root. Но это супер криво.

Подскажите как быть? Как сделать папки созданные в контейнере доступными из gitlab-runner?

.gitlab-ci.yml
stages:
  - build
  - test
  - compile
  - deploy

build:test:
  stage: build
  script:
    - cd $CI_PROJECT_DIR && make && make run
  artifacts:
    paths:
      - node_modules/
      - docker/
      - public/

Первая из зависимостей Make
docker run --rm --tty -v ${PWD}:/var/www/html node:14-slim \
  bash -c "cd /var/www/html && npm install && npm run build"

Прошел некэшированный билд
...................
41 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
ocramius/package-versions: Generating version class...
ocramius/package-versions: ...done generating version class
59 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
docker-compose up -d --force-recreate --remove-orphans
Creating network "default" with driver "bridge"
Creating mysql ... 
Creating phpmyadmin ... 
Creating php        ... 
Creating nginx      ... 
Creating selenium   ... 
Uploading artifacts for successful job
00:34
Uploading artifacts...
Runtime platform                                    arch=amd64 os=linux pid=4115 revision=e95f89a0 version=13.4.1
vendor/: found 4680 matching files and directories 
node_modules/: found 14017 matching files and directories 
docker/: found 13 matching files and directories   
public/: found 111 matching files and directories  
Uploading artifacts as "archive" to coordinator... ok  id=799586895 responseStatus=201 Created token=BrjnoUTr
Cleaning up file based variables
00:00
Job succeeded

Тесты после него проваливаются
Running with gitlab-runner 13.4.1 (e95f89a0)
  on runner runner
Preparing the "shell" executor
00:00
Using Shell executor...
Preparing environment
00:00
Running on runner...
Getting source from Git repository
00:09
Fetching changes with git depth set to 50...
Reinitialized existing Git repository in /home/gitlab-runner/builds/runner/0/user/default/.git/
Checking out dfa9bb99 as master...
warning: failed to remove public/assets/font-awesome/fonts/fontawesome-webfont.svg
warning: failed to remove public/assets/font-awesome/fonts/fontawesome-webfont.eot
warning: failed to remove public/assets/font-awesome/fonts/fontawesome-webfont.woff
warning: failed to remove public/assets/font-awesome/fonts/fontawesome-webfont.woff2
warning: failed to remove public/assets/font-awesome/fonts/FontAwesome.otf
warning: failed to remove public/assets/font-awesome/fonts/fontawesome-webfont.ttf
warning: failed to remove public/assets/font-awesome/css/font-awesome.min.css
warning: failed to remove public/assets/icheck/skins/square/square.png
warning: failed to remove public/assets/icheck/skins/square/yellow.png
warning: failed to remove public/assets/icheck/skins/square/red@2x.png
................................

Ретрай этого же билда
Running with gitlab-runner 13.4.1 (e95f89a0)
  on runner runner
Preparing the "shell" executor
00:00
Using Shell executor...
Preparing environment
00:00
Running on runner...
Getting source from Git repository
Fetching changes with git depth set to 50...
Reinitialized existing Git repository in /home/gitlab-runner/builds/runner/0/user/default/.git/
Checking out dfa9bb99 as master...
warning: failed to remove public/assets/font-awesome/fonts/fontawesome-webfont.svg
warning: failed to remove public/assets/font-awesome/fonts/fontawesome-webfont.eot
warning: failed to remove public/assets/font-awesome/fonts/fontawesome-webfont.woff
warning: failed to remove public/assets/font-awesome/fonts/fontawesome-webfont.woff2
warning: failed to remove public/assets/font-awesome/fonts/FontAwesome.otf
warning: failed to remove public/assets/font-awesome/fonts/fontawesome-webfont.ttf
warning: failed to remove public/assets/font-awesome/css/font-awesome.min.css
warning: failed to remove public/assets/icheck/skins/square/square.png
warning: failed to remove public/assets/icheck/skins/square/yellow.png
.............................

Вот что на ранере происходит с правами
5f8dc5eb768be646580372.png


-
  • Вопрос задан
  • 1015 просмотров
Решения вопроса 1
ddv88
@ddv88 Автор вопроса
Binance Futures
Все оказалось супер прозаично....
gitlab-runner install --user root
Теперь все директории создаются от рута.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы