В gitlab CI бегун gitlab выбирает неправильного исполнителя - PullRequest
0 голосов
/ 04 июня 2018

У меня возникла следующая проблема с настройкой конвейера Gitlab.

Я узнал, что в bash показан «оболочка», но в файле .yml я использовал «tags: -docker».Если я снова запускаю работу, иногда она работает и использует правильного бегуна, но большую часть времени нет.

Вывод bash:

Running with gitlab-runner 10.8.0 (079cad9e) on aws-xyz c444133a Using Shell executor... Running on ip-xyz... Fetching changes... HEAD is now at eb4ea13 xyz: removed data retry queue Checking out e0461c05 as backend-tests... Skipping Git submodules setup Checking cache for default-1... Successfully extracted cache $ echo "this is done BEFORE each step" this is done BEFORE each step $ echo "updating server software inside container" updating server software inside container $ apt-get update -y Reading package lists... W: chmod 0700 of directory /var/lib/apt/lists/partial failed - SetupAPTPartialDirectory (1: Operation not permitted) E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied) E: Unable to lock directory /var/lib/apt/lists/ W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied) W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied) Running after script... $ echo "this is done AFTER each step" this is done AFTER each step ERROR: Job failed: exit status 1

Это задание в файле gitlab-ci.yml:

backend_test: image: node:6 services: - name: mysql:5.7 stage: test variables: MYSQL_ROOT_PASSWORD: xyz MYSQL_DATABASE: xyz MYSQL_USER: xyz MYSQL_PASSWORD: xyz DBDIALECT: mysql DBDATABASE: xyz DBUSER: xyz DBPASSWORD: xyz DBHOST: mysql DBPORT: "3306" script: - echo "updating server software inside container" - apt-get update -y - apt-get upgrade -y - echo "installing dependencies" - cd api/backend/ - ls -lah - npm install - echo "start testing" - NODE_ENV=test npm run test-code-coverage tags: - docker

Есть идеи?

1 Ответ

0 голосов
/ 07 июня 2018

@ edit: с здесь :

теги используются для выбора конкретных бегунов из списка всех бегунов, которым разрешено запускать этот проект.

Как указано в комментариях, ваша оболочка должна быть помечена тегом docker, в результате чего он был выбран в качестве исполнителя задания.

Это мой старый ответ:

Вы используете исполнителя оболочки, а с здесь :

Исполнитель оболочки - простой исполнительэто позволяет вам выполнять сборки локально на машине, на которой установлен Runner
...
Если GitLab Runner установлен на Linux из официальных пакетов .deb или .rpm, программа установки попытается использовать пользователя gitlab_ci_multi_runnerесли найденЕсли он не найден, он создаст пользователя gitlab-runner и будет использовать его вместо этого.....
В некоторых сценариях тестирования вашим сборкам может потребоваться доступ к некоторым привилегированным ресурсам
...
Как правило, запускать тесты с исполнителями оболочки небезопасно.Задания выполняются с разрешениями пользователя (gitlab-runner) и могут «красть» код из других проектов, запущенных на этом сервере.Используйте его только для запуска сборок на сервере, которому вы доверяете.

Команды, которые вы выполняете, выполняются как пользователь gitlab-runner и не имеют прав на запуск команды apt-get.Вы можете:

  • перейти в docker
  • предоставить пользователю gitlab-runner права, необходимые ему для запуска указанных команд.gitlab-runner может запустить apt-get без sudo , также ему понадобятся perms для установки npm и запуска npm.
  • предоставить sudo nopasswd пользователю gitlab-runner.Добавьте gitlab-runner ALL=(ALL) NOPASSWD: ALL (или аналогичный) в / etc / sudoers на машине, где установлен gitlab-runner, и измените строки apt-get update на sudo apt-get update, которые будут выполнять их как привилегированный пользователь (root).
...