基于Kubesphere实现DevOps

这篇具有很好参考价值的文章主要介绍了基于Kubesphere实现DevOps。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于Kubesphere实现DevOps

一、DevOps介绍

1.1 项目开发需要考虑的维度

  • dev 怎么开发

  • ops 怎么运维

参考项目链接:https://github.com/kubesphere/devops-maven-sample

1.2 DevOps是什么

基于Kubesphere实现DevOps

二、CI/CD介绍

基于Kubesphere实现DevOps

2.1 持续集成(Continuous Integration)

持续集成是指软件个人的部分向软件整体部分交付,频繁进行集成以便更快地发现其中错误。

CI需要具备这些:

  • 全面的自动化测试

这是实践持续集成&持续部署的基础,同时,选择合适的自动化测试工具也很重要

  • 灵活的基础设施

容器、虚拟机的存在让开发人员和QA人员不必再大费周张去做IT基础设施环境的准备

  • 版本控制工具

如:Git、SVN、Gitlab等

  • 自动化的构建和软件发布流程工具

如:Jenkins Gitlab Tekton等

  • 反馈机制

如果构建/测试失败,可以快速地反馈到相关负责人,以尽快速度解决问题,实现软件开发稳定版本推出。

2.2 持续交付(Continuous Delivery )

持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的类生产环境中,持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。

  • 快速发布

能够应对业务需求,并更快地实现软件价值,实现编码、测试、上线、交付的频繁迭代周期缩短,同时获得迅速反馈

  • 高质量软件发布标准

整个交付过程标准化、可重复、可靠

  • 整个交付过程进度可视化

方便团队成员了解项目成熟度

  • 更先进的团队协作方式

从需求分析、产品的用户体验到交互设计、开发、测试、运维等角色密切协作,相比于传统的的开发模式,减少浪费

2.3 持续部署(Continuous Deployment)

持续部署是指当交付的代码通过评审之后,自动部署到生产环境中。

持续部署是持续交付的最高阶段。这就意味着,所有通过了一系列的自动化测试的发动都将自动部署到生产环境。它也可以被称为Continuous Release

持续部署主要好处是,可以相对独立地部署新的功能,并能快速地收集真实用户的反馈。

基于Kubesphere实现DevOps

三、KubeSphere DevOps凭证管理

3.1 凭证介绍

凭证是包含敏感信息的对象,例如用户名和密码、SSH 密钥和令牌 (Token)。当 KubeSphere DevOps 流水线运行时,会与外部环境中的对象进行交互,以执行一系列任务,包括拉取代码、推送和拉取镜像以及运行脚本等。此过程中需要提供相应的凭证,而这些凭证不会明文出现在流水线中。

具有必要权限的 DevOps 项目用户可以为 Jenkins 流水线配置凭证。用户在 DevOps 项目中添加或配置这些凭证后,便可以在 DevOps 项目中使用这些凭证与第三方应用程序进行交互。

目前,您可以在 DevOps 项目中创建以下 4 种类型的凭证:

  • 用户名和密码:用户名和密码,可以作为单独的组件处理,或者作为用冒号分隔的字符串(格式为 username:password)处理,例如 GitHub、GitLab 和 Docker Hub 的帐户。
  • SSH 密钥:带有私钥的用户名,SSH 公钥/私钥对。
  • 访问令牌:具有访问权限的令牌。
  • kubeconfig:用于配置跨集群认证。如果选择此类型,将自动获取当前 Kubernetes 集群的 kubeconfig 文件内容,并自动填充在当前页面对话框中。

本教程演示如何在 DevOps 项目中创建和管理凭证。有关如何使用凭证的更多信息,请参见使用 Jenkinsfile 创建流水线和使用图形编辑面板创建流水线。

3.2 准备工作

  • 您已启用 KubeSphere DevOps 系统。
  • 您需要有一个企业空间、一个 DevOps 项目和一个用户 (project-regular),并已邀请此帐户至 DevOps 项目中且授予 operator 角色。如果尚未准备好,请参见创建企业空间、项目、用户和角色。

3.3 创建凭证

project-regular 身份登录 KubeSphere 控制台。进入您的 DevOps 项目,选择凭证,然后点击创建

3.3.1 创建 Docker Hub 凭证

  1. 在弹出的对话框中输入以下信息。
    • 名称:设置可以在流水线中使用的 ID,例如 dockerhub-id
    • 类型:选择用户名和密码
    • 用户名:您的 Docker Hub 帐户(即 Docker ID)。
    • 密码/令牌:您的 Docker Hub 密码。
    • 描述信息:凭证的简介。
  2. 完成操作后点击确定
    基于Kubesphere实现DevOps基于Kubesphere实现DevOps
    基于Kubesphere实现DevOps

3.3.2 创建 GitHub 凭证

