想求问一下 gitlab 的 cicd 使用 docker 遇到的问题,以及 cache 用法等一些细节问题
我现在主要想做的一个事情是用 gitlab 的 cicd 功能在 docker 环境构建前端项目,然后把构建后的 html 、js 那些东西给放到本机的指定位置,或者是放到远程的某个服务器上,最后运行一个脚本做一些重启 nginx 之类的事情。
大部分流程我都弄懂了,但现在有 2 个问题我没太弄明白:
1.我怎么把构建后的 html 和 js 那些东西弄出来呢?
因为我 gitlab 的 runner 注册的是 docker executor,所有东西都是在 docker 里面跑的。我最开始以为是用 cache 或者 artifact 可以把构建后的东西保存下来,但后来发现 cache 和 artifact 的东西好像都只能在 pipeline 运行的过程中给不同的 job 间使用,并不是用来给你保存到本机的。不知道一般实际使用中应该怎么把 docker 里面的东西弄出来呢?是用 artifact 保存然后自己挂载一个 volume 复制过去吗?
2.我要怎么运行本地的重启脚本呢?
因为我的 runner 明显只能在 docker 里面运行命令,没办法跑宿主机环境下的脚本。难道需要 ssh 到宿主机上吗?(貌似记得有用 ssh 远程执行命令的方法,不过总感觉这样怪怪的?)
———————————————————————————————————-
另外还有一些细节的问题不太明白也想求问一下。
1.cache 的使用场景
官方给的例子是用来存 pip install 生成的 cache 文件夹和 virtualenv 生成的 venv 文件夹。但 pip install 命令和 virtualenv 的命令都是写在 before_script 里面的,也就是每一个 job 的 script 之前都会运行一次。我不太明白为什么要这样使用,不是应该先检查有没有 cache,有的话就用 cache,没有的时候再去运行命令生成吗?
还有我看文档说 cache 可以在同一个 stage 内使用,但同一个 stage 内怎么保证 cache 一定是生成了的呢?比如说我某个 stage 的 job 可能需要同一些包,我直接提取 cache 运行,但如果 cache 还没生成的话不是会运行失败吗?不知道是不是我对 gitlab cache 的使用方法和使用场景理解有误?
2.还有一个小问题就是 runner 装在本机的系统里,然后注册的时候选择 docker executor,跟装在 docker 里注册的时候选 docker executor 有区别吗?(只是好奇所以问问)