阿里云Kubernetes服务上从零搭建GitLab+Jenkins+GitOps应用发布模型的实践全纪录

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 阿里云Kubernetes服务上从零搭建GitLab+Jenkins+GitOps应用发布模型的实践全纪录

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

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

1.1 新建Kubernetes集群:

image

1.2 新建命名空间gitops

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

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

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

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

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

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

3.1 新建private group application

创建private group application:
image

3.2 新建并上传private project application-demo

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

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

上传源码到自己的源码仓库之前需要注意修改application-demo.yaml文件中的cbf5fdabb9f6a4d5897190935ab3d3155字段为您自己的k8s集群id:

- host: INGRESS_HOST.cbf5fdabb9f6a4d5897190935ab3d3155.cn-beijing.alicontainer.com

image

从master新建一个分支latest:
image

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

3.3 新建private group builds

image

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:
image

staging-pipeline
image

production-pipeline
image

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

image

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

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

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

生成并复制保存apiToken:
image

4. 创建Jenkins应用

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

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

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

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

5.1 配置gitlabConnection

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

配置完毕后点击 Save 保存。

5.2 新建构建任务preview-pipeline

5.2.1 新建任务,输入名称选择流水线类型并点击创建:
image

5.2.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:
image
点击 Advanced 进行高级选项配置如图所示:
image

复制并保存GitLab webhook URL和Secret token的值用于在Gitlab上配置webhook。

5.2.3 Pipeline区域配置preview-pipeline构建项目的git repo
image
image

完成配置后点击 保存。

5.3 新建构建任务staging-pipeline

5.3.1 新建任务,输入名称选择流水线类型并点击创建:
image

5.3.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:
image
点击 Advanced 进行高级选项配置如图所示:
image

复制并保存GitLab webhook URL和Secret token的值用于在Gitlab上配置webhook。

5.3.3 Pipeline区域配置staging-pipeline构建项目的git repo
image

完成配置后点击 保存。

5.4 新建构建任务production-pipeline

5.4.1 新建任务,输入名称选择流水线类型并点击创建:
image

5.4.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:
image
点击 Advanced 进行高级选项配置如图所示:
image

复制并保存GitLab webhook URL和Secret token的值用于在Gitlab上配置webhook。

5.4.3 Pipeline区域配置production-pipeline构建项目的git repo
image

完成配置后点击 保存。

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 并保存:
image

6. 配置GitLab webhook

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

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

所图所示:
image

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

所图所示:
image

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

所图所示:
image

7. GitOps模型发布应用

7.1 developer用户做以下操作

7.1.1 在application-demo项目上新建一个开发分支features/change-index-1
image

7.1.2 修改src/main/resources/static/index.html中的kubernetes.svg为jenkins.svg并提交修改

7.1.3 创建请求合并到latest分支的Merge Request
image

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页面的内容
image

点击可跳转至jenkins构建日志:
image

7.1.4 构建完成后可以看到一个application-demo应用的预览页面
image
点击预览应用:
image

也可以直接在钉钉群里查看应用访问链接等信息:
image

7.1.5 应用预览验证后, developer可以申请管理员接受此合并

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

合并MR:
image

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

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

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

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

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

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
1月前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
50 2
|
2月前
|
专有云 Serverless 持续交付
亚太唯一,阿里云再度入选Gartner®容器管理魔力象限领导者
Gartner正式发布 2024《容器管理魔力象限》报告,阿里云再度成为中国唯一一家入选「领导者象限」的科技公司。
|
1月前
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
58 4
|
2月前
|
人工智能 专有云 Serverless
亚太唯一!阿里云再度入选Gartner®容器管理魔力象限领导者
亚太唯一!阿里云再度入选Gartner®容器管理魔力象限领导者
109 2
|
3月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践
|
2月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
71 0
|
2月前
|
运维 监控 jenkins
运维自动化实践:利用Jenkins实现高效CI/CD流程
【10月更文挑战第18天】运维自动化实践:利用Jenkins实现高效CI/CD流程
|
3月前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
|
3月前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
阿里云ACK容器服务生产级可观测体系建设实践

相关产品

  • 容器服务Kubernetes版