同样地,按照上述相同步骤创建 GitHub 凭证。设置不同的名称(例如 github-id),类型同样选择用户名和密码。分别在用户名密码/令牌中输入您的 GitHub 用户名和令牌。

  • 自 2021 年 8 月起,GitHub 要求使用基于令牌的身份验证,此处需要输入令牌,而非 GitHub 密码。关于如如何生成令牌,请参阅创建个人访问令牌。
  • 如果您的帐户或密码中包含任何特殊字符,例如 @$,可能会因为无法识别而在流水线运行时导致错误。在这种情况下,您需要先在一些第三方网站(例如 urlencoder)上对帐户或密码进行编码,然后将输出结果复制粘贴作为您的凭证信息。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

3.3.3 创建 kubeconfig 凭证

同样地,按照上述相同步骤创建 kubeconfig 凭证。设置不同的凭证 ID(例如 demo-kubeconfig)并选择 kubeconfig

用于配置集群访问的文件称为 kubeconfig 文件。这是引用配置文件的通用方法。有关更多信息,请参见 Kubernetes 官方文档。您可以创建 kubeconfig 凭证来访问当前 Kubernetes 集群,该凭证将在流水线中使用。您不需要更改该文件,因为 KubeSphere 会自动使用当前 Kubernetes 集群的 kubeconfig 填充该字段。访问其他集群时,您可能需要更改 kubeconfig。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

3.3.4 查看和管理凭证

  1. 凭证创建后,会在列表中显示。
  2. 点击任意一个凭证,进入其详情页面,您可以查看帐户详情和与此凭证相关的所有事件。
  3. 您也可以在此页面上编辑或删除凭证。请注意,编辑凭证时,KubeSphere 不会显示现有用户名或密码信息。如果输入新的用户名和密码,则前一个将被覆盖。

四、将SonarQube集成到流水线

SonarQube 是一种主流的代码质量持续检测工具。您可以将其用于代码库的静态和动态分析。SonarQube 集成到 KubeSphere 流水线后,如果在运行的流水线中检测到问题,您可以直接在仪表板上查看常见代码问题,例如 Bug 和漏洞。

4.1 准备工作

您需要启用 KubeSphere DevOps 系统。

4.2 安装 SonarQube 服务器

要将 SonarQube 集成到您的流水线,必须先安装 SonarQube 服务器。
master节点

1.请先安装 Helm,以便后续使用该工具安装 SonarQube。例如,运行以下命令安装 Helm 3:

# curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

2.查看helm版本

# helm version

version.BuildInfo{Version:"v3.10.1", GitCommit:"9f88ccb6aee40b9a0535fcc7efea6055e1ef72c9", GitTreeState:"clean", GoVersion:"go1.18.7"}

3.执行以下命令安装 SonarQube 服务器

# helm upgrade --install sonarqube sonarqube --repo https://charts.kubesphere.io/main -n kubesphere-devops-system  --create-namespace --set service.type=NodePort

4.您会获取以下提示内容

[root@k8s-master01 ~]# kubectl get svc -n kubesphere-devops-system
NAME                            TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
devops-apiserver                ClusterIP   10.96.2.56    <none>        9090/TCP         5d16h
devops-jenkins                  NodePort    10.96.1.111   <none>        80:30180/TCP     5d16h
devops-jenkins-agent            ClusterIP   10.96.2.94    <none>        50000/TCP        5d16h
s2ioperator-metrics-service     ClusterIP   10.96.2.41    <none>        8080/TCP         5d16h
s2ioperator-trigger-service     ClusterIP   10.96.2.217   <none>        8081/TCP         5d16h
sonarqube-postgresql            ClusterIP   10.96.2.172   <none>        5432/TCP         3m38s
sonarqube-postgresql-headless   ClusterIP   None          <none>        5432/TCP         3m38s
sonarqube-sonarqube             NodePort    10.96.0.120   <none>        9000:30058/TCP   3m38s
webhook-server-service          ClusterIP   10.96.3.74    <none>        443/TCP          5d16h

4.3 获取 SonarQube 控制台地址

1.执行以下命令以获取 SonarQube NodePort

# export NODE_PORT=$(kubectl get --namespace kubesphere-devops-system -o jsonpath="{.spec.ports[0].nodePort}" services sonarqube-sonarqube)
# export NODE_IP=$(kubectl get nodes --namespace kubesphere-devops-system -o jsonpath="{.items[0].status.addresses[0].address}")
# echo http://$NODE_IP:$NODE_PORT

2.您可以获得如下输出(本示例中端口号为 30058,可能与您的端口号不同)

http://192.168.10.141:30058

4.4 配置 SonarQube 服务器

4.4.1 访问 SonarQube 控制台

1.执行以下命令查看 SonarQube 的状态。请注意,只有在 SonarQube 启动并运行后才能访问 SonarQube 控制台。

