同步操作将从 烂泥行天下/kubeasz 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Gitlab-ci 兼容 travis ci 格式,也是最流行的 CI 工具之一;本文讲解利用 gitlab, gitlab-runner, docker, harbor, kubernetes 等流行开源工具搭建一个自动化CI/CD流水线;示例配置以简单实用为原则,暂时没有选用 dind(docker in dockers)打包、gitlab Auto DevOps 等方式。一个最简单的流水线如下:
假设你要开发一个 spring boot 项目;先登录你的 gitlab 账号,创建项目,上传你的代码;项目根目录看起来如下:
-rw-r--r-- 1 root root 44 Jan 2 16:38 eclipse.bat
drwxr-xr-x 8 root root 4096 Jan 7 15:29 .git/
-rw-r--r-- 1 root root 276 Jan 7 08:44 .gitignore
drwxr-xr-x 3 root root 4096 Jan 7 08:44 example-api/
drwxr-xr-x 3 root root 4096 Jan 7 08:44 example-biz/
drwxr-xr-x 3 root root 4096 Jan 2 16:38 example-dal/
drwxr-xr-x 3 root root 4096 Jan 2 16:38 example-web/
-rw-r--r-- 1 root root 54 Jan 2 16:38 install.bat
-rw-r--r-- 1 root root 10419 Jan 2 16:38 pom.xml
传统做法是在本地配置好相关环境后使用 mvn 编译生成jar包,然后测试运行jar;这里我们要把应用打包成 docker 镜像,并创建 CI/CD 流水线:如下示例,在项目根目录新增创建2个文件夹及相关文件
dockerfiles ### 新增文件夹用来 docker 镜像打包
└── Dockerfile # 定义 docker 镜像
.ci ### 新增文件夹用来存放 CI/CD 相关内容
├── app.yaml # k8s 平台的应用部署文件
├── config.sh # 配置替换脚本
└── gitlab-ci.yml # gitlab-ci 的主配置文件
我们把 Dockerfile 放在独立目录下,java spring boot 应用可以这样写:
cat > dockerfiles/Dockerfile << EOF
FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY *.jar app.jar # 这里 *.jar 包就是后续在cicd pipeline 过程中 mvn 生成的jar包移动到此目录
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
EOF
装完 gitlab 后使用浏览器登录gitlab,很容易找到帮助文档,里面有介绍gitlab-ci的内容(文档权威、详细!请多多阅读~ 随着CI/CD流程的深入,部分内容也可以回来查阅),先看如下文档(假设你本地gitlab使用域名gitlab.test.com
)
目录.ci
下面的三个文件app.yaml
, config.sh
, gitlab-ci.yml
是互相关联的;gitlab-ci.yml 文件中会调用到另外两个文件;文件之间又通过一些变量定义联系,流程中用到的变量大致可以分为三种:
变量 | 值 | 注解 |
---|---|---|
BETA_APP_REP | 1 | beta环境应用副本数 |
BETA_DB_HOST | 1.1.1.1:3306 | beta环境应用连接数据库主机 |
BETA_DB_PWD | xxxx | beta环境数据库连接密码 |
BETA_DB_USR | xxxx | beta环境数据库连接用户 |
BETA_REDIS_HOST | 1.1.1.2 | beta环境redis主机 |
BETA_REDIS_PORT | 6379 | beta环境redis端口 |
BETA_REDIS_PWD | xxxx | beta环境redis密码 |
BETA_HARBOR | 1.1.1.3 | beta环境镜像仓库地址 |
BETA_HARBOR_PWD | xxxx | beta环境镜像仓库密码 |
BETA_HARBOR_USR | xxxx | beta环境镜像仓库用户 |
PROD_APP_REP | 2 | prod环境应用副本数 |
PROD_DB_HOST | 2.2.2.1:3306 | prod环境应用连接数据库主机 |
PROD_DB_PWD | xxxx | prod环境数据库连接密码 |
PROD_DB_USR | xxxx | prod环境数据库连接用户 |
PROD_REDIS_HOST | 2.2.2.2 | prod环境redis主机 |
PROD_REDIS_PORT | 6379 | prod环境redis端口 |
PROD_REDIS_PWD | xxxx | prod环境redis密码 |
PROD_HARBOR | 2.2.2.3 | prod环境镜像仓库地址 |
PROD_HARBOR_PWD | xxxx | prod环境镜像仓库密码 |
PROD_HARBOR_USR | xxxx | prod环境镜像仓库用户 |
... | ... | 根据项目需要自行添加设置 |
掌握了以上基础知识,可以开始以下三个任务:
使用浏览器访问gitlab,登录后,在项目页面进行配置,如图:
终于经过 1~4 步骤把示例项目的CI/CD 流水线创建出来了,是时候试试提交代码测试下成果了;别担心,初次 CI/CD job执行一般都会失败的:) 好在现在你已经基本了解了所有CI/CD流程与配置,失败了就查看错误日志一一排除。另外因为采用虚机安装 Runner 执行 shell 脚本的方式执行 ci job,我们始终可以登录虚机以手动执行 shell 脚本的方式调试,这对于初学来说很有帮助。查看 CI/CD 执行情况如图:
现在为止 CICD Pipelines 已经可以跑通了,甚至稍微修改下 gitlab-ci.yml 配置,项目代码每一次提交后可以自动执行编译
、打包
、部署测试
、部署生产
等等工作;也许你还没来得及慢慢体会这顺畅的感觉,赶紧先踩个刹车,控制下车速;因为现在你需要考虑 gitlab-ci 的安全配置了,这很重要!
首先 gitlab 项目的基本安全就是项目成员控制,访问项目的权限分为:所有者(Owner),维护者(Maintainer),开发者(Developer),报告者(Reporter),访客(Guest);详细的权限介绍请查阅官方文档,这里简单地介绍两类权限:所有者和维护者属于特权用户
,开发者属于普通用户
,他们应该具有如下权限区分:
以下的安全实践配置作为个人经验分享,仅作参考;如果你的项目需要更高的安全性,请阅读 gitlab-ci 官方相关文档,尝试找到属于自己的最佳实践。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。