在gitlab CI中,gitlab运行器选择了错误的执行器

时间:2018-06-04 10:05:05

标签: linux docker automated-tests gitlab-ci gitlab-ci-runner

我的Gitlab管道设置存在以下问题。

我认识到在bash中显示了“shell runner”但在.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 :(得分:1)

@edit:来自here

  

标签用于从允许运行此项目的所有Runner列表中选择特定的Runners。

在评论中已解决,您执行的shell必须已使用docker标记进行标记,这导致他被选为该作业的执行者。

这是我的回答:

您正在使用shell执行程序,并且来自here

  

Shell执行程序是一个简单的执行程序,它允许您在运行Runner的机器上本地执行构建   ...
  如果GitLab Runner从官方.deb或.rpm软件包安装在Linux上,安装程序将尝试使用gitlab_ci_multi_runner用户(如果找到)。如果找不到,它将创建一个gitlab-runner用户并改为使用它。   ....
  在某些测试场景中,您的构建可能需要访问某些特权资源   ...
  通常,使用shell执行程序运行测试是不安全的。这些作业是使用用户的权限(gitlab-runner)运行的,可以"窃取"来自此服务器上运行的其他项目的代码。仅用于在您信任和拥有的服务器上运行构建。

您正在运行的命令以gitlab-runner用户身份执行,并且无权运行apt-get命令。你可以:

  • 转移到码头工具
  • 授予用户gitlab-runner运行指定命令所需的权限。 gitlab-runner可能run apt-get without sudo,他也需要perpm for npm install和npm run。
  • 向用户gitlab-runner授予sudo nopasswd。在机器gitlab-runner上添加gitlab-runner ALL=(ALL) NOPASSWD: ALL(或类似)到/ etc / sudoers并将行apt-get update更改为sudo apt-get update,它们将以特权用户(root)的身份执行它们。