您现在的位置是:首页 > 编程 > 

Kubesphere DevOps组件 创建CI/CD流水线

2025-07-20 18:29:33
Kubesphere DevOps组件 创建CI/CD流水线 使用Kubesphere-DevOps组件-创建访问可控的 CI/CD 流水线DevOps 提供一系列持续集成 (CI) 和持续交付 (CD) 工具,可以使 IT 和软件开发团队之间的流程实现自动化。在 CI/CD 工作流中,每次集成都通过自动化构建来验证,包括编码、发布和测试,从而帮助开发者提前发现集成错误,团队也可以快速、安全、可靠

Kubesphere DevOps组件 创建CI/CD流水线

使用Kubesphere-DevOps组件-创建访问可控的 CI/CD 流水线

DevOps 提供一系列持续集成 (CI) 和持续交付 (CD) 工具,可以使 IT 和软件开发团队之间的流程实现自动化。在 CI/CD 工作流中,每次集成都通过自动化构建来验证,包括编码、发布和测试,从而帮助开发者提前发现集成错误,团队也可以快速、安全、可靠地将内部软件交付到生产环境。

DevOps 流水线工作流

DevOps CI/CD 流水线基于底层 Kubernetes Jenkins Agent 运行。这些 Jenkins Agent 可以动态扩缩,即根据任务状态进行动态供应或释放。Jenkins Controller 和 Agent 以 Pod 的形式运行在 KubeSphere 节点上。Controller 运行在其中一个节点上,其配置数据存储在一个持久卷声明中。Agent 运行在各个节点上,但可能不会一直处于运行状态,而是根据需求动态创建并自动删除。

当 Jenkins Controller 收到构建请求,会根据标签动态创建运行在 Pod 中的 Jenkins Agent 并注册到 Controller 上。当 Agent 运行完任务后,将会被释放,相关的 Pod 也会被删除。

动态供应 Jenkins Agent

资源分配合理:动态分配已创建的 Agent 至空闲节点,避免因单个节点资源利用率高而导致任务排队等待。

高可扩缩性:当集因资源不足而导致任务长时间排队等待时,支持向集新增节点。

高可用性:当 Jenkins Controller 故障时,DevOps 会自动创建一个新的 Jenkins Controller 容器,并将持久卷挂载至新创建的容器,保证数据不会丢失,从而实现集高可用。

管理 DevOps 项目
  • 创建 DevOps 项目 (点击查看官方文档)
  • 查看 DevOps 项目列表 (点击查看官方文档)
  • 编辑 DevOps 项目信息(点击查看官方文档)
  • 删除 DevOps 项目(点击查看官方文档)
使用 DevOps 创建和管理 DevOps 项目
  • 创建和管理 DevOps 项目(点击查看官方文档)
  • 使用图形编辑面板创建流水线(点击查看官方文档)
  • 使用 Jenkinsfile 创建流水线(点击查看官方文档)

使用 Jenkinsfile 创建流水线案例:

