美文网首页技术容器DevOps
阿里云Kubernetes服务上从零搭建GitLab+Jenki

阿里云Kubernetes服务上从零搭建GitLab+Jenki

作者: 阿里云云栖号 | 来源:发表于2019-05-09 12:33 被阅读30次

    关于GitOps的介绍,可以参考 GitOps:Kubernetes多集群环境下的高效CICD实践

    1. 在 容器服务控制台 创建kubernetes集群

    1.1 新建Kubernetes集群:

    1.2 新建命名空间gitops

    我们将会把gitlab和jenkins全部部署到此命名空间下

    2. 创建GitLab应用 (可选项,可以对接已有GitLab环境)

    容器服务控制台上依次点击 市场 -> 应用目录 -> gitlab-ce :

    参数 中设置externalUrl和gitlabRootPassword后选择gitops命名空间并创建应用,本次实践中 externalUrl 设置为 http://ls-gitlab.example.com/, 如果没有dns解析的话,可以在创建成功后直接使用ip

    容器服务控制台上依次点击 路由与负载均衡 -> 服务 查看gitlab应用的访问地址,大约2分钟后可访问gitlab并登陆:

    3. 设置GitLab并上传示例源码项目

    3.1 新建private group application

    创建private group application:

    3.2 新建并上传private project application-demo

    创建private project application-demo, 示例源码地址:

    https://code.aliyun.com/haoshuwei/application-demo.git
    

    从master新建一个分支latest:

    设置master和latest分支只有管理员才能merge和push代码的操作:

    3.3 新建private group builds

    3.4 新建并上传private project preview-pipeline staging-pipeline production-pipeline

    preview-pipeline示例源码地址为:

    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

    3.5 注册一个普通开发者用户developer

    管理员用户登录后将developer用户添加为application组的developer member:

    此时developer用户只有application组下projects的权限, 没有builds组的权限:

    3.6 生成一个apiToken用于Jenkins配置gitlabConnection

    生成并复制保存apiToken:

    4. 创建Jenkins应用

    容器服务控制台上依次点击 市场 -> 应用目录 -> jenkins:

    参数 中设置Master.AdminPassword的值,并更改rbac.install的值为true,选择gitops命名空间后点击创建:

    容器服务控制台上依次点击 路由与负载均衡 -> 服务 查看jenkins应用的访问地址,大约1分钟后可访问jenkins并登陆:

    5. 配置Jenkins并创建构建任务

    5.1 配置gitlabConnection

    系统管理 -> 系统设置 -> Gitlab:

    配置完毕后点击 Save 保存。

    5.2 新建构建任务preview-pipeline

    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 新建构建任务staging-pipeline

    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 新建构建任务production-pipeline

    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

    完成配置后点击 保存。

    5.5 创建docker registry auth secret:

    $ docker login registry.cn-hangzhou.aliyuncs.com
    $ kubectl -n gitops create secret generic jenkins-docker-cfg  --from-file=/root/.docker/config.json
    

    5.6 创建clusterrolebinding授予serviceaccount default对gitops命名空间的管理权限

    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
    

    5.7 设置匿名用户的可读权限

    系统管理 ->全局安全管理-> Authorization -> 勾选 Allow anonymous read access 并保存:

    6. 配置GitLab webhook

    进入application-demo项目的webhook配置页面:

    6.1 配置触发jenkins job preview-pipeline的触发器

    所图所示:

    6.2 配置触发jenkins job staging-pipeline的触发器

    所图所示:

    6.3 配置触发jenkins job production-pipeline的触发器

    所图所示:

    7. GitOps模型发布应用

    7.1 developer用户做以下操作

    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可以申请管理员接受此合并

    7.2 管理员合并指向latest分支的MergeRequest

    合并MR:

    Accept MR的动作或触发staging-pipeline的构建,拉取application-demo项目的latest分支代码并构建和部署到staging命名空间下

    查看钉钉通知并访问staging环境中的application-demo应用:

    7.3 管理员创建latest到master分支的Merge Request并合并此指向master的Merge Request

    Accept MR的动作或触发production-pipeline的构建,拉取application-demo项目的master分支代码并构建和部署到production命名空间下

    查看钉钉通知并访问production环境中的application-demo应用:



    本文作者:流生

    阅读原文

    本文为云栖社区原创内容,未经允许不得转载。

    相关文章

      网友评论

        本文标题:阿里云Kubernetes服务上从零搭建GitLab+Jenki

        本文链接:https://www.haomeiwen.com/subject/qstwoqtx.html