跳至主要內容

创建流水线


创建流水线

步骤 1:创建凭证

进入DevOps项目,在 DevOps 项目设置下的凭证页面创建以下凭证:

  • harbor-id:镜像仓库账号,用于访问和推送镜像到镜像仓库;
  • kubeconfig:用于将应用部署到kubernetes集群;
  • sonar-token:用于访问sonarqube代码分析服务;

harbor-id

img.png

kubeconfig

类型选择kubeconfig即可,会自动生成内容:

img_1.png

sonar-token

img_2.png

其中,令牌内容为在sonarqube控制台中生成的安全令牌,可以在登录sonarqube后,在我的账号-安全中生成令牌。

步骤 2:创建项目

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

img_3.png

步骤 3:创建流水线

进入 DevOps 项目,在流水线页面点击创建。

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

img_4.png

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

参数类型名称描述信息
字符串REGISTRY172.18.18.198镜像仓库地址
字符串DOCKERHUB_NAMESPACEhos镜像仓库项目名称
字符串APP_NAMEdevops-sample应用名称

img_5.png

步骤 4:编辑流水线

点击流水线进入其详情页面。要使用图形编辑面板,请点击任务状态选项卡下的编辑流水线。在弹出的对话框中,点击自定义流水线。该流水线包括六个阶段,请按照以下步骤设置每个阶段。

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

图形编辑面板包括两个区域:左侧的画布和右侧的内容。它会根据您对不同阶段和步骤的配置自动生成一个 Jenkinsfile(流水线语法参考:Jenkins文档)。

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

img_6.png

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

img_7.png

  1. 点击添加步骤。在列表中选择 git,以从 GitHub 拉取示例代码。在弹出的对话框中,填写必需的字段。点击确定完成操作。
  • URL:输入 GitHub 仓库地址 https://github.com/kubesphere/devops-maven-sample.git。请注意,这里是示例地址,实际需要使用自己项目的仓库地址。
  • 凭证 ID:本教程中无需输入凭证 ID。
  • 分支:如果您将其留空,则默认为 master 分支。请输入 sonarqube,后续需要配置代码分析阶段。

img_8.png

  1. 第一阶段设置完成:

img_9.png

阶段 2:单元测试

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

img_10.png

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

img_11.png

  1. 点击添加嵌套步骤,在 maven 容器下添加一个嵌套步骤。在列表中选择 shell 并在命令行中输入以下命令。点击确定保存操作。
mvn clean -gs `pwd`/configuration/settings.xml test

阶段 3:代码分析

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

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

img_12.png

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

img_13.png

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

img_14.png

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

img_15.png

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

img_16.png

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

img_17.png

  1. 点击 shell 并在命令行中输入以下命令,用于 sonarqube 分支和认证,点击确定完成操作。
mvn sonar:sonar -Dsonar.login=$SONAR_TOKEN

img_18.png

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

img_19.png

img_20.png

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

img_21.png

img_22.png

阶段 4:构建并推送镜像

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

img_23.png

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

img_24.png

  1. 点击 maven 容器下的添加嵌套步骤添加一个嵌套步骤。在列表中选择 shell 并在弹出窗口中输入以下命令,点击确定完成操作。
mvn -Dmaven.test.skip=true clean package

img_25.png

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

注意:请勿遗漏命令末尾的点.

img_26.png

  1. 再次点击添加嵌套步骤,选择添加凭证。在弹出的对话框中填写以下字段,点击确定确认操作。
  • 凭证名称:选择您创建的镜像仓库凭证,例如 harbor-id。
  • 密码变量:输入 DOCKER_PASSWORD。
  • 用户名变量:输入 DOCKER_USERNAME。

img_27.png

  1. 在添加凭证步骤中点击添加嵌套步骤(第一个)。选择 shell 并在弹出窗口中输入以下命令,用于登录 Docker Hub。点击确定确认操作。
echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin

img_28.png

  1. 在添加凭证步骤中点击添加嵌套步骤。选择 shell 并输入以下命令,将 SNAPSHOT 镜像推送至 Docker Hub。点击确定完成操作。
docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER

img_29.png

阶段 5:生成制品

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

img_30.png

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

img_31.png

阶段 6:部署至开发环境

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

img_32.png

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

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

    • 凭证名称:选择您创建的 kubeconfig,步骤1中创建的凭证名称为kubeconfig。
    • kubeconfig 变量:输入 KUBECONFIG_CONTENT。
  3. 点击添加凭证步骤下的添加嵌套步骤。在列表中选择 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. 待您完成上述步骤,请在右下角点击保存。随后,您可以看到该流水线有完整的工作流,并且每个阶段也清晰列示。当您用图形编辑面板定义流水线时,KubeSphere 会自动创建相应的 Jenkinsfile。点击编辑 Jenkinsfile 查看该 Jenkinsfile。

步骤 5:运行流水线

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

img_33.png

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

  2. 稍等片刻,流水线将完成运行。

步骤 6:查看流水线详情

  1. 进入 graphical-pipeline 流水线。在运行记录选项卡下,点击状态下标记为成功的记录。

  2. 如果所有配置都成功运行,您可以看到所有阶段都已完成。

  3. 在右上角点击查看日志,查看所有日志。点击每个阶段查看其详细日志。您可以根据日志排除故障和问题,也可以将日志下载到本地进行进一步分析。

步骤 7:下载制品

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

img_34.png

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

登录SonarQube查看代码分析结果:

img_35.png

步骤 9:验证 Kubernetes 资源

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

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

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

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