[root@k8s-master01 ~]# kubectl get pods -n kubesphere-devops-system
NAME                                  READY   STATUS      RESTARTS         AGE
sonarqube-postgresql-0                1/1     Running     0                37m
sonarqube-sonarqube-df8d79d5c-hxxbx   1/1     Running     10 (2m34s ago)   37m

2.在浏览器中访问 SonarQube 控制台 http://<Node IP>:<NodePort>

基于Kubesphere实现DevOps

3.点击右上角的 Log in,然后使用默认帐户 admin/admin 登录。

取决于您的实例的部署位置,您可能需要设置必要的端口转发规则,并在您的安全组中放行该端口,以便访问 SonarQube。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

4.4.2 创建 SonarQube 管理员令牌 (Token)

1.点击右上角字母 A,然后从菜单中选择 My Account 以转到 Profile 页面。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

2.点击 Security 并输入令牌名称,例如 kubesphere

基于Kubesphere实现DevOps

3.点击 Generate 并复制此令牌。

基于Kubesphere实现DevOps

c3ee79a4c4b25bd03867db735dc439e3bb726426

如提示所示,您无法再次查看此令牌,因此请确保复制成功。

4.4.3 创建 Webhook 服务器

1.执行以下命令获取 SonarQube Webhook 的地址

# export NODE_PORT=$(kubectl get --namespace kubesphere-devops-system -o jsonpath="{.spec.ports[0].nodePort}" services devops-jenkins)
# export NODE_IP=$(kubectl get nodes --namespace kubesphere-devops-system -o jsonpath="{.items[0].status.addresses[0].address}")
# echo http://$NODE_IP:$NODE_PORT/sonarqube-webhook/

2.输出结果

http://192.168.10.141:30180/sonarqube-webhook/

3.依次点击 AdministrationConfigurationWebhooks 创建一个 Webhook

基于Kubesphere实现DevOps

4.点击 Create

基于Kubesphere实现DevOps

5.在弹出的对话框中输入 NameJenkins Console URL(即 SonarQube Webhook 地址)。点击 Create 完成操作。

基于Kubesphere实现DevOps
基于Kubesphere实现DevOps

4.4.4 将 SonarQube 配置添加到 ks-installer

1.执行以下命令编辑 ks-installer

# kubectl edit cc -n kubesphere-system ks-installer

2.搜寻至 devops。添加字段 sonarqube 并在其下方指定 externalSonarUrlexternalSonarToken

devops:
    enabled: true
    jenkinsJavaOpts_MaxRAM: 2g
    jenkinsJavaOpts_Xms: 512m
    jenkinsJavaOpts_Xmx: 512m
    jenkinsMemoryLim: 2Gi
    jenkinsMemoryReq: 1500Mi
    jenkinsVolumeSize: 8Gi
    sonarqube:
      externalSonarUrl: http://192.168.10.141:30058
      externalSonarToken: c3ee79a4c4b25bd03867db735dc439e3bb726426

3.完成操作后保存此文件

4.4.5 将 SonarQube 服务器添加至 Jenkins

1.执行以下命令获取 Jenkins 的地址

# export NODE_PORT=$(kubectl get --namespace kubesphere-devops-system -o jsonpath="{.spec.ports[0].nodePort}" services devops-jenkins)
# export NODE_IP=$(kubectl get nodes --namespace kubesphere-devops-system -o jsonpath="{.items[0].status.addresses[0].address}")
# echo http://$NODE_IP:$NODE_PORT

2.可以获得以下输出,获取 Jenkins 的端口号

http://192.168.10.141:30180

3.请使用地址 http://<Node IP>:30180 访问 Jenkins。安装 KubeSphere 时,默认情况下也会安装 Jenkins 仪表板。此外,Jenkins 还配置有 KubeSphere LDAP,这意味着您可以直接使用 KubeSphere 帐户(例如 admin/P@88w0rd)登录 Jenkins。有关配置 Jenkins 的更多信息,请参见 Jenkins 系统设置。

取决于您的实例的部署位置,您可能需要设置必要的端口转发规则,并在您的安全组中放行端口 30180,以便访问 Jenkins。

基于Kubesphere实现DevOps

4.可以前往系统管理下的 Manage Credentials 并点击 Stores scoped to Jenkins 下的 Jenkins,再点击全局凭据 (unrestricted),然后点击左侧导航栏的添加凭据,参考上方第二张截图用 SonarQube 管理员令牌添加凭证。添加凭证后,从 Server authentication token 旁边的下拉列表中选择该凭证。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

secret处填写sonarqube token

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

5.点击左侧导航栏中的系统管理

基于Kubesphere实现DevOps

6.向下翻页找到并点击系统配置

基于Kubesphere实现DevOps

6.搜寻到SonarQube Server,然后点击Add SonarQube

基于Kubesphere实现DevOps