代码语言:shell复制
pipeline {
  
  agent {
    node {
      label 'maven'
    }
  }
  
  stages {
    
    stage('拉取代码') {
      agent none
      steps {
        container('maven') {
          // 使用指定的凭证拉取代码,指定分支
          // 注意凭证需要先创建
          git(url: '.git', credentialsId: 'heyangyi-git-account' , branch: 'dev', changelog: true, poll: false)
          sh 'ls -al'
        }
      }
    }
    
    stage('构建镜像') {
      agent none
      steps {
        container('maven') {
          // 注意此处Dockerfile文件地址:GRPCS//Dockerfile GRPCS/
          sh 'docker build -t $REGISTRY/$DOCKERHUB_AMESPACE/$APP_AME:$BRACH_AME-$BUILD_UMBER -f GRPCS//Dockerfile GRPCS/'
          sh 'docker images'
        }
      }
    }
    
    stage('推送-构建编号-镜像') {
      agent none
      steps {
        container('maven') {
          withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERAME' ,credentialsId : "$DOCKER_CREDETIAL_ID" ,)]) {
            sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERAME" --password-stdin'
            sh 'docker push $REGISTRY/$DOCKERHUB_AMESPACE/$APP_AME:$BRACH_AME-$BUILD_UMBER'
          }
        }
      }
    }
    
    stage('推送-latest-镜像') {
      steps {
        container('maven') {
          sh 'docker tag $REGISTRY/$DOCKERHUB_AMESPACE/$APP_AME:$BRACH_AME-$BUILD_UMBER $REGISTRY/$DOCKERHUB_AMESPACE/$APP_AME:latest '
          sh 'docker push $REGISTRY/$DOCKERHUB_AMESPACE/$APP_AME:latest '
        }
      }
    }
    
    stage('部署到Test环境') {
      steps {
        container('maven') {
          //input(id: 'deploy-to-dev', message: 'deploy to dev?')
          withCredentials([kubeconfigContent(credentialsId : 'kubeconfig-credential-id' ,variable : 'KUBECOFIG_COFIG' ,)]) {
            sh 'mkdir -p ~/.kube/'
            sh 'echo "$KUBECOFIG_COFIG" > ~/.kube/config'
            // 注意:此处为源代码所在目录的deploy.yaml文件地址
            sh 'envsubst < GRPCS//deploy.yaml | kubectl apply -f -'
          }
        }
      }
    }
    
  }
  
  environment {
    // 阿里云镜像仓库账号密码凭证:用于推送镜像
    DOCKER_CREDETIAL_ID = 'aliyun-docker-registry'
    // gitee账号密码凭证:用于拉取源代码
    GITHUB_CREDETIAL_ID = 'heyangyi-git-account'
    // KUBECOFIG:连接和认证Kubernetes集所需的各种参数和凭证信息
    KUBECOFIG_CREDETIAL_ID = 'kubeconfig-credential-id'
    // 阿里云镜像仓库地址
    REGISTRY = 'registry-hongkong.aliyuncs'
    // 阿里云镜像仓库命名空间
    DOCKERHUB_AMESPACE = 'learn-work'
    // APP名称
    APP_AME = 'grpcs'
    // APP在K8S命名空间:注意在KubeSphere是企业空间下的项目名称,需要先创建
    APP_AMESPACE = 'demo-product'
    // 副本数
    REPLICAS = 1
    // 分支名称
    BRACH_AME = 'dev'
    // ASP.ET CORE 环境名称
    ASPETCORE_EVIROMET = 'ASPETCORE_EVIROMET'
    // ASP.ET CORE 环境名称值
    ASPETCORE_EVIROMET_VALUE = 'Development'
    // ASP.ET CORE 环境名称
    ASPETCORE_URLS = 'ASPETCORE_URLS'
    // ASP.ET CORE 环境名称值
    ASPETCORE_URLS_VALUE = 'http://*:8080'
    // ASP.ET CORE 环境名称
    ASPETCORE_TZ = 'TZ'
    // ASP.ET CORE 环境名称值
    ASPETCORE_TZ_VALUES = 'Asia/Shanghai'
    // APP端口
    APP_PORT = '8080'
  }
  
  parameters {
    string(name: 'TAG_AME', defaultValue: '', description: '')
  }
}

上面使用的凭证:aliyun-docker-registry、heyangyi-git-account、kubeconfig-credential-id

deploy.yaml文件案例

代码语言:yaml复制
apiVersion: app.k8s.io/v1beta1
kind: Application
metadata:
  name: ${APP_AME}
  namespace: ${APP_AMESPACE}
  labels:
    app.kubernetes.io/version: v1
    app.kubernetes.io/name: ${APP_AME}
  annotati:
    servicemesh.kubesphere.io/enabled: "true"
spec:
  selector:
    matchLabels:
      app.kubernetes.io/version: v1
      app.kubernetes.io/name: ${APP_AME}
  addOwnerRef: true
  componentKinds:
    - group: ""
      kind: Service
    - group: apps
      kind: Deployment
    - group: apps
      kind: StatefulSet
    - group: extensi
      kind: Ingress
    - group: servicemesh.kubesphere.io
      kind: Strategy
    - group: servicemesh.kubesphere.io
      kind: ServicePolicy
---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: ${APP_AMESPACE}
  labels:
    version: v1
    app: ${APP_AME}
    app.kubernetes.io/version: v1
    app.kubernetes.io/name: ${APP_AME}
  name: ${APP_AME}-v1
  annotati:
    servicemesh.kubesphere.io/enabled: "true"
