分类 技术 下的文章

发布镜像到docker hub的流程

首先编写Dockerfile,并且build。

  1. 编写后需要先run起来。可以用docker-compose跑。
  2. 记录下当前container的id,用docker container commit <container ID> <docker.io用户名>/<Image 名>:<Tag 名>来暂存当前的容器为image。
  3. 给image打标签。docker [image] tag 本地镜像名[:tag] 远端镜像名[:tag] image可省略,tag也可省略。
  4. 再用docker push <docker.io用户名>/<Image 名>:<Tag 名>推镜像。

记得要登录docker。docker login -u 用户名 输入密码。

发布到阿里云容器镜像服务

  1. 登录阿里云,启用阿里云容器镜像服务。
  2. 创建命名空间,创建镜像仓库
  3. 在命令行登录到阿里云 docker login --username=<用户名> registry.cn-shenzhen.aliyuncs.com
  4. docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/skys215/brh1:[镜像版本号] 这里的ImageId是上面第3步给image打的标签
  5. docker push registry.cn-shenzhen.aliyuncs.com/skys215/brh1:[镜像版本号] 推到阿里云。

注意这里的registry.cn-shenzhen.aliyuncs.com是我选的区域,根据自己选择的区域不同,需要自行修改。

写测试前需要准备的东西

  1. 默认数据需要准备
    一些数据是需要提前准备的,例如角色数据、分类数据。

1.1 表结构
在使用Laravel的时候,需要注意要先创建表结构。
如果是用原生的Laravel搭建的系统还好,每个表结构都应该有对应的migration。
但是在诸如Voyager等CMS的时候,可能并不会创建migration文件。
此时需要使用例如laravel-migrations-generator的反向migrator生成器。他可以根据表结构生成migration文件。
用此类工具的时候需要注意:由于是以当前时间点表结构创建的migration,如果自己还有写一些migration,那么要注意冲突或者字段不存在的情况。
例如:我写了migration在user表的avatar字段后面添加status字段,但是用该扩展生成的migration文件里已经包含了status字段。如果再跑这个migration,就会报该字段已存在的错误。

1.2 初始数据
用seeder可以插入默认数据。我使用了orangehill/iseed这个扩展来生成初始数据。
这里要注意一点,由于它是根据表名的顺序来生成seeder的,如果使用了外键约束,那么在往前面的表插入数据的时候会报关联错误Integrity constraint violation。

  1. 分清楚要测试的模块、分清楚测试的先后顺序。
    订单都没有,也不可能测支付。
  2. 写清楚每个测试的步骤
    例如,先创建才能编辑/删除。

Laravel6 启动dusk时遇到JSON decoding of remote response failed

今天第一次使用Laravel Dusk来写UI测试。

按照文档安装好dusk,使用php artisan dusk尝试跑测试后,报了以下错误:

Facebook\WebDriver\Exception\WebDriverException: JSON decoding of remote response failed.
Error code: 4
The response: ''

搜索了一圈,在这个链接找到一个解决方法。需要先用./vendor/laravel/dusk/bin/chromedriver-mac-intel --port=9515这个命令启动chrome,再跑php artisan dusk才可以。(我用的是Intel版的mac,其他版本有对应的chrome driver)

我觉得很奇怪,dusk命令居然还要我手动启动chrome的吗?

后来试了一下关闭启动了的chromedriver,并在dusk命令前添加了sudo:sudo php artisan dusk
果然代码可以跑通了。

但我看chromedriver-mac-intel文件是-rwxr-xr-x,不应该启动不了啊?

在网上搜索了一圈,说要用php artisan dusk:chrome-driver --proxy=0.0.0.0:8888命令先安装chrome driver,但文件是存在的。太奇怪了。安装了之后,再跑php artisan dusk,现在报的错就不一样了:

Facebook\WebDriver\Exception\UnknownErrorException: unknown error: Chrome failed to start: exited abnormally.
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location ./vendor/laravel/dusk/bin/chromedriver-mac-intel is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

在网上搜索了第二圈,说安装了之后要重启才行。俗话说重启大法好,那我就重启看看吧。

重启之后果然就好了……

格式化所有项目里的所有php文件

  1. 先列出所有php文件,保存到php.txt中。git ls-files |grep \.php$ > php.txt
  2. phpfmt插件目录拷贝fmt.phar到项目根目录。
  3. 保存一下文件为format.sh
#!/bin/bash
while IFS= read -r file
do
    [ -f "$file" ] && php fmt.phar --psr2 --smart_linebreak_after_curly "$file" #php-cs-fixer fix --rules=@PSR2,-phpdoc_align,@Symfony,-unary_operator_spaces --rules='{"concat_space":{"spacing":"one"}}' "$file"
done < "./php.txt"
  1. bash format.sh就好了。