7.输入 NameServer URL (http://<Node IP>:<NodePort>)。点击添加,选择 Jenkins,然后在弹出的对话框中用 SonarQube 管理员令牌创建凭证(如下方第二张截图所示)。创建凭证后,从 Server authentication token 旁边的下拉列表中选择该凭证。点击应用完成操作。

基于Kubesphere实现DevOps

4.4.6 将 sonarqubeURL 添加到 KubeSphere 控制台

您需要指定 sonarqubeURL,以便可以直接从 KubeSphere 控制台访问 SonarQube

1.执行以下命令

# kubectl edit  cm -n kubesphere-system  ks-console-config

2.搜寻到 data.client.enableKubeConfig,在下方添加 devops 字段并指定 sonarqubeURL

apiVersion: v1
data:
  local_config.yaml: |
    server:
      http:
        hostname: localhost
        port: 8000
        static:
          production:
            /public: server/public
            /assets: dist/assets
            /dist: dist
      redis:
        port: 6379
        host: redis.kubesphere-system.svc
      redisTimeout: 5000
      sessionTimeout: 7200000
    client:
      version:
        kubesphere: v3.1.0
        kubernetes: v1.24.0
        openpitrix: v3.1.0
      enableKubeConfig: true
      devops: 手动添加
        sonarqubeURL: http://192.168.10.141:30058
    defaultClusterName: default

3.保存该文件

4.4.7 重启服务

# kubectl -n kubesphere-devops-system rollout restart deploy devops-apiserver
# kubectl -n kubesphere-system rollout restart deploy ks-console

4.4.8 为新项目创建 SonarQube Token

需要一个 SonarQube 令牌,以便您的流水线可以在运行时与 SonarQube 通信。

1.在 SonarQube 控制台上,点击 Create new project

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

4c5c650e18a80f699d5301773230773ad6e17924

2.创建令牌后,点击 Continue

基于Kubesphere实现DevOps

3.分别选择 JavaMaven

复制下图所示绿色框中的序列号,如果要在流水线中使用,则需要在凭证中添加此序列号。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

mvn sonar:sonar \
  -Dsonar.projectKey=java-demo \
  -Dsonar.host.url=http://192.168.10.141:30058 \
  -Dsonar.login=4c5c650e18a80f699d5301773230773ad6e17924

五、为 KubeSphere 流水线设置电子邮件服务器

内置 Jenkins 无法与平台通知系统共享相同的电子邮件配置。因此,您需要单独为 KubeSphere DevOps 流水线配置电子邮件服务器设置。

5.1 准备工作

  • 您需要启用 KubeSphere DevOps 系统。
  • 您需要一个具有集群管理权限的帐户。例如,您可以直接以 admin 身份登录控制台或者创建具有该权限的新角色并将该角色分配给一个用户。

5.2 设置电子邮件服务器

1.点击左上角的平台管理,然后选择集群管理

2.如果您已经启用多集群功能并已导入成员集群,那么您可以选择一个特定集群以查看其节点。如果尚未启用该功能,请直接参考下一步。

3.转到应用负载下的工作负载,然后从下拉列表中选择 kubesphere-devops-system 项目。点击 devops-jenkins 右侧的 基于Kubesphere实现DevOps 并选择编辑 YAML 以编辑其 YAML 配置文件。

基于Kubesphere实现DevOps

4.向下滚动到下图所示的需要指定的字段。完成修改后,点击确定以保存。

devops-jenkins 部署 (Deployment) 中修改电子邮件服务器后,它会重新启动。因此,DevOps 系统将在几分钟内不可用,请在适当的时候进行此类修改。

基于Kubesphere实现DevOps

环境变量名称 描述信息
EMAIL_SMTP_HOST SMTP 服务器地址
EMAIL_SMTP_PORT SMTP 服务器端口(如:25)
EMAIL_FROM_ADDR 电子邮件发件人地址
EMAIL_FROM_NAME 电子邮件发件人姓名
EMAIL_FROM_PASS 电子邮件发件人密码
EMAIL_USE_SSL 是否启用 SSL 配置

实际配置:

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

六、使用图形编辑面板创建流水线

KubeSphere 中的图形编辑面板包含用于 Jenkins 阶段 (Stage) 和步骤 (Step) 的所有必要操作。您可以直接在交互式面板上定义这些阶段和步骤,无需创建任何 Jenkinsfile。

本教程演示如何在 KubeSphere 中使用图形编辑面板创建流水线。KubeSphere 在整个过程中将根据您在编辑面板上的设置自动生成 Jenkinsfile,您无需手动创建 Jenkinsfile。待流水线成功运行,它会相应地在您的开发环境中创建一个部署 (Deployment) 和一个服务 (Service),并将镜像推送至 Docker Hub。

6.1 准备工作

  • 您需要启用 KubeSphere DevOps 系统。
  • 您需要有一个 Docker Hub 帐户。
  • 您需要创建一个企业空间、一个 DevOps 项目和一个用户 (project-regular),必须邀请该用户至 DevOps 项目中并赋予 operator 角色。如果尚未创建,请参见创建企业空间、项目、用户和角色。
  • 设置 CI 专用节点来运行流水线(可选)。有关更多信息,请参见为缓存依赖项设置 CI 节点。
  • 配置您的电子邮件服务器用于接收流水线通知(可选)。有关更多信息,请参见为 KubeSphere 流水线设置电子邮件服务器。
  • 配置 SonarQube 将代码分析纳入流水线中(可选)。有关更多信息,请参见将 SonarQube 集成到流水线。

6.2 流水线概述

本示例流水线包括以下六个阶段。

基于Kubesphere实现DevOps

  • 阶段 1:Checkout SCM:从 GitHub 仓库拉取源代码。
  • 阶段 2:单元测试:待该测试通过后才会进行下一阶段。
  • 阶段 3:代码分析:配置 SonarQube 用于静态代码分析。
  • 阶段 4:构建并推送:构建镜像并附上标签 snapshot-$BUILD_NUMBER 推送至 Docker Hub,其中 $BUILD_NUMBER 是流水线活动列表中的记录的序列号。
  • 阶段 5:制品:生成一个制品(JAR 文件包)并保存。
  • 阶段 6:部署至开发环境:在开发环境中创建一个部署和一个服务。该阶段需要进行审核,部署成功运行后,会发送电子邮件通知。

6.3 流水线设置

6.3.1 创建凭证

1.以 project-regular 身份登录 KubeSphere 控制台。转到您的 DevOps 项目,在 DevOps 项目设置下的凭证页面创建以下凭证。有关如何创建凭证的更多信息,请参见凭证管理。

如果您的帐户或密码中有任何特殊字符,例如 @$,可能会因为无法识别而在流水线运行时导致错误。在这种情况下,您需要先在一些第三方网站(例如 urlencoder)上对帐户或密码进行编码,然后将输出结果复制粘贴作为您的凭证信息。

凭证 ID 类型 用途
dockerhub-id 用户名和密码 Docker Hub
demo-kubeconfig kubeconfig Kubernetes

2.您还需要为 SonarQube 创建一个凭证 ID (sonar-token),用于上述的阶段 3(代码分析)。请参阅为新项目创建 SonarQube 令牌 (Token),在访问令牌类型的凭证的令牌字段中输入 SonarQube 令牌。点击确定完成操作。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

3.你在列表中可以看到4个凭证

6.3.2 创建项目

在本教程中,示例流水线会将 sample 应用部署至一个项目,可以查看deploy下dev yaml配置文件## 标题。因此,您必须先创建一个项目(例如 kubesphere-sample-dev)。待流水线成功运行,会在该项目中自动创建该应用的部署和服务。

您可以使用 project-admin 帐户创建项目。此外,该用户也是 CI/CD 流水线的审核员。请确保将 project-regular 帐户邀请至该项目并授予 operator 角色。有关更多信息,请参见创建企业空间、项目、用户和角色。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

6.3.3 创建流水线

1.请确保以 project-regular 身份登录 KubeSphere 控制台,转到您的 DevOps 项目。在流水线页面点击创建

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

2.在弹出的对话框中,将它命名为 graphical-pipeline,点击下一步

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

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

基于Kubesphere实现DevOps

参数类型 名称 描述信息
字符串 REGISTRY docker.io 镜像仓库地址。本示例使用 docker.io
字符串 DOCKERHUB_NAMESPACE Docker ID 您的 Docker Hub 帐户或该帐户下的组织名称。
字符串 APP_NAME devops-sample 应用名称。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

有关其他字段,请直接使用默认值或者参考流水线设置以自定义配置。

4.创建的流水线会显示在列表中

基于Kubesphere实现DevOps

6.3.4 编辑流水线

  • 点击流水线进入其详情页面。要使用图形编辑面板,请点击任务状态选项卡下的编辑流水线。在弹出的对话框中,点击自定义流水线。该流水线包括六个阶段,请按照以下步骤设置每个阶段。
  • 您也可以点击持续集成 (CI)持续集成&交付 (CI/CD) 来使用 KubeSphere 提供的内置流水线模板。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

流水线详情页面会显示同步状态,它是 KubeSphere 和 Jenkins 之间的同步结果。若同步成功,您会看到成功图标。您也可以点击编辑 Jenkinsfile 手动为流水线创建一个 Jenkinsfile。

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

图形编辑面板包括两个区域:左侧的画布和右侧的内容。它会根据您对不同阶段和步骤的配置自动生成一个 Jenkinsfile,为开发者提供更加用户友好的操作体验。

流水线包括声明式流水线和脚本化流水线。目前,您可以使用该面板创建声明式流水线。有关流水线语法的更多信息,请参见 Jenkins 文档。

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

基于Kubesphere实现DevOps

agent 用于定义执行环境。agent 指令指定 Jenkins 执行流水线的位置和方式。有关更多信息,请参见选择 Jenkins Agent。

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

基于Kubesphere实现DevOps

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

  • URL:输入 GitHub 仓库地址 https://github.com/kubesphere/devops-maven-sample.git。请注意,这里是示例地址,您需要使用您自己的仓库地址。

  • 凭证 ID:本教程中无需输入凭证 ID。

  • 分支:如果您将其留空,则默认为 master 分支。请输入 sonarqube,或者如果您不需要代码分析阶段,请将其留空。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

https://github.com/nextgomsb/devops-maven-sample.git

后续执行过程中有问题时,可以尝试修改容器基础镜像

基于Kubesphere实现DevOps

创建流水线

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

4.第一阶段设置完成

基于Kubesphere实现DevOps

6.3.4.2 阶段 2:单元测试

1.点击阶段 1 右侧的加号图标添加新的阶段,以在容器中执行单元测试。将它命名为 Unit Test

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

2.点击添加步骤,在列表中选择指定容器。将其命名为 maven 然后点击确定

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

3.点击添加嵌套步骤,在 maven 容器下添加一个嵌套步骤。在列表中选择 shell 并在命令行中输入以下命令。点击确定保存操作。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

mvn clean package

您可以在图形编辑面板上指定在给定阶段指令中执行的一系列步骤。

6.3.4.3 阶段 3:代码分析(可选)

本阶段使用 SonarQube 来测试您的代码。如果您不需要代码分析,可以跳过该阶段。

1.点击 Unit Test 阶段右侧的加号图标添加一个阶段,以在容器中进行 SonarQube 代码分析。将它命名为 Code Analysis

基于Kubesphere实现DevOps

2.在 Code Analysis 中,点击任务下的添加步骤,选择指定容器。将其命名为 maven 然后点击确定

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

3.点击 maven 容器下的添加嵌套步骤,以添加一个嵌套步骤。点击添加凭证并从凭证 ID 列表中选择 SonarQube 令牌 (sonar-token)。在文本变量中输入 SONAR_TOKEN,然后点击确定

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

4.在添加凭证步骤下,点击添加嵌套步骤为其添加一个嵌套步骤。

基于Kubesphere实现DevOps

5.点击 Sonarqube 配置,在弹出的对话框中保持默认名称 sonar 不变,点击确定保存操作

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

6.在 Sonarqube 配置步骤下,点击添加嵌套步骤为其添加一个嵌套步骤。

基于Kubesphere实现DevOps

7.点击 shell 并在命令行中输入以下命令,用于 sonarqube 分支和认证,点击确定完成操作。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

mvn sonar:sonar -Dsonar.login=$SONAR_TOKEN

8.点击指定容器步骤下的添加嵌套步骤(第三个),选择超时。在时间中输入 1 并将单位选择为小时,点击确定完成操作。
基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

9.点击超时步骤下的添加嵌套步骤,选择代码质量检查 (SonarQube)。在弹出的对话框中选择检查通过后开始后续任务。点击确定保存操作。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

6.3.4.4 阶段 4:构建并推送镜像

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

基于Kubesphere实现DevOps

2.点击任务下的添加步骤,选择指定容器,将其命名为 maven,然后点击确定

基于Kubesphere实现DevOps

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

基于Kubesphere实现DevOps

mvn -Dmaven.test.skip=true clean package

基于Kubesphere实现DevOps

4.再次点击添加嵌套步骤,选择 shell。在命令行中输入以下命令,以根据 Dockerfile 构建 Docker 镜像。点击确定确认操作。

请勿遗漏命令末尾的点 .

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

docker build -f Dockerfile-online -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER .

基于Kubesphere实现DevOps

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

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

出于安全原因,帐户信息在脚本中显示为变量。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

6.在添加凭证步骤中点击添加嵌套步骤(第一个)。选择 shell 并在弹出窗口中输入以下命令,用于登录 Docker Hub。点击确定确认操作。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

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

基于Kubesphere实现DevOps

7.在添加凭证步骤中点击添加嵌套步骤。选择 shell 并输入以下命令,将 SNAPSHOT 镜像推送至 Docker Hub。点击确定完成操作。

基于Kubesphere实现DevOps

docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

6.3.4.5 阶段 5:生成制品

1.点击 Build and Push 阶段右侧的加号图标添加一个新的阶段,以保存制品,将其命名为 Artifacts。本示例使用 JAR 文件包。

基于Kubesphere实现DevOps

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

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

target/*.jar

基于Kubesphere实现DevOps

6.3.4.6 阶段 6:部署至开发环境

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

基于Kubesphere实现DevOps

2.点击 Deploy to Dev 阶段下的添加步骤,在列表中选择审核,然后在消息字段中填入 @project-admin,即 project-admin 帐户在流水线运行到该阶段时会进行审核。点击确定保存操作。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

在 KubeSphere 3.2.x 中,能够运行流水线的帐户也能够继续或终止该流水线。此外,流水线创建者、拥有该项目管理员角色的用户或者您指定的帐户也有权限继续或终止流水线。

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

基于Kubesphere实现DevOps

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

  • 凭证名称:选择您创建的 kubeconfig 凭证,例如 demo-kubeconfig
  • kubeconfig 变量:输入 KUBECONFIG_CONTENT
    基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

5.点击添加凭证步骤下的添加嵌套步骤。在列表中选择 shell,在弹出的对话框中输入以下命令,然后点击确定

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

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 -

基于Kubesphere实现DevOps

6.如果您想在流水线成功运行时接收电子邮件通知,请点击添加步骤,选择邮件,以添加电子邮件信息。请注意,配置电子邮件服务器是可选操作,如果您跳过该步骤,依然可以运行流水线。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

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

流水线页面,您可以点击该流水线右侧的 基于Kubesphere实现DevOps,然后选择复制来创建该流水线的副本。如果您需要同时运行多个不包含多分支的流水线,您可以全部选中这些流水线,然后点击运行来批量运行它们。

6.4 运行流水线

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

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

2.要查看流水线的状态,请转到运行记录选项卡,点击您想查看的记录。

基于Kubesphere实现DevOps

3.稍等片刻,流水线如果成功运行,则会在 Deploy to Dev 阶段停止。project-admin 作为流水线的审核员,需要进行审批,然后资源才会部署至开发环境。

6.5 下载制品

点击制品选项卡,然后点击右侧的图标下载该制品。

基于Kubesphere实现DevOps

6.6 查看代码分析结果

代码检查页面,可以查看由 SonarQube 提供的本示例流水线的代码分析结果。如果您没有事先配置 SonarQube,则该部分不可用。有关更多信息,请参见将 SonarQube 集成到流水线。

基于Kubesphere实现DevOps

6.7 验证 Kubernetes 资源

1.如果流水线的每个阶段都成功运行,则会自动构建一个 Docker 镜像并推送至您的 Docker Hub 仓库。最终,流水线将在您事先设置的项目中自动创建一个部署和一个服务。

2.前往该项目(本教程中即 kubesphere-sample-dev),请点击应用负载下的工作负载,您可以看到列表中显示的部署。

3.在服务页面,您可以看到示例服务通过 NodePort 暴露其端口号。要访问服务,请访问 <Node IP>:<NodePort>

访问服务前,您可能需要配置端口转发规则并在安全组中放行该端口。

4.现在流水线已成功运行,将会推送一个镜像至 Docker Hub。登录 Docker Hub 查看结果。

基于Kubesphere实现DevOps

5.该应用的名称为 devops-sample,即 APP_NAME 的值,标签即 SNAPSHOT-$BUILD_NUMBER 的值。$BUILD_NUMBER运行记录选项卡列示的记录的序列号。

6.如果您在最后一个阶段设置了电子邮件服务器并添加了电子邮件通知的步骤,您还会收到电子邮件消息。

七、配置流水线把项目发布到生产环境

基于Kubesphere实现DevOps

7.1 创建GitHub tekens

如需创建 GitHub 个人访问令牌,请转到您 GitHub 帐户的 Settings,点击 Developer settings,选择 Personal access tokens,然后点击 Generate new token

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

以project-regular用户登录后创建github访问凭证

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

7.2 GitHub创建代码仓库

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

7.3 创建项目

使用project-admin用户登录WEB控制器,创建kubesphere-sample-prod项目,并邀请project-regular用户成为项目成员,并为operator角色。

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

7.4 为发布到生产环境准备TAG_NAME变量

使用project-regular用户登录,并编辑graphical-pipeline,添加TAG_NAME,值为v0.0.1

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

7.5 阶段7: 提交镜像和代码至仓库(push with tag)

7.5.1 添加条件

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

scriptBlock   return params.TAG_NAME =~ /v.*/

基于Kubesphere实现DevOps

7.5.2 添加步骤

基于Kubesphere实现DevOps

7.5.2.1 添加审核

基于Kubesphere实现DevOps

7.5.2.2 添加凭证

基于Kubesphere实现DevOps

7.5.2.3 添加GitHub配置

基于Kubesphere实现DevOps

基于Kubesphere实现DevOps

7.5.2.4 添加DockerHub配置

基于Kubesphere实现DevOps

7.6 阶段8: 发布到生产环境(deploy to production)

7.6.1 添加条件

基于Kubesphere实现DevOps

7.6.2 添加审核

基于Kubesphere实现DevOps

7.6.3 添加步骤

基于Kubesphere实现DevOps

7.6.3.1 添加凭证

基于Kubesphere实现DevOps

7.6.3.2 添加执行步骤

基于Kubesphere实现DevOps

7.7 执行流水线

基于Kubesphere实现DevOps文章来源地址https://www.toymoban.com/news/detail-476187.html

到了这里,关于基于Kubesphere实现DevOps的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【kubernetes】使用KubeSphere devops部署我的微服务系统

    入门使用KubeSphere的Devops功能部署\\\"我的微服务系统\\\" (内容学习于尚硅谷云原生课程) kubesphere devops官方文档: https://v3-1.docs.kubesphere.io/zh/docs/devops-user-guide/how-to-use/create-a-pipeline-using-jenkinsfile/ 暂时部署这4个服务,auth服务、crm服务、gateway服务、前端ui服务 Dockerfile 前端kwspher

    2024年02月10日
    浏览(37)
  • 构建基于DevOps的架构设计与实现:

    作者:禅与计算机程序设计艺术 开发运维(DevOps)理念从提出到应用已经历了两代。传统上,开发人员在实际项目中承担着很大角色,但不具备将软件交付给最终用户使用的能力;而运维人员也只能根据项目管理、硬件维护等日常工作进行日常运营,但不能主动参与到软件开

    2024年02月07日
    浏览(26)
  • 基于jenkins+k8s实现devops

    由于jenkins运行在k8s上能够更好的利用动态agent进行构建。所以写了个部署教程,亲测无坑 1、创建ns kubectl create namespace devops 2、kubectl apply -f jenkins.yml 注意:镜像建议使用最新版本,因为jenkin平台默认提供了最新的插件,且无法选择版本,所以如果jenkins版本过低会导致插件不

    2024年02月06日
    浏览(40)
  • DevOps基于k8s发布系统的实现

    首先,本篇文章所介绍的内容,已经有完整的实现,可以参考这里。 在微服务、DevOps和云平台流行的当下,使用一个高效的持续集成工具也是一个非常重要的事情。虽然市面上目前已经存在了比较成熟的自动化构建工具,比如jekines,还有一些商业公司推出的自动化构建工具

    2023年04月09日
    浏览(44)
  • KubeSphere通过提供一站式微服务应用管理、DevOps持续集成/交付、网络策略和安全管理、日志、Tracing等功能模块,帮助企业轻松应对多样化的工作负载、异构集群环境、复杂的网络拓扑和流量控

    作者:禅与计算机程序设计艺术 2019年7月KubeSphere项目宣布启动,其目标是打造一个面向IT自动化运维领域的开源容器平台,以满足多种应用场景和运行环境需求。KubeSphere通过提供一站式微服务应用管理、DevOps持续集成/交付、网络策略和安全管理、日志、Tracing等功能模块,帮

    2024年02月07日
    浏览(48)
  • 某制造企业基于 KubeSphere 的云原生实践

    随着业务升级改造与软件产品专案的增多,常规的物理机和虚拟机方式逐渐暴露出一些问题: 大量服务部署在虚拟机上,资源预估和硬件浪费较大; 大量服务部署在虚拟机上,部署时间和难度较大,自动化程度较低; 开发人员和运维人员,由于开发和部署服务环境不同,服

    2024年02月15日
    浏览(39)
  • 东方通信基于 KubeSphere 的云计算落地经验

    作者:周峰 吴昌泰 东方通信股份有限公司(以下简称“东方通信”)创立于 1958 年,是一家集硬件设备、软件、服务为一体的整体解决方案提供商。公司于 1996 年成功改制上市,成为上海证交所同时发行 A 股和 B 股的国有控股上市公司。公司业务主要包括:专网通信及信息

    2024年02月17日
    浏览(42)
  • 某物联网数智化园区行业基于 KubeSphere 的云原生实践

    作为物联网 + 数智化园区一体化解决方案提供商,我们致力于为大中型园区、停车场提供软硬件平台,帮助园区运营者实现数字化、智能化运营。 在使用 K8s 之前我们使用传统的方式部署上线,使用 spug(一款轻量级无 Agent 的自动化运维平台) 自动化在单节点完成代码部署上

    2024年02月09日
    浏览(42)
  • 基于 KubeSphere 的开源微服务开发平台 Pig 最佳实践

    作者:何昌涛,北京北大英华科技有限公司高级 Java 工程师,云原生爱好者。 近年来,为了满足越来越复杂的业务需求,我们从传统单体架构系统升级为微服务架构,就是把一个大型应用程序分割成可以独立部署的小型服务,每个服务之间都是松耦合的,通过 RPC 或者是 Re

    2024年02月02日
    浏览(42)
  • 基于 KubeSphere 的应用容器化在智能网联汽车领域的实践

    某国家级智能网联汽车研究中心成立于 2018 年,是担当产业发展咨询与建议、共性技术研发中心、创新成果转化的国家级创新平台,旨在提高我国在智能网联汽车及相关产业在全球价值链中的地位。 目前着力建设基于大数据与云计算的智能汽车云端运营控制中心平台。推进云

    2024年02月12日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包