引子
最近入职了新公司一段时间了,做了一个项目。 用到很多之前了解过,但一直没机会实战的技术。接下来用几篇文章来总结一下使用到的技术和遇到的一些问题。
目前会包括 2 个部分
- gitLab-ci 自动构建
- k8s 自动发布集群
整体的发布流程
接下来就先从 gitlab-ci 开始
GitLab-CI
基本条件
- 拥有 gitLab 官方账号,或者有私有的 gitLab 仓库。
- 会使用 GIT
- 如果以上都不会,那面壁去吧。
- 最后先熟悉一下 官方文档,虽然不是必须,但是有助于接下来的操作。
构建流程
步骤
- 首先开开心心的去 gitLab 创建一个新项目。以我的为例
http://gitlab.**.com/skylee/my_test_ci
- 在服务器上安装
gitLab-runner
服务 - 注册
runner
- 在项目根目录下新增文件
.gitlab-ci.yml
Usage
把代码打包成镜像并推送到远程仓库
项目代码 只有一个 index.php
文件
1 | ➜ my_test_ci git:(master) tree |
其中 Dockerfile
文件为构建镜像,主要作用就是把 index.php
打包进镜像中。Dockerfile
的内容
1 | FROM php:7.2-fpm |
配置 .gitlab-ci.yml
1 | image: docker.io/skylee:docker |
docker.io/skylee:docker 是基于 docker:git 镜像,添加了一些环境变量。
git push 之后会触发构建过程
1 | Running with gitlab-runner 10.8.0 (079aad9e) |
- 使用
image: docker.io/skylee:docker
启动一个容器。之后所有的命令都是在容器内操作的。 - 启动
docker:dind
服务。也就是docker
的进程。 gitlab-runner
克隆代码到容器目录/builds/likai15/my_test_ci
。 由于没有指定挂载目录,可以在宿主机的默认挂载目录看到/var/lib/docker/xxxx/_data/my_test_ci
- 开始执行
docker-build
阶段的 job。
FAQ
mount: permission denied (are you root?) 答: 这里
docker:dind 是啥东西? 答 :这里
- 构建过程耗时过长 ? 答:一般我们都会自己搭建一个私有的内网仓库。
搭建私有 docker 仓库
1 | docker run -d -p 5000:5000 -v /registry:/tmp/registry registry |
只是简单搭建了一个用 docker.images 的私有仓库。也可以使用 [Harbor] 。(https://github.com/vmware/harbor/)
参考 搭建 Harbor