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

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

前提条件

流水线概述

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

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

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

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

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

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

步骤 1:创建凭证

  1. project-regular 用户登录 KubeSphere 企业版 Web 控制台。

  2. 点击企业空间管理并进入您的 DevOps 项目,在 DevOps 项目设置下的凭证页面创建以下凭证。有关如何创建凭证的更多信息,请参阅凭证管理

    说明

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

    凭证 ID 类型 用途

    dockerhub-id

    用户名和密码

    Docker Hub

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

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

步骤 2:创建流水线

  1. project-regular 用户登录 KubeSphere 企业版 Web 控制台。

  2. 点击企业空间管理并进入您的 DevOps 项目,在流水线页面点击创建

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

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

    参数类型 名称 参数说明

    字符串

    REGISTRY

    docker.io

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

    字符串

    DOCKERHUB_NAMESPACE

    您的 Docker ID

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

    字符串

    APP_NAME

    devops-sample

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

    说明

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

步骤 3:编辑流水线

  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

步骤 4:运行流水线

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

    run pipeline

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

  3. 流水线如果运行到 Push with Tag 阶段,会在此阶段暂停,需要具有审核权限的用户点击继续

  4. project-admin 用户登录 KubeSphere 企业版 Web 控制台,点击企业空间管理并进入您的 DevOps 项目,点击 graphical-pipeline 流水线。在运行记录页签下,点击要审核的记录,点击继续以批准流水线。

说明

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

步骤 5:查看流水线详情

  1. project-regular 用户登录  KubeSphere 企业版 Web 控制台,点击企业空间管理并进入您的 DevOps 项目,点击 graphical-pipeline 流水线。

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

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

步骤 6:下载制品

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

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

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

步骤 8:验证 Kubernetes 资源

如果流水线的每个阶段都成功运行,则会自动构建一个 Docker 镜像并推送至您的 Docker Hub 仓库。

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

    dockerhub image

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