1
hantsy 2020-12-30 19:07:44 +08:00
不清楚 Gitlab 的环境要求,大部分 CI/CD Pipeline 是支持 VM 和 Docker 的环境的(可以选择配置),也有一些例外,仅支持 Docker 的。
https://github.com/hantsy/spring-reactive-jwt-sample 我这个例子配置了 Github Actions, Travis, Circle, Codefresh, Drone, SemaphoreCI, Appveyor, Shippable 等 |
2
hantsy 2020-12-30 19:10:15 +08:00 1
你这个问题很简单的。
1 。在 Docker 里面 Build,只要把结果的 Folder 映射出来就行了。 2 。 再通过 SSH 之类 的 Copy 远程就行了。 |
3
debuggerx 2020-12-30 19:23:23 +08:00 1
同新手,最近搞 CI/CD 的过程写在博客里了:
https://www.debuggerx.com/2020/12/13/modern-development-workflow-gitlab-ci-cd-1/ 第一个问题,我是走网络发出来的,用 curl 的 POST 请求发出来,然后目标机器上写了个简单的接口接收。但是看你描述,我觉得你可以在两个 stage 里使用不同的 tag,然后在实际部署的机器上也装一个 runner,注册为 shell 执行器,第一个 docker 里的编译流程走完以后,要么走网络、scp 、或者干脆建个新仓库专门用于中转数据,把产物发到部署机器上,然后那个 stage 里处理这些产物,执行重启指令就好了,就像我第二篇里部署 web 项目一样 |
4
GopherDaily 2020-12-30 19:33:04 +08:00
把东西弄出来的思路是不是就不对?
为什么不把项目构建成镜像,直接运行镜像作为应用。 在 docker 里面以 docker in docker 或者 docker out docker 的方式运行 docker build 。成功后把 image 推送到 image registry,之后再通过 k8s 之类的方式来发布 |
5
debuggerx 2020-12-30 19:35:34 +08:00
@GopherDaily 能 docker 化交付的服务可以这样搞,那我这种是要编译出移动 app 的情况咋办
|
6
carity 2020-12-30 19:44:40 +08:00 1
1.
给你的 runner 使用 volume 关联你宿主机的指定路径 如 -v /dist:/var/www/dist 然后你在 runner 中将你得产物放到 /dist 文件夹里,你就可以在你宿主机的 /var/www/dist 中使用了 artifact 配置后可以在 gitlab 流水线的阶段中直接查看产物 2. 你 nginx 为啥不用容器跑呢 我有个测试过的方案,直接给 runner 设置-v /var/run/docker.sock:/var/run/docker.sock 然后在 runner 中就可以使用宿主机 docker 了,我的 runner 的类型是 shell,所有宿主机 dokcer 命令就都能在 runner 中执行 volumes: - '/var/run/docker.sock:/var/run/docker.sock:ro' - '/usr/bin/docker:/usr/bin/docker:ro' - './etc_group:/etc/group' etc_group 文件复制你本机的就好了 主要最下面要有 docker 权限相关的几行 gitlab-runner:x:999: docker:x:1000: docker:x:994:gitlab-runner |
7
archscar OP @hantsy 好的,谢谢解答。还想问一下 docker 的映射是只能启动之前设置好 volume 吗?还是可以启动之后再根据需要临时把某个文件夹映射出来呢?
|
9
archscar OP @GopherDaily
@debuggerx 关于弄出来的思路的问题,目前暂时还没有考虑 k8s 的东西,学不过来><。不过我想了下前端的 html 这些东西好像不太方便直接打包成镜像运行吧,除非和 nginx 打包到一起发布? |
10
archscar OP @carity 感谢回复。我还真没想过用容器跑 nginx,因为感觉前端就是把那些东西复制过去就行了,目前没感觉有必要专门弄个容器。确实是个没想过的思路,我还需要学习。
|
11
hantsy 2020-12-30 20:47:06 +08:00
@GopherDaily Dockerizing App 是最简单直接的。
直接 Publish 到私有的 Docker Reg 或者购买的云(很多提供私有 Docker Reg )。 |
12
constantine008 2020-12-31 09:04:04 +08:00
没有考虑搭配 jenkins 吗
|
13
Martin9 2020-12-31 09:36:38 +08:00
我是用的 carity 说的方法,把 docker 中的一个目录和宿主机的一个目录关联起来,每次上传文件到宿主机的该目录,进了 docker 到对应目录也能直接找到了。
|
14
isnullstring 317 天前
同新手,artifact 是用来把编译好的内容上传到 gitlab 的产物中,你可以直接在该页面下载,然后放到网站目录里
不过我还没折腾 到 docker in docker 这步骤,只会用 shell |