使用Zadig从0到1搭建持续交付平台(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 使用Zadig从0到1搭建持续交付平台

什么是Zadig


相信有不少朋友已经听过Zadig,但是有更多的朋友还没有听过,或者说听过但是没仔细去了解过,这里我还是简单介绍一下什么是Zadig。


Zadig是一个持续交付的平台,它集CI、CD、自动化测试于一身,致力于构建一个云原生开源的软件交付平台。


使用Zadig,可以轻松地实现本地联调、微服务并行构建、集成测试与持续部署,开发可以更专注于业务开发、运维也可以更专注于稳定性维护。


部署


说了那么多,下面就进入正题,开始Zadig的使用之旅。


安装


其实Zadig的安装参考官方文档的安装篇就行。但是为了保持文章的完整性,我这里简单介绍一下。


下面是我的环境说明:


Kubernetes:v1.18.8

Helm:v3.5.4

Linux:CentOS 7.9

PS:我这里是基于现有的Kubernetes,使用Helm进行安装部署。


安装MySQL


为什么要安装MySQL呢?


使用Zadig默认的安装方式,安装的MySQL是8.+版本,而且有时候死活起不来(踩过坑,没找到起不来的原因),所以我不论是在生产使用还是在测试环境测试都是自己安装的MySQL 5.7的版本,当然,你们需要根据自己的实际情况进行选择。


(1)添加MySQL的Helm repo


$ helm repo add stable https://charts.helm.sh/stable


(2)下载MySQL chart包到本地(我个人习惯,随君选择)


$ helm pull stable/mysql --version 1.6.9


(3)自定义value.yaml文件


mysqlUser: root@'%'
mysqlPassword: Joker@Zadig123
persistence:
  enabled: true
  storageClass: "rbd"
  accessMode: ReadWriteOnce
  size: 50Gi
configurationFiles:
  mysql.cnf: |-
    [mysql]
    default-character-set=utf8
    [mysql.server]
    default-character-set=utf8
    [mysqld_safe]
    default-character-set=utf8
    [client]
    default-character-set=utf8
    [mysqld]
    character_set_server=utf8
    init_connect='SET NAMES utf8'
    max_connections=3000
    slow_query_log=ON
    slow_query_log_file=/tmp/mysql-slow.log
    long_query_time=1
    sql_mode=NO_UNSIGNED_SUBTRACTION,NO_ENGINE_SUBSTITUTION
    lower_case_table_names=1


(4)安装MySQL


$ kubectl create ns zadig
$ helm install mysql -n zadig -f my-vaule.yaml .


(5)安装完成过后查看MySQL安装情况


$ kubectl get all -n zadig | grep mysql
pod/mysql-6b64454fd9-nhlqd            2/2     Running   1          57d
service/mysql             LoadBalancer   10.233.7.155    192.168.100.81   3306:32703/TCP,9104:32514/TCP         57d
deployment.apps/mysql             1/1     1            1           57d
replicaset.apps/mysql-6b64454fd9             1         1         1       57d


安装Zadig


上面已经安装好了MySQL,下面就开始安装Zadig(其他的组件就用Zadig自带的,目前使用起来没发现任何问题)。


(1)添加Zadig Helm Chart


$ helm repo add koderover-chart https://koderover.tencentcloudcr.com/chartrepo/chart


(2)下载Zadig Chart包 我这里先下载v1.11.0版本,因为后续还准备了一个升级的过程。


$ helm pull koderover-chart/zadig --version 1.11.0


(3)自定义value.yaml文件,主要是修改mysql的配置


tags:
  mysql: false
connections:
  mysql:
    host: mysql:3306
    auth:
      user: root
      password: Joker@Zadig123
dex:
  config:
    storage:
      type: mysql
      config:
        host: mysql
        port: 3306
        database: dex
        user: root
        password: Joker@Zadig123
        ssl:
          mode: "false"


(4)安装Zadig 官方指出可以使用域名或者IP访问,我这里采用的是域名。


$ export NAMESPACE=zadig
$ export DOMAIN=zadig.jokerbai.com
$ helm upgrade --install zadig . -f my-value.yaml --namespace ${NAMESPACE} --version=1.10.0 --set endpoint.FQDN=${DOMAIN}     --set global.extensions.extAuth.extauthzServerRef.namespace=${NAMESPACE}     --set "dex.config.staticClients[0].redirectURIs[0]=http://${DOMAIN}/api/v1/callback,dex.config.staticClients[0].id=zadig,dex.config.staticClients[0].name=zadig,dex.config.staticClients[0].secret=ZXhhbXBsZS1hcHAtc2VjcmV0"


(5)查看安装情况


$ kubectl get pod -n zadig 
NAME                              READY   STATUS    RESTARTS   AGE
aslan-5d6b86ccdf-st7w9            2/2     Running   0          10d
config-7d6654fb8-xcfmk            1/1     Running   0          10d
cron-67f77f54bc-fvrgp             2/2     Running   0          10d
dind-0                            1/1     Running   0          49d
discovery-68d76c5bf4-nrl5r        1/1     Running   0          57d
gateway-645958c96c-gnltp          1/1     Running   0          57d
gateway-proxy-5d6bcc677f-njvdk    1/1     Running   0          57d
gloo-7955b997b-br9m2              1/1     Running   0          57d
hub-server-7b5cc9bdb6-t6zkw       1/1     Running   0          10d
mysql-6b64454fd9-nhlqd            2/2     Running   1          57d
nsqlookup-0                       1/1     Running   0          57d
nsqlookup-1                       1/1     Running   0          57d
nsqlookup-2                       1/1     Running   0          57d
opa-69d5c669f6-s784f              1/1     Running   0          57d
picket-55685b94d9-czm7b           1/1     Running   0          10d
podexec-868c677548-mks74          1/1     Running   0          10d
policy-5c5bd995c8-pfxnp           1/1     Running   0          10d
resource-server-c87c4cddd-ptq45   1/1     Running   0          10d
user-77b5585554-n2cm4             1/1     Running   0          10d
warpdrive-55c46595d5-hvkc2        2/2     Running   0          10d
warpdrive-55c46595d5-mn9d8        2/2     Running   0          10d
zadig-dex-d9df5944f-vgdkc         1/1     Running   0          10d
zadig-minio-5c576d44c8-rnkmp      1/1     Running   0          57d
zadig-mongodb-6dfb6f676f-9v5rq    1/1     Running   0          57d
zadig-portal-69d8f946b8-wqrpz     1/1     Running   0          10d


然后可以根据域名http://zadig.jokerbai.com进行访问。


640.png


使用账号密码 admin:zadig 进行登录。


升级


Zadig是非常活跃的项目,社区迭代是非常快的,而且功能会越来越多,体验越来越好,所以升级Zadig算是一个日常需求了。


PS:虽然Zadig每个版本的兼容性做的不错,但是在升级的时候不建议跨版本升级。


(1)下载新版本的zadig


$ helm pull koderover-chart/zadig --version 1.12.0


(2)自定义value.yaml 获取集群zadig配置信息


helm get values zadig -n zadig  > zadig.yaml


修改zadig.yaml,添加自定义mysql配置


USER-SUPPLIED VALUES:
tags:
  mysql: false
connections:
  mysql:
    host: mysql:3306
    auth:
      user: root
      password: Joker@Zadig123
dex:
  config:
    storage:
      type: mysql
      config:
        host: mysql
        port: 3306
        database: dex
        user: root
        password: Joker@Zadig123
        ssl:
          mode: "false"
    staticClients:
    - id: zadig
      name: zadig
      redirectURIs:
      - http://zadig.jokerbai.com/api/v1/callback
      secret: ZXhhbXBsZS1hcHAtc2VjcmV0
endpoint:
  FQDN: zadig.ustax.tech
global:
  extensions:
    extAuth:
      extauthzServerRef:
        namespace: zadig


(3)备份数据库


具体信息根据实际情况填写


1、备份mongo数据库


$ mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径


2、备份mysql数据库


$ mysqldump -h <HOST> -P <PORT> -u root -p user > user.sql
$ mysqldump -h <HOST> -P <PORT> -u root -p dex > dex.sql


(4)升级zadig


$ helm upgrade zadig -n zadig -f zadig.yaml .


升级后,查看Pod是否正常启动,然后使用浏览器登录看是否正常。


系统集成


集成的功能很丰富,可以集成代码源、账号系统、Jenkins、Jira等,但是并不是所有的都有用,选择自己需要的集成就行。


640.png


我这里也不会把全部的集成都写一遍,那样没有意义,不如直接看官方文档。我只写我用到的系统:代码源和账号系统。


集成代码源


代码源的选择非常多,可以使用现成的saas平台,比如gitlab、gitee、github等,这些zadig都支持集成。由于我们公司是使用的自建的gitlab,所以这里只介绍gitlab的集成方法。


(1)创建OAuth。我这里创建的是组织类型的OAuth,也就是可以有全局的权限。


640.png


按图配置,如下:


640.png



创建完成之后,记住Application IDSecret


(2)在zadig上配置Gitlab集成


640.png


填入如下信息:


  • 代码源:此处选择 GitLab
  • 代码源标识:自定义,方便在 Zadig 系统中快速识别出该代码源,该信息在整个系统内唯一
  • GitLab 服务 URL:GitLab 地址
  • Application ID:步骤 3 应用创建成功后返回的 Application ID
  • Secret:步骤 3 应用创建成功后返回的 Secret


待确认无误后,点击前往授权,会跳到Gitlab进行授权,点击Authorize即可。


640.png


到此,Gitlab集成完成。


640.png


集成账户系统


Zadig本身自带账户系统,但是在企业内部一般也会有自己的账户系统,比如LDAP,为了统一管理,这时候就需要集成这些账户系统。


我这里不是集成的LDAP,而是集成的Gitlab,所以这里只介绍Gitlab的集成方法。


(1)创建Gitlab OAuth


640.png


填入如下信息:



(2)在Zadig账户系统进行集成


640.png


Gitlab需要通过自定义的方式进行集成,相关配置需要通过YAML的方式进行自定义,如下:


baseURL: http://gitlab.jokerbai.com    <Gitlab地址>
clientID: xxxxx    <Gitlan OAuth的Applicaton ID>
clientSecret: xxxxx  <Gitlab OAtuth的secret>
groups:
  - xxxx    <Gitlab组>
redirectURI: http://zadig.jokerbai.com/dex/callback  <Zadig回调地址>
useLoginAsID: false


自定义账户系统使用Dex实现,所以Gitlab等自定义账户系统的集成,可以参考Dex的文档(https://dexidp.io/docs/connectors/gitlab/


信息填写完成过后,点击保存。


(3)登录验证 退出当前账户,使用Gitlab账户进行登录。


选择第三方登录,如下:


640.png


然后会跳到Gitlab登录界面,填写用户名密码,如果在当前浏览器已经登录了Gitlab,则会直接跳转到授权界面,如下:


640.png


点击Authorize过后,会回跳到Zadig用户界面。不过当前用户只是登录到Zadig,并没有任何权限,需要管理授权才能进行其他操作。


到此集成系统已经完成。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
124 2
|
5月前
|
运维 监控 Devops
DevOps实践:持续集成与部署的自动化之旅
【10月更文挑战第7天】在软件开发领域,DevOps已成为提升效率、加速交付和确保质量的关键策略。本文将深入探讨如何通过实施持续集成(CI)和持续部署(CD)来自动化开发流程,从而优化运维工作。我们将从基础概念入手,逐步过渡到实际操作,包括工具选择、流程设计以及监控和反馈机制的建立。最终,我们不仅会展示如何实现这一自动化流程,还会讨论如何克服常见的挑战,以确保成功实施。
93 9
|
5月前
|
监控 Devops 测试技术
DevOps实践:持续集成与部署的自动化之路
【9月更文挑战第30天】在软件工程的世界中,DevOps已成为提升开发效率、确保软件质量和加快交付速度的关键策略。本文将深入探讨如何通过自动化工具和流程实现持续集成(CI)与持续部署(CD),从而优化软件开发周期。我们将从基础概念出发,逐步深入到实际操作,最终展示如何构建一个高效的自动化流水线,以支持快速迭代和高质量发布。
89 7
|
6月前
|
Devops jenkins Java
DevOps实践:持续集成和部署的自动化之旅
【9月更文挑战第20天】在软件开发的世界里,速度和质量是至关重要的。本文将带领读者踏上一场自动化之旅,深入探索DevOps文化中的两大支柱——持续集成(CI)和持续部署(CD)。我们将通过一个实际的案例,展示如何利用现代工具和技术实现代码从编写到部署的无缝转换,确保软件交付的高效性和可靠性。准备好让你的开发流程变得更加流畅和高效了吗?让我们开始吧!
|
6月前
|
运维 Cloud Native Devops
云原生时代的DevOps实践:自动化、持续集成与持续部署
【9月更文挑战第3天】未来,随着人工智能、大数据等技术的不断融入,DevOps实践将更加智能化和自动化。我们将看到更多创新的技术和工具涌现出来,为软件开发和运维带来更多便利和效益。同时,跨团队协作和集成也将得到进一步加强,推动软件开发向更加高效、可靠和灵活的方向发展。
|
7月前
|
存储 安全 测试技术
持续集成、交付和部署简介
持续集成、交付和部署简介
80 1
|
7月前
|
Devops jenkins 持续交付
DevOps 实践:自动化部署与持续集成的无缝对接
【8月更文挑战第30天】本文旨在通过浅显易懂的语言,向读者展示如何在现代软件开发中实现 DevOps 理念下的自动化部署和持续集成。我们将从基础概念出发,逐步深入到实际操作,不仅分享理论知识,还将提供具体的代码示例,帮助读者快速掌握如何将这两个关键环节有效结合,以提高开发效率和软件质量。
|
7月前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
135 0
|
8月前
|
监控 Devops 测试技术
DevOps实践:从持续集成到自动化部署的旅程
【7月更文挑战第31天】在软件开发领域,DevOps已经成为一种文化和实践,旨在通过改进开发和运维之间的协作,来加速软件交付和提高质量。本文将深入探讨DevOps的核心概念,包括持续集成(CI)、持续交付(CD)以及自动化部署,并分享实施这些实践的具体步骤和技巧,帮助读者构建更加高效、可靠的软件发布流程。
116 1
|
8月前
|
监控 安全 Devops
DevOps实践:从持续集成到生产部署的无缝转换
本文旨在探讨DevOps文化下,持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)如何协同工作,以实现软件开发流程的高效率和高质量。文章将通过一个具体案例分析,揭示CI/CD流水线的构建、监控和优化策略,并讨论在实施这些实践时可能遇到的挑战及解决途径。
67 0