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

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

前提条件

  • KubeSphere 企业版平台需要安装并启用 DevOps 扩展组件。

  • 已有一个 Docker Hub 账户。

  • 已创建一个企业空间、一个 DevOps 项目和一个用户(例如 project-regular),并已邀请该用户至 DevOps 项目且授予 operator 角色。请参阅邀请用户加入 DevOps 项目

  • 已创建一个用户(例如 project-admin),其在企业空间中具有项目创建权限。

  • 已设置 CI 专用节点用于运行流水线。请参阅为缓存依赖项设置 CI 节点

  • 配置电子邮件服务器用于接收流水线通知(可选)。 请参阅为流水线设置电子邮件服务器

  • 配置 SonarQube 将代码分析纳入流水线中(可选)。 请参阅将 SonarQube 集成到流水线

流水线概述

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

说明
  • 阶段 1:Checkout SCM:从 GitHub 仓库拉取源代码。

  • 阶段 2:单元测试:待该测试通过后才会进行下一阶段。

  • 阶段 3:代码分析(可选):配置 SonarQube 用于静态代码分析。

  • 阶段 4:构建并推送:构建镜像并附上标签 snapshot-$BUILD_NUMBER 推送至 Docker Hub,其中 $BUILD_NUMBER 是流水线运行记录列表中的记录的运行 ID。

  • 阶段 5:生成制品:生成一个制品(JAR 文件包)并保存。

  • 阶段 6:部署至开发环境:在开发环境中创建一个部署和一个服务。该阶段需要进行审核,部署成功运行后,会发送电子邮件通知。

步骤 1:创建凭证

  1. project-regular 用户登录 KubeSphere 企业版 Web 控制台并进入您的企业空间。

  2. 在左侧导航栏选择 DevOps > 凭证

  3. 在页面左上角的下拉列表中选择一个 DevOps 项目。

  4. 创建以下凭证。有关如何创建凭证的更多信息,请参阅凭证

    说明

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

    凭证 ID 类型 用途

    dockerhub-id

    用户名和密码

    Docker Hub

    demo-kubeconfig

    kubeconfig

    Kubernetes

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

  6. 创建完成后,您将在凭证页面看到已创建的凭证。

步骤 2:创建项目

本示例中,流水线会将 sample 应用部署至一个项目。因此,需要创建一个项目(例如 kubesphere-sample-dev)。待流水线成功运行,将在该项目中自动创建该应用的部署和服务。

  1. 使用 project-admin 账户创建项目,该用户也将是 CI/CD 流水线的审核员。

  2. 邀请 project-regular 账户至该项目,并授予 operator 角色。

步骤 3:创建流水线

  1. DevOps > 流水线页面点击创建

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

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

    参数类型 名称 参数说明

    字符串

    REGISTRY

    docker.io

    镜像仓库地址。本示例使用 docker.io

    字符串

    DOCKERHUB_NAMESPACE

    您的 Docker ID

    您的 Docker Hub 账户或该账户下的组织名称。

    字符串

    APP_NAME

    devops-sample

    应用名称。本示例使用 devops-sample

    说明

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

步骤 4:编辑流水线

  1. 点击流水线名称进入其详情页面。

  2. 要使用图形编辑面板,点击流水线配置页签下的编辑流水线。在弹出的对话框中:

    • 点击自定义流水线,按照以下步骤设置各个阶段。

    • 或使用 DevOps 提供的内置流水线模板

  3. 点击下一步,然后点击创建

说明

流水线详情页面的同步状态,显示了 KubeSphere 企业版和 Jenkins 之间的同步结果。也可点击编辑 Jenkinsfile 手动为流水线创建一个 Jenkinsfile。

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

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

说明

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

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

    说明

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

    graphical panel

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

    edit panel

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

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

    • 凭证 ID:本示例中无需输入凭证 ID。

    • 分支:输入 v4.1.0-sonarqube。如果不需要代码分析阶段,则使用默认的 v4.1.0 分支。

    enter repo url

阶段 2:单元测试

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

    unit test

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

    container maven

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

    mvn clean test
    说明

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

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

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

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

    code analysis stage

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

    maven container

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

    sonarqube credentials

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

    nested step

  5. 点击 Sonarqube 配置,在弹出的对话框中输入名称 sonar,点击确定保存操作。

    sonar env

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

    add nested step

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

    mvn sonar:sonar -Dsonar.login=$SONAR_TOKEN
  8. 点击指定容器步骤下的添加嵌套步骤(第三个),选择超时。在时间中输入 1 并将单位选择为小时,点击确定完成操作。

    add nested step 2

    timeout set

  9. 点击超时步骤下的添加嵌套步骤,选择运行代码质量检查 (SonarQube)。在弹出的对话框中勾选如果质量阈值状态不是绿色,则中止流水线。点击确定保存操作。

    waitforqualitygate set

    sonar ready

