如何使用 gitlab CI 解决 Angular 业力测试的 chrome 错误?

Posted

技术标签:

【中文标题】如何使用 gitlab CI 解决 Angular 业力测试的 chrome 错误?【英文标题】:Ho do I solve chrome error for karma tests for Angular with gitlab CI? 【发布时间】:2021-04-17 18:18:20 【问题描述】:

我尝试使用 gitlab CI 为 Angular 运行业力测试。

.gitlab-ci.yml:

image: node:14.0.0

cache:
  paths:
    - node_modules/

before_script:
  - npm install
  - apt-get update -qq
  - apt-get install -y -qq rsync
  - apt-get install -y -qq sshpass
  - wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
  - apt install ./google-chrome-stable_current_amd64.deb -y

stages:
  - testing_deploy


build_and_deploy_testing:
  stage: testing_deploy
  script:
    - echo "============== ADD DEVELOP SSH KEY =============="
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
    - echo "============== START BUILD AND DEPLOY TESTING =============="
    - ./node_modules/@angular/cli/bin/ng test --progress false --watch=false

我收到一条失败的作业消息:

12 01 2021 16:25:31.828:ERROR [launcher]: Cannot start Chrome
    [2172:2172:0112/162531.552480:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.

12 01 2021 16:25:31.829:ERROR [launcher]: Chrome stdout: 
12 01 2021 16:25:31.829:ERROR [launcher]: Chrome stderr: [2172:2172:0112/162531.552480:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.

12 01 2021 16:25:31.840:ERROR [launcher]: Chrome failed 2 times (cannot start). Giving up.
Cleaning up file based variables
ERROR: Job failed: exit code 1

如何解决错误:zygote_host_impl_linux.cc 不支持以 root 身份运行而没有 --no-sandbox?

【问题讨论】:

【参考方案1】:

使用 Docker 执行器时,容器以镜像创建者定义的任何用户身份运行,几乎总是root; gitlab runner 不会将用户设置为root。有人要求在步骤配置中进行配置,但维护人员指出,您可以根据需要的图像创建自定义图像。

例如,假设为图像mysql:8 定义的用户是root,但我需要以mysql 用户身份运行某些东西。这是一个 Dockerfile 示例:

FROM mysql:8

USER mysql

这个镜像是建立在mysql:8之上的,但是我们改变了它运行的用户。您可以通过运行docker build mysql_custom_image 来构建映像。如果成功,在输出的最后你会得到类似Successfully built h47841j5285 的东西。然后你可以给它起一个更友好的名字:docker tag h47841j5285 my_org/mysql_custom_image

如果您使用的是 Gitlab 的内置注册表,则可以将其推送到那里或 hub.docker.com。如果没有,您可以将 Dockerfile 复制到您的运行器并在每个运行器上构建它。

您的新 .g​​itlab-ci.yml 文件如下所示:

image: my_org/mysql_custom_image
...

【讨论】:

以上是关于如何使用 gitlab CI 解决 Angular 业力测试的 chrome 错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何排除 gitlab-ci.yml 更改触发作业

如何设置动态 gitlab-ci 文件

gitlab CI + jenkins 实践

如何在 .gitlab-ci.yml 中指定通配符工件子目录?

gitlab CI 管道检查代码格式

GItlab CI :- 如何使用 Gitlab-CI 在 Android 中创建多个 apk(如开发、登台和生产)?