• [云原生] [kubernetes] Kubesphere下的DevOps / (CI/CD)


    简介

    KubeSphere 从 3.2.0 版本开始便新增了 “动态加载应用商店” 的功能,合作伙伴可申请将应用的 Helm Chart 集成到 KubeSphere 应用商店,相关的 Pull Request 被合并后,KubeSphere 应用商店即可动态加载应用,不再受到 KubeSphere 版本的限制

    🧲 相关资料

    IDEA下Docker推送镜像到阿里云容器镜像
    在Kubesphere上部署应用
    Kubesphere下的Springboot发布并使用外部配置文件

    本篇环境实践环境为:kubesphere + 阿里云镜像仓库 + gitlab (公有云代码仓库)

    一: 准备工作

    在这里插入图片描述

    # 在集群设置面板,编辑ks-installer --> cluster-configuration.yaml
    devops:
      enabled: true # 将“false”更改为“true”。
      
    # 开启应用商店
      openpitrix:
        store:
          enabled: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 可以适当调整jenkins堆栈的大小
      devops:
        enabled: true
        jenkinsJavaOpts_MaxRAM: 8g
        jenkinsJavaOpts_Xms: 8192m
        jenkinsJavaOpts_Xmx: 8192m
        jenkinsMemoryLim: 2Gi
        jenkinsMemoryReq: 8192Mi
        jenkinsVolumeSize: 8Gi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 查看devOps相关组件初始化情况
      在这里插入图片描述

    二: 创建企业空间 / 项目

    您需要创建一个企业空间、一个 DevOps 项目和一个用户 (project-regular),需要邀请该用户至 DevOps 项目中并赋予 operator 角色。

    一般为一个企业空间就是对应不同的业务线, 一个业务线下面有不同的项目,这个“项目”通常我们实际应用中会划分为不同的环境,比如dev开发环境,prod生产环境等等。
    在这里插入图片描述

    三: 企业空间下构建DevOps工程

    在这里插入图片描述

    3.1 创建DevOps凭证

    在这里插入图片描述

    凭证 ID类型用途
    demo-kubeconfigkubeconfigKubernetes
    gitlab-id用户名和密码gitlab 代码仓库
    dockerhub-id用户名和密码Docker Hub

    3.2 创建流水线(官方版本)

    在这里插入图片描述

    • 高级设置

    在这里插入图片描述

    在高级设置页面,点击添加,添加以下三个字符串参数。这些参数将用于流水线的 Docker 命令。添加完成后,点击创建。

    参数类型名称描述信息备注
    字符串REGISTRYdocker.io
    字符串DOCKERHUB_NAMESPACEDocker ID
    字符串APP_NAMEdevops-sample

    创建的流水线会显示在列表中。然后点击编辑,选择相应的类型(笔者这里选择自定义流水线)
    在这里插入图片描述

    阶段 1:拉取源代码 (Checkout SCM)

    在图形编辑面板上,从类型下拉列表中选择 node,从 Label 下拉列表中选择 maven。

    请点击左侧的加号图标来添加阶段。点击添加步骤上方的文本框,然后在右侧的名称字段中为该阶段设置名称(例如 Checkout SCM)。

    在这里插入图片描述

    点击添加步骤。在列表中选择 git,以从 GitHub 拉取示例代码。在弹出的对话框中,填写必需的字段。点击确定完成操作。

    URL:输入 Git 仓库地址 https://gitlab.com/yanggc/java-framework.git。请注意,这里是示例地址,您需要使用您自己的仓库地址。
    凭证 ID:本教程中无需输入凭证 ID (有凭证选择相应的凭证)。
    分支:如果您将其留空,则默认为 master 分支。请输入 sonarqube,或者如果您不需要代码分析阶段,请将其留空。
    在这里插入图片描述
    第一阶段设置完成。

    阶段 2: 构建并推送镜像

    点击前一个阶段右侧的加号图标添加一个新的阶段,以构建并推送镜像至 Docker Hub。将其命名为 Build and Push。

    在这里插入图片描述

    • 点击任务下的添加步骤,选择指定容器,将其命名为 maven,然后点击确定。
      在这里插入图片描述

    • 点击 maven 容器下的添加嵌套步骤添加一个嵌套步骤。在列表中选择 shell 并在弹出窗口中输入以下命令,点击确定完成操作。

    mvn -Dmaven.test.skip=true clean package
    
    • 1

    在这里插入图片描述

    • 再次点击添加嵌套步骤,选择 shell。在命令行中输入以下命令,以根据 Dockerfile 构建 Docker 镜像。点击确定确认操作。
    docker build -f Dockerfile-online -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER .
    
    • 1

    在这里插入图片描述

    • 再次点击添加嵌套步骤,选择添加凭证。在弹出的对话框中填写以下字段,点击确定确认操作。

    凭证名称:选择您创建的 Docker Hub 凭证,例如 dockerhub-id。
    密码变量:输入 DOCKER_PASSWORD。
    用户名变量:输入 DOCKER_USERNAME。

    在这里插入图片描述

    • 在添加凭证步骤中点击添加嵌套步骤(第一个)。选择 shell 并在弹出窗口中输入以下命令,用于登录 Docker Hub。点击确定确认操作。
    echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin
    
    • 1
    • 在添加凭证步骤中点击添加嵌套步骤。选择 shell 并输入以下命令,将 SNAPSHOT 镜像推送至 Docker Hub。点击确定完成操作。
    docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER
    
    • 1

    在这里插入图片描述

    阶段 3: 生成制品

    在这里插入图片描述
    选中 Artifacts 阶段,点击任务下的添加步骤,选择保存制品。在弹出的对话框中输入 target/*.jar,用于设置 Jenkins 中制品的保存路径。点击确定完成操作。

    在这里插入图片描述

    阶段 4: 部署至开发环境

    点击 Artifacts 阶段右侧的加号图标添加最后一个阶段,将其命名为 Deploy to Dev。该阶段用于将资源部署至您的开发环境(即 kubesphere-sample-dev 项目)。

    点击 Deploy to Dev 阶段下的添加步骤。在列表中选择指定容器,将其命名为 maven 然后点击确定。

    在这里插入图片描述

    点击 maven 容器步骤下的添加嵌套步骤。在列表中选择添加凭证,在弹出的对话框中填写以下字段,然后点击确定。

    凭证名称:选择您创建的 kubeconfig 凭证,例如 demo-kubeconfig。
    kubeconfig 变量:输入 KUBECONFIG_CONTENT。

    • 点击添加凭证步骤下的添加嵌套步骤。在列表中选择 shell,在弹出的对话框中输入以下命令,然后点击确定。
    mkdir ~/.kube
    echo "$KUBECONFIG_CONTENT" > ~/.kube/config
    envsubst < deploy/dev-ol/devops-sample-svc.yaml | kubectl apply -f -
    envsubst < deploy/dev-ol/devops-sample.yaml | kubectl apply -f -
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    待您完成上述步骤,请在右下角点击保存。随后,您可以看到该流水线有完整的工作流,并且每个阶段也清晰列示。当您用图形编辑面板定义流水线时,KubeSphere 会自动创建相应的 Jenkinsfile。点击编辑 Jenkinsfile 查看该 Jenkinsfile。

    阶段 5: 运行流水线

    您需要手动运行使用图形编辑面板创建的流水线。点击运行,您可以在弹出的对话框中看到步骤 3 中已定义的三个字符串参数。点击确定来运行流水线。
    在这里插入图片描述

    • 流水线运行成功
      在这里插入图片描述

    3.3 精简版

    笔者自用精简版😊

    阶段 0:创建凭证 + 创建流水线

    • 流水线添加构建参数
    构建参数类型名称默认值描述
    字符串REGISTRYregistry.cn-beijing.aliyuncs.comdocker 仓库服务主机 (局域网就写你的ip)
    字符串DOCKERHUB_NAMESPACEoxygen你的docker命名空间名称
    字符串APP_NAMEdemo你的项目名称
    字符串BRANCH_NAMEboot270-docker分支名

    阶段 1:拉取源代码

    在这里插入图片描述

    在这里插入图片描述

    # 名称
    checkout-scm
    # 填写git代码地址
    
    • 1
    • 2
    • 3

    阶段 2:打包 + 镜像推送

    名称 docker-maker

    任务–> 指定容器(名称填写:maven) --> shell脚本

    
    
    mvn -Dmaven.test.skip=true clean package -am  -pl [你的项目名称]
    
    • 1
    • 2
    • 3

    –> shell脚本 (制作镜像制品)

    # 这里注意 -t后面是 
    # $REGISTRY 镜像服务地址
    # $DOCKERHUB_NAMESPACE镜像服务命名空间
    # $APP_NAME镜像 项目名称  
    # $BRANCH_NAME 镜像 分支名称
    # 记得后面有个点“.”
    docker build -f [你的项目的名称]/Dockerfile -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$BRANCH_NAME .
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    –> 添加凭证(制作镜像制品仓库账号校验)

    在这里插入图片描述

    # 选择对应的凭证ID
    # 密码变量
    DOCKER_PASSWORD
    # 用户名变量
    DOCKER_USERNAME
    
    • 1
    • 2
    • 3
    • 4
    • 5

    –> shell 脚本(登录Docker制品库脚本)

    echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin
    
    • 1

    –> shell 脚本(推送到Docker制品库脚本)

    docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$BRANCH_NAME
    
    • 1

    在这里插入图片描述

    到这里就已经可以发布镜像到目标Docker制品库了,但是没有重新发布工作负载, 为了是打包镜像制品和服务重新发布进行区分开来,打包之后可以手动进行重新发布服务即可

    阶段 3:重新发布服务(可选)

    点击 Artifacts 阶段右侧的加号图标添加最后一个阶段,将其命名为 Deploy to Dev。该阶段用于将资源部署至您的开发环境(即 kubesphere-sample-dev 项目)。

    点击 Deploy to Dev 阶段下的添加步骤。在列表中选择指定容器,将其命名为 maven 然后点击确定。

    在这里插入图片描述

    点击 maven 容器步骤下的添加嵌套步骤。在列表中选择添加凭证,在弹出的对话框中填写以下字段,然后点击确定。

    凭证名称:选择您创建的 kubeconfig 凭证,例如 demo-kubeconfig。
    kubeconfig 变量:输入 KUBECONFIG_CONTENT。

    • 点击添加凭证步骤下的添加嵌套步骤。在列表中选择 shell,在弹出的对话框中输入以下命令,然后点击确定。
    mkdir ~/.kube
    echo "$KUBECONFIG_CONTENT" > ~/.kube/config
    envsubst < deploy/dev-ol/devops-sample-svc.yaml | kubectl apply -f -
    envsubst < deploy/dev-ol/devops-sample.yaml | kubectl apply -f -
    
    • 1
    • 2
    • 3
    • 4

    待您完成上述步骤,请在右下角点击保存。随后,您可以看到该流水线有完整的工作流,并且每个阶段也清晰列示。当您用图形编辑面板定义流水线时,KubeSphere 会自动创建相应的 Jenkinsfile。点击编辑 Jenkinsfile 查看该 Jenkinsfile。

    参考资料 & 致谢

    [1] 在 KubeSphere 上使用极狐GitLab 搭建 DevOps 环境
    [2] 使用图形编辑面板创建流水线

  • 相关阅读:
    网络安全(黑客技术)—2024自学手册
    mysql学习之mysql集群
    [Spring MVC 8]高并发实战小Demo
    LLM(大语言模型)「Agent」开发教程-LangChain(三)
    【LeetCode刷题(数据结构)】:对称二叉树
    千卡利用率超98%,详解JuiceFS在权威AI测试中的实现策略
    计算机网络_计算机的概念、组成、功能、分类
    软件开发中,做好需求管理,这4点很关键。
    组织创新|组织在线化——加速企业组织数字化转型
    聚焦能源与双碳管理需求,格创东智为锂电企业降耗赋能
  • 原文地址:https://blog.csdn.net/YangCheney/article/details/127073006