运行环境准备与相关软件要求
1.生产级 kubernetes 集群 推荐 1.8 以上版本
2.Gitlab docker 镜像 slpcat/gitlab-ce
3.Jenkins docker 镜像
Jenkins master 镜像 slpcat/kube-jenkins-service 已安装需要的各种插件,已预先配置使用 kubernetes 管理 jenkins slave Jenkins slave 镜像 slpcat/kube-jenkins-dind-agent
支持 jnlp 协议,git 源码管理,以及 Docker in Docker
4.Docker 私有镜像仓库,用户名密码,用于存放生成的 docker 镜像
实现功能与目标
1.gitlab 与 jenkins 使用 openid 统一认证,认证源为 gitlab 账户
2.Jenkins 使用 kubernetes 进行分布式构建任务
3.Jenkins 在 kubernetes 群集里面自动发布业务 pod,svc
4.钉钉机器人通知 jenkins 任务构建进度与结果
5.最终目标是开发人员运行 git push 提交代码,业务自动上线运行,无需人工干预
安装过程
搭建 kubernetes 群集
略
安装 Gitlab 到 kubernetes
使用持久化存储镜像 slpcat/gitlab-ce
集群内域名 gitlab.default.svc.cluster.local 外部域名 git.example.com
配置样本:https://github.com/slpcat/docker-images/tree/master/gitlab-ce安装 Jenkins 到 kubernetes
使用持久化存储
需要创建 serviceaccount 授权 jenkins 完全访问 kubernetes 集群镜像 slpcat/kube-jenkins-service
集群内域名 jenkins.default.svc.cluster.local 外部域名 jenkins.example.com
配置样本:https://github.com/slpcat/docker-images/tree/master/kube-jenkins-service
相关功能配置
jenkisn 使用 gitlab 认证用户 Gitlab 建立应用
Admin Area –>Applications—>New application
CallbackURL: http://jenkins.example.com/securityRealm/finishLogin
Scops: read_user, openid
记下 Application Id 和 Secret
Jenkins 安全设置系统管理—>全局安全管理
启用 gitlab 用户认证 勾选 Gitlab Authentication Plugin GitLab Web URI 填 gitlab 服务器地址 http://git.example.com GitLab API URI 填 gitlab 服务器地址 http://git. example.com Client ID 填上一步 gitlab 服务器生成的 Application Id Client Secret 填上一步 gitlab 服务器生成的 Secret
授权策略: 登录用户可以做任何事 Allow anonymous read access
保存,jenkins 首页点登录,跳转 gitlab 用户登录,输入 gitlab 用户名密码,然后显示以下页面
点 Authorize 登录进入 jenkins
Jenkins 使用 kubernetes 集群创建 pod 作为 slave
系统管理系统设置云新增一个云 选 Kubernetes
Name 填 kubernetes
Kubernetes URL 填 https://kubernetes.default.svc.cluster.local Kubernetes Namespace 填 default
Credentials 填 jenkins 这个 service account
然后测试连接
Jenkins URL 填 http://jenkins.default.svc.cluster.local:8080
创建 Jenkins slave 的 kubernetes pod 模板
Defaults Provider Template Name 填 jenkins-slave
Kubernetes Pod Template Name 填 jnlp-slave Namespace 填 default Labels 填 jnlp-slave Container Template Name 填 jnlp
Docker image 填 slpcat/kube-jenkins-dind-agent Working directory 填 /home/jenkins
Command to run slave agent 清空
Arguments to pass to the command 填 ${computer.jnlpmac} ${computer.name}
高级里面
Run in privileged mode 勾选 特权模式运行 pod
项目发布流程
1.开发人员运行 Git push 提交代码到 gitlab 代码库
2.Gitlab 的 web hook 触发 jenkins 构建任务
3.Jenkins master 使用 kubernetes 集群创建 jenkins slave
4.jenkins slave 根据构建任务定义执行动作
0gitlab 代码库下载项目代码,根据 Dockerfile 定义制作 docker 镜像,上传 docker 镜像到私有仓库 registry,根据模板生成 kubernetes 配置文件,最后部署镜像到 kubernets 运行
5.任务完成,使用钉钉机器人发送通知
DevOPS 操作规范与要求
项目代码与服务模板每个 git 项目内容如下
Dockerfile:镜像构建文件
kubernetes:kubernetes相关配置文件模板目录 deploy svc pvc等
www_root:业务代码目录
以及其他配置文件与脚本(根据需要添加)
填写名字和描述
勾选 Restrict where this project can be run
Label Expression 填jnlp-slave
限制运行 设置标签表达式 jnlp-slave
Repository URL
填写git地址 [email protected]/example_web.git
Credentials 添加git账户名和ssh私钥
构建触发器 勾选 Build when a change is pushed to GitLab
记下触发器地址和生成的 Secret token
Gitlab项目内设置 web hook
项目名 ——Settings——integrations
填写Jenkins生成的触发器地址和 Secret token
构建 增加构建步骤
Docker build and publish
Repository Name 填写镜像名称
Tag填写镜像标签 本例使用${UILD_NUMBER} 构建号码为tag
Docker registry URL 填写私有仓库地址 https://registry.cn-beijing.aliyuncs.com/v2/
Registry credentials 设置私有仓库用户名和密码
Deploy to kubernetes 填写k8s凭证 包括地址 证书,复制kubectl控制用户 ~/.kubectl/config相关字段
Config Files 填写项目内kubernetes配置文件路径 逗号分隔
Enable Variable Substitution in Config 勾选变量替换
构建后操作
钉钉电脑客户端——钉钉群——群设置——群机器人——添加群机器人——自定义
记下access_token
jenkins URL填http://jenkins.example.com/
钉钉access token 填写生成的acess_token字串
勾选相应的通知选项
演示 任务构建控制台输出
演示 钉钉群构建通知截图