spec:
  replicas: ${REPLICAS}
  selector:
    matchLabels:
      version: v1
      app: ${APP_AME}
      app.kubernetes.io/version: v1
      app.kubernetes.io/name: ${APP_AME}
  template:
    metadata:
      labels:
        version: v1
        app: ${APP_AME}
        app.kubernetes.io/version: v1
        app.kubernetes.io/name: ${APP_AME}
      annotati:
        sidecar.istio.io/inject: "true"
    spec:
      containers:
        - name: container-${APP_AME}
          imagePullPolicy: Always
          image: $REGISTRY/$DOCKERHUB_AMESPACE/$APP_AME:$BRACH_AME-$BUILD_UMBER
          ports:
            - name: grpc-${APP_AME}
              protocol: TCP
              containerPort: ${APP_PORT}
          env:
            - name: ${ASPETCORE_EVIROMET}
              value: ${ASPETCORE_EVIROMET_VALUE}
            - name: ${ASPETCORE_URLS}
              value: ${ASPETCORE_URLS_VALUE}
            - name: ${ASPETCORE_TZ}
              value: ${ASPETCORE_TZ_VALUES}
      serviceAccount: default
      affinity: {}
      initContainers: []
      volumes: []
      imagePullSecrets:
        - name: ${DOCKER_CREDETIAL_ID}
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
---
apiVersion: v1
kind: Service
metadata:
  namespace: ${APP_AMESPACE}
  labels:
    version: v1
    app: ${APP_AME}
    app.kubernetes.io/version: v1
    app.kubernetes.io/name: ${APP_AME}
  annotati:
    kubesphere.io/serviceType: statelessservice
    servicemesh.kubesphere.io/enabled: "true"
  name: ${APP_AME}
spec:
  sessionAffinity: one
  selector:
    app: ${APP_AME}
    app.kubernetes.io/version: v1
    app.kubernetes.io/name: ${APP_AME}
  ports:
    - name: grpc-${APP_AME}
      protocol: TCP
      port: 80
      targetPort: ${APP_PORT}
---
参考文档

Kubesphere 扩展组件使用 - CICD - DevOps

注意:安装DevOps扩展组件的过程中遇到一些问题,多数情况是镜像下载不下来,遇到下载不下来的情况下建议在安装过程中查看kubesphere-devops-system项目下容器组的镜像,发现下载不下来的镜像在本机拉取下来,然后导出到本机上传到k8s节点,再还原上去。

代码语言:shell复制
#导出单个镜像
docker save -o [输出文件名].tar [镜像名称或ID]
代码语言:shell复制
#加载单个镜像
docker load -i [输入文件名].tar

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1160658.html

相关标签:无
上传时间: 2025-07-20 14:27:08
留言与评论(共有 20 条评论)
本站网友 奉化银泰
5分钟前 发表
credentialsId
本站网友 房地产网络
27分钟前 发表
${APP_PORT} env
本站网友 忽略不计
15分钟前 发表
labels
本站网友 刘根宏
15分钟前 发表
${APP_AME} app.kubernetes.io/version
本站网友 斯达舒
21分钟前 发表
${REPLICAS} selector
本站网友 上海浦东租房网
13分钟前 发表
当 Jenkins Controller 收到构建请求
本站网友 北京羽毛球馆
27分钟前 发表
app.kubernetes.io/version
本站网友 王老菊
5分钟前 发表
'deploy-to-dev'
本站网友 赌石
15分钟前 发表
指定分支 // 注意凭证需要先创建 git(url
本站网友 减肥牛奶
16分钟前 发表
kubeconfig-credential-iddeploy.yaml文件案例代码语言:yaml复制apiVersion
本站网友 王春云
17分钟前 发表
包括编码
本站网友 辜成允
1分钟前 发表
DevOps 会自动创建一个新的 Jenkins Controller 容器
本站网友 青藏铁路的意义
2分钟前 发表
v1 app.kubernetes.io/name
本站网友 快疯了
0秒前 发表
'KUBECOFIG_COFIG'
本站网友 金津玉液
9分钟前 发表
RollingUpdate rollingUpdate
本站网友 克丽缇娜美容院招聘
11分钟前 发表
会根据标签动态创建运行在 Pod 中的 Jenkins Agent 并注册到 Controller 上
本站网友 康菲石油中国有限公司
15分钟前 发表
servicemesh.kubesphere.io/enabled
本站网友 长葛房产网
11分钟前 发表
apps kind
本站网友 莫高窟第45窟
30分钟前 发表
$BRACH_AME-$BUILD_UMBER ports