php - Laravel Dusk - 无法在 GitLab CI 上运行
问题描述
有没有人让 Laravel Dusk 在 GitLab CI 上工作?
我正在使用这个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
在那里并且它是可执行的,但不能让它运行。
到目前为止,构成此阶段的脚本行是:
- 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
我也尝试了有关文档的方法,即使它们不适用于 GitLab CI,但它们都不起作用。
更新:
运行ls -l ./vendor/laravel/dusk/bin
返回:
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 变量
$ echo $PATH
./vendor/bin:/composer/vendor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
将二进制文件复制到/usr/local/bin
$ CHROME_DRIVER_PATH_BIN=./vendor/laravel/dusk/bin/chromedriver-linux
$ cp $CHROME_DRIVER_PATH_BIN /usr/local/bin
测试文件是否真的存在
$ 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
变量中的文件夹中,并且效果很好。
解决方案
我可以解决安装chromium
和chromium-chromedriver
软件包问题,因为它们在 Alpine Linux 上可用。
以下是我文件的相关部分:.gitlab-ci.yml
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
此外,一个非常重要的部分是--no-sandbox
在创建RemoteWebDriver
. 这可以通过更改文件driver
上的功能来完成tests/DuskTestCase.php
:
<?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 上使用 Dusk 进行测试。
推荐阅读
- android - 如何使用带有 ChainStyle 的 ConstraintSet 在 ConstraintLayout 内对称地翻转小部件?
- python - M2M 字段小部件可将数据添加或更新为内联表单集
- html - InvalidOperationException: The model item passed into the ViewDataDictionary is of type 'System.Int32'
- nginx - Nginx geoip重定向
- ios - 如何在 Objective-C 中的变量中放置一个块(闭包)?
- angularjs - 从 svg 文件导入的 svg 中的子路径大于预期
- android - 如何在处理 Android 模式下访问文件
- python - 使用 Django Python 发送电子邮件时获取错误 530 5.7.0 身份验证
- sql-server - SSRS 报告歧义行为页面大小未正确显示
- docker - 使用带有等待的 Dockerfile 执行两个命令