首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Laravel Dusk -无法在GitLab CI上运行

Laravel Dusk -无法在GitLab CI上运行
EN

Stack Overflow用户
提问于 2019-06-26 09:32:08
回答 2查看 679关注 0票数 2

有没有人能让拉威尔·达斯克在GitLab CI工作?

我正在使用this docker图像,这很神奇,但我就是不能执行./vendor/laravel/dusk/bin/chromedriver-linux,它说:

/bin/bash: line 102: ./vendor/laravel/dusk/bin/chromedriver-linux: No such file or directory

当我进入./vendor/laravel/dusk/bin时,我可以看到chromedriver-linux在那里,它是可执行的,但不能让它运行。

到目前为止,组成这个阶段的脚本行是:

代码语言:javascript
复制
- mv .env.testing .env
- php artisan key:generate
- ./vendor/bin/phpunit --colors=never
- php artisan dusk:install
- chmod -R 0755 vendor/laravel/dusk/bin
- ./vendor/laravel/dusk/bin/chromedriver-linux
- php artisan dusk

我也尝试过approaches on documentation,即使它们不是针对GitLab CI的,但它们都不起作用。

更新:

运行ls -l ./vendor/laravel/dusk/bin返回:

代码语言:javascript
复制
total 33560
-rwxr-xr-x    1 root     root      10885776 Jun 26 13:10 chromedriver-linux
-rwxr-xr-x    1 root     root      14994520 Jun 26 13:10 chromedriver-mac
-rwxr-xr-x    1 root     root       8393728 Jun 26 13:10 chromedriver-win.exe
-rwxr-xr-x    1 root     root         69309 Jun 25 22:59 jquery.js

我尝试将文件复制到机器的当前PATH中,但也不起作用:

测试$PATH变量

代码语言:javascript
复制
$ echo $PATH
./vendor/bin:/composer/vendor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

将二进制文件复制到/usr/local/bin

代码语言:javascript
复制
$ CHROME_DRIVER_PATH_BIN=./vendor/laravel/dusk/bin/chromedriver-linux
$ cp $CHROME_DRIVER_PATH_BIN /usr/local/bin

测试文件是否真的在那里

代码语言:javascript
复制
$ ls -lha /usr/local/bin
total 56564
drwxr-xr-x    1 root     root        4.0K Jun 26 17:33 .
drwxr-xr-x    1 root     root        4.0K Feb 21 23:08 ..
-rwxr-xr-x    1 root     root       10.4M Jun 26 17:33 chromedriver-linux
-rwxr-xr-x    1 root     root        1.8M Feb 22 06:40 composer
-rwxrwxr-x    1 root     root         118 Feb 21 23:02 docker-php-entrypoint
-rwxrwxr-x    1 root     root        1.4K Feb 21 23:02 docker-php-ext-configure
-rwxrwxr-x    1 root     root        2.4K Feb 21 23:02 docker-php-ext-enable
-rwxrwxr-x    1 root     root        2.3K Feb 21 23:02 docker-php-ext-install
-rwxrwxr-x    1 root     root         587 Feb  9 01:57 docker-php-source
lrwxrwxrwx    1 root     root          32 Jun 26 17:33 heroku -> /usr/local/lib/heroku/bin/heroku
-rwxr-xr-x    1 root     root         817 Feb 21 23:08 pear
-rwxr-xr-x    1 root     root         838 Feb 21 23:08 peardev
-rwxr-xr-x    1 root     root         751 Feb 21 23:08 pecl
lrwxrwxrwx    1 root     root           9 Feb 21 23:08 phar -> phar.phar
-rwxr-xr-x    1 root     root       14.5K Feb 21 23:08 phar.phar
-rwxr-xr-x    1 root     root       14.3M Feb 21 23:08 php
-rwxr-xr-x    1 root     root       14.2M Feb 21 23:08 php-cgi
-rwxr-xr-x    1 root     root        2.6K Feb 21 23:08 php-config
-rwxr-xr-x    1 root     root       14.4M Feb 21 23:08 phpdbg
-rwxr-xr-x    1 root     root        4.5K Feb 21 23:08 phpize

无论哪种方式,运行chromedriver-linux都不起作用,我得到了错误nohup: can't execute 'chromedriver-linux': No such file or directory

我已经在我的macOS上测试了同样的概念:创建一个可执行文件,使用符号链接将它放到我的PATH变量上的一个文件夹中,它可以完美地工作。

EN

回答 2

Stack Overflow用户

发布于 2019-06-27 08:07:40

我可以解决安装chromiumchromium-chromedriver包的问题,因为它们可以在高山Linux上使用。

下面是我的.gitlab-ci.yml文件中与相关的部分:

代码语言:javascript
复制
image: lorisleiva/laravel-docker

before_script:
  - apk add chromium-chromedriver -y
  - apk add chromium -y

phptest:
  stage: test
  script:
    - mv .env.testing .env
    - php artisan key:generate
    - ./vendor/bin/phpunit --colors=never
    - chromedriver 2>&1 &
    - sleep 5
    - nohup php artisan serve &
    - php artisan dusk

此外,中一个非常重要的部分是在创建RemoteWebDriver时添加--no-sandbox参数。这可以通过更改tests/DuskTestCase.php文件上的函数driver来完成:

代码语言:javascript
复制
<?php
    // tests/DuskTestCase.php
    protected function driver()
    {
        $options = (new ChromeOptions)->addArguments([
            '--disable-gpu',
            '--headless',
            '--no-sandbox', // # Add this # //
            '--window-size=1920,1080',
        ]);

        return RemoteWebDriver::create(
            'http://localhost:9515',
            DesiredCapabilities::chrome()->setCapability(
                ChromeOptions::CAPABILITY,
                $options
            )
        );
    }

这解决了我的问题,现在我可以使用lorisleiva/laravel-docker Docker镜像在GitLab CI上测试黄昏了。

票数 2
EN

Stack Overflow用户

发布于 2019-06-26 12:54:00

Dockerfile for that lorisleiva/laravel-docker image具有以下功能:

代码语言:javascript
复制
ENV PATH ./vendor/bin:/composer/vendor/bin:$PATH
...
WORKDIR /var/www

因此,当您的脚本执行时,'./vendor‘中的'.’可能不会引用您期望的当前工作目录。

由于设置了PATH,因此最好将chromedriver-linux放在./vendor/bin中。

这样,您的脚本就可以简单地调用chromedriver-linux (没有前导路径)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56763983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档