阶段 4:构建并推送镜像

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

  2. Build and Push 中,点击添加步骤,选择指定容器,将其命名为 maven,然后点击确定

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

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

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

    shell command

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

    • 凭证名称:选择您创建的 Docker Hub 凭证,例如 dockerhub-id

    • 用户名变量:输入 DOCKER_USERNAME

    • 密码变量:输入 DOCKER_PASSWORD

    docker credential

    说明

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

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

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

    login docker command

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

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

    push to docker

阶段 5:生成制品

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

    add artifact stage

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

    artifact info

阶段 6:部署至开发环境

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

    deploy to dev

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

    input message

    说明

    在 KubeSphere 企业版中,能够运行流水线的账户也能够继续或终止该流水线。

    此外,流水线创建者、拥有该项目管理员角色的用户或者您指定的账户也有权限继续或终止流水线。

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

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

    • 凭证名称:选择您创建的 kubeconfig 凭证,例如 demo-kubeconfig

    • kubeconfig 变量:输入 KUBECONFIG_CONTENT

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

    mkdir ~/.kube
    echo "$KUBECONFIG_CONTENT" > ~/.kube/config
    envsubst < deploy/no-branch-dev/devops-sample-svc.yaml | kubectl apply -f -
    envsubst < deploy/no-branch-dev/devops-sample.yaml | kubectl apply -f -
  6. 如果想在流水线运行成功时接收电子邮件通知,请点击添加步骤,选择邮件,以添加电子邮件信息。注意,配置电子邮件服务器是可选操作,如果跳过该步骤,依然可以运行流水线。

    说明

    有关配置电子邮件服务器的更多信息,请参阅为流水线设置电子邮件服务器

  7. 待完成上述步骤,在右下角点击确定,结束编辑流水线。该流水线将展示完整的工作流,并且清晰列示每个阶段。

    在用图形编辑面板定义流水线时,DevOps 会自动创建相应的 Jenkinsfile。点击编辑 Jenkinsfile 查看该 Jenkinsfile。

    说明

    流水线列表页面,点击该流水线右侧的more,选择复制来创建该流水线的副本。

步骤 5:运行流水线

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

    run pipeline

  2. 运行记录页签,查看流水线的运行状态,点击运行状态查看详情。

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

  4. project-admin 用户登录 KubeSphere 企业版 Web 控制台并进入您的企业空间,在 DevOps > 流水线页面,点击流水线名称进入详情页。在运行记录页签下,点击要审核的记录,点击继续以批准流水线。

说明

如果要同时运行多个不包含多分支的流水线,在流水线列表页面,全部选中这些流水线,然后点击运行来批量运行它们。

步骤 6:查看流水线详情

  1. project-regular 用户登录 KubeSphere 企业版 Web 控制台并进入您的企业空间。

  2. DevOps > 流水线页面,选择项目后,点击 graphical-pipeline 流水线。

  3. 运行记录页签下,点击状态下的记录,进入运行记录详情页。如果任务状态为成功,流水线所有阶段都会显示成功

  4. 运行日志页签下,点击每个阶段查看其详细日志。点击查看完整日志,根据日志排除故障和问题,也可以将日志下载到本地进行进一步分析。

步骤 7:下载制品

运行记录详情页,点击制品页签,然后点击制品右侧的图标下载该制品。

步骤 8:查看代码分析结果

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

步骤 9:验证 Kubernetes 资源

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

  1. 进入项目(本示例中即 kubesphere-sample-dev),点击应用负载下的工作负载,查看流水线自动创建的部署。

  2. 点击应用负载下的服务,查看示例服务通过 NodePort 暴露的端口号。使用 <Node IP>:<NodePort> 访问该服务。

    说明

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

  3. 流水线成功运行后,会推送一个镜像至 Docker Hub。登录 Docker Hub 查看结果。

    dockerhub image

  4. 该应用名称为 APP_NAME 的值,本示例中即 devops-sample。Tag 为 SNAPSHOT-$BUILD_NUMBER 的值,$BUILD_NUMBER运行记录页签下记录的运行 ID

  5. 如果您在阶段 6:部署至开发环境配置了电子邮件服务器并添加了电子邮件信息,运行完成后还会收到邮件通知。