关于GitOps的介绍,能够参考 GitOps:Kubernetes多集群环境下的高效CICD实践html
咱们将会把gitlab和jenkins所有部署到此命名空间下git
容器服务控制台上依次点击 市场 -> 应用目录 -> gitlab-ce :web
在 参数 中设置externalUrl和gitlabRootPassword后选择gitops命名空间并建立应用,本次实践中 externalUrl 设置为 http://ls-gitlab.example.com/, 若是没有dns解析的话,能够在建立成功后直接使用ipdocker
容器服务控制台上依次点击 路由与负载均衡 -> 服务 查看gitlab应用的访问地址,大约2分钟后可访问gitlab并登录:json
建立private group application:api
建立private project application-demo, 示例源码地址:安全
https://code.aliyun.com/haoshuwei/application-demo.git
从master新建一个分支latest:app
设置master和latest分支只有管理员才能merge和push代码的操做:负载均衡
preview-pipeline示例源码地址为:svg
https://code.aliyun.com/haoshuwei/preview-pipeline.git
staging-pipeline示例源码地址为:
https://code.aliyun.com/haoshuwei/staging-pipeline.git
production-pipeline示例源码地址为:
https://code.aliyun.com/haoshuwei/production-pipeline.git
上传3个构建项目以前须要替换如下字段:
IMAGE_REPO: 应用容器镜像要上传到哪一个镜像仓库,镜像仓库地址
dingTalkToken: 钉钉通知所使用的钉钉机器人accessToken
Fetch Git Repo -> credentialsId : 用于Jenkins拉取git项目的证书名称,须要在Jenkins中建立名为gitlab的证书
Fetch Git Repo -> url : Jenkins拉取git repo的url
preview-pipeline:
staging-pipeline
production-pipeline
管理员用户登陆后将developer用户添加为application组的developer member:
此时developer用户只有application组下projects的权限, 没有builds组的权限:
生成并复制保存apiToken:
容器服务控制台上依次点击 市场 -> 应用目录 -> jenkins:
在 参数 中设置Master.AdminPassword的值,并更改rbac.install的值为true,选择gitops命名空间后点击建立:
容器服务控制台上依次点击 路由与负载均衡 -> 服务 查看jenkins应用的访问地址,大约1分钟后可访问jenkins并登录:
系统管理 -> 系统设置 -> Gitlab:
配置完毕后点击 Save 保存。
5.2.1 新建任务,输入名称选择流水线类型并点击建立:
5.2.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:
点击 Advanced 进行高级选项配置如图所示:
复制并保存GitLab webhook URL和Secret token的值用于在Gitlab上配置webhook。
5.2.3 Pipeline区域配置preview-pipeline构建项目的git repo
完成配置后点击 保存。
5.3.1 新建任务,输入名称选择流水线类型并点击建立:
5.3.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:
点击 Advanced 进行高级选项配置如图所示:
复制并保存GitLab webhook URL和Secret token的值用于在Gitlab上配置webhook。
5.3.3 Pipeline区域配置staging-pipeline构建项目的git repo
完成配置后点击 保存。
5.4.1 新建任务,输入名称选择流水线类型并点击建立:
5.4.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:
点击 Advanced 进行高级选项配置如图所示:
复制并保存GitLab webhook URL和Secret token的值用于在Gitlab上配置webhook。
5.4.3 Pipeline区域配置production-pipeline构建项目的git repo
完成配置后点击 保存。
$ docker login registry.cn-hangzhou.aliyuncs.com $ kubectl -n gitops create secret generic jenkins-docker-cfg --from-file=/root/.docker/config.json
clusterrolebinding.yaml:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: gitops-cluster-admin subjects: - kind: ServiceAccount name: default namespace: gitops roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io
$ kubectl create -f clusterrolebinding.yaml
系统管理 ->全局安全管理-> Authorization -> 勾选 Allow anonymous read access 并保存:
进入application-demo项目的webhook配置页面:
所图所示:
所图所示:
所图所示:
7.1.1 在application-demo项目上新建一个开发分支features/change-index-1
7.1.2 修改src/main/resources/static/index.html中的kubernetes.svg为jenkins.svg并提交修改
7.1.3 建立请求合并到latest分支的Merge Request
Open MergeRequest的动做会触发jenkins job preview-pipeline的自动构建,并完成如下stages:
(1)拉取http://xxx.xxx.xxx/builds/preview-pipeline.git项目并按照Jenkins定义的内容继续执行如下内容
(2)Fetch Git Repo: 拉取应用源码项目http://xxx.xxx.xxx.xxx/application/application-demo.git
(3)Maven Build: 打包
(4)Maven Test: 测试
(5)Docker Build And Publish: docker镜像构建和推送
(6)Kubectl Deploy: 部署应用到Kubernetes集群(本示例使用的是本集群的一个动态建立的命名空间preview-xxx)
(7)Post Actions: 钉钉通知
developer能够查看Merge Request页面的内容
点击可跳转至jenkins构建日志:
7.1.4 构建完成后能够看到一个application-demo应用的预览页面
点击预览应用:
也能够直接在钉钉群里查看应用访问连接等信息:
7.1.5 应用预览验证后, developer能够申请管理员接受此合并
合并MR:
Accept MR的动做或触发staging-pipeline的构建,拉取application-demo项目的latest分支代码并构建和部署到staging命名空间下
查看钉钉通知并访问staging环境中的application-demo应用:
Accept MR的动做或触发production-pipeline的构建,拉取application-demo项目的master分支代码并构建和部署到production命名空间下
查看钉钉通知并访问production环境中的application-demo应用:
原文连接 本文为云栖社区原创内容,未经容许不得转载。