×

Tekton Results 是一项服务,用于存档每个管道运行和任务运行的完整信息。您可以根据需要修剪PipelineRunTaskRun资源,并使用 Tekton Results API 或opc命令行实用程序访问它们的 YAML 清单以及日志信息。

Tekton Results 仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您提前访问即将推出的产品功能,从而使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围

Tekton Results 概念

Tekton Results 以结果和记录的形式存档管道运行和任务运行。

对于每个完成运行的PipelineRunTaskRun自定义资源 (CR),Tekton Results 都会创建一个记录

一个结果可以包含一个或多个记录。一个记录始终只属于一个结果。

结果对应于管道运行,并包括PipelineRunCR 本身以及作为管道运行的一部分启动的所有TaskRunCR 的记录。

如果直接启动任务运行(不使用管道运行),则会为该任务运行创建一个结果。此结果包含同一任务运行的记录。

每个结果都有一个名称,其中包含创建PipelineRunTaskRun CR 的命名空间和 CR 的 UUID。结果名称的格式为<namespace_name>/results/<parent_run_uuid>。在此格式中,<parent_run_uuid> 是管道运行的 UUID,或者直接启动的任务运行的 UUID。

结果名称示例
results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed

每条记录都有一个名称,其中包含包含该记录的结果的名称,以及与该记录对应的PipelineRunTaskRun CR 的 UUID。结果名称的格式为<namespace_name>/results/<parent_run_uuid>/results/<run_uuid>

记录名称示例
results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/e9c736db-5665-441f-922f-7c1d65c9d621

记录包含TaskRunPipelineRun CR 的完整 YAML 清单,其状态是在运行完成后存在的。此清单包含运行的规范、为运行指定的任何注释,以及有关运行结果的某些信息,例如完成时间和运行是否成功。

TaskRunPipelineRun CR 存在期间,可以使用以下命令查看 YAML 清单

$ oc get pipelinerun <cr_name> -o yaml

Tekton Results 在TaskRunPipelineRun CR 删除后保留此清单,并使其可供查看和搜索。

管道运行完成后其 YAML 清单示例
  kind: PipelineRun
  spec:
    params:
      - name: message
        value: five
    timeouts:
      pipeline: 1h0m0s
    pipelineRef:
      name: echo-pipeline
    taskRunTemplate:
      serviceAccountName: pipeline
  status:
    startTime: "2023-08-07T11:41:40Z"
    conditions:
      - type: Succeeded
        reason: Succeeded
        status: "True"
        message: 'Tasks Completed: 1 (Failed: 0, Cancelled 0), Skipped: 0'
        lastTransitionTime: "2023-08-07T11:41:49Z"
    pipelineSpec:
      tasks:
        - name: echo-task
          params:
            - name: message
              value: five
          taskRef:
            kind: Task
            name: echo-task-pipeline
      params:
        - name: message
          type: string
    completionTime: "2023-08-07T11:41:49Z"
    childReferences:
      - kind: TaskRun
        name: echo-pipeline-run-gmzrx-echo-task
        apiVersion: tekton.dev/v1
        pipelineTaskName: echo-task
  metadata:
    uid: 62c3b02e-f12b-416c-9771-c02af518f6d4
    name: echo-pipeline-run-gmzrx
    labels:
      tekton.dev/pipeline: echo-pipeline
    namespace: releasetest-js5tt
    finalizers:
      - chains.tekton.dev/pipelinerun
    generation: 2
    annotations:
      results.tekton.dev/log: releasetest-js5tt/results/62c3b02e-f12b-416c-9771-c02af518f6d4/logs/c1e49dd8-d641-383e-b708-e3a02b6a4378
      chains.tekton.dev/signed: "true"
      results.tekton.dev/record: releasetest-js5tt/results/62c3b02e-f12b-416c-9771-c02af518f6d4/records/62c3b02e-f12b-416c-9771-c02af518f6d4
      results.tekton.dev/result: releasetest-js5tt/results/62c3b02e-f12b-416c-9771-c02af518f6d4
    generateName: echo-pipeline-run-
    managedFields:
      - time: "2023-08-07T11:41:39Z"
        manager: kubectl-create
        fieldsV1:
          f:spec:
            .: {}
            f:params: {}
            f:pipelineRef:
              .: {}
              f:name: {}
          f:metadata:
            f:generateName: {}
        operation: Update
        apiVersion: tekton.dev/v1
        fieldsType: FieldsV1
      - time: "2023-08-07T11:41:40Z"
        manager: openshift-pipelines-controller
        fieldsV1:
          f:metadata:
            f:labels:
              .: {}
              f:tekton.dev/pipeline: {}
        operation: Update
        apiVersion: tekton.dev/v1
        fieldsType: FieldsV1
      - time: "2023-08-07T11:41:49Z"
        manager: openshift-pipelines-chains-controller
        fieldsV1:
          f:metadata:
            f:finalizers:
              .: {}
              v:"chains.tekton.dev/pipelinerun": {}
            f:annotations:
              .: {}
              f:chains.tekton.dev/signed: {}
        operation: Update
        apiVersion: tekton.dev/v1
        fieldsType: FieldsV1
      - time: "2023-08-07T11:41:49Z"
        manager: openshift-pipelines-controller
        fieldsV1:
          f:status:
            f:startTime: {}
            f:conditions: {}
            f:pipelineSpec:
              .: {}
              f:tasks: {}
              f:params: {}
            f:completionTime: {}
            f:childReferences: {}
        operation: Update
        apiVersion: tekton.dev/v1
        fieldsType: FieldsV1
        subresource: status
      - time: "2023-08-07T11:42:15Z"
        manager: openshift-pipelines-results-watcher
        fieldsV1:
          f:metadata:
            f:annotations:
              f:results.tekton.dev/log: {}
              f:results.tekton.dev/record: {}
              f:results.tekton.dev/result: {}
        operation: Update
        apiVersion: tekton.dev/v1
        fieldsType: FieldsV1
    resourceVersion: "126429"
    creationTimestamp: "2023-08-07T11:41:39Z"
    deletionTimestamp: "2023-08-07T11:42:23Z"
    deletionGracePeriodSeconds: 0
  apiVersion: tekton.dev/v1

Tekton Results 还创建了一个日志记录,其中包含作为管道运行或任务运行一部分运行的所有工具的日志信息。

您可以通过其名称访问每个结果和记录。您还可以使用通用表达式语言 (CEL) 查询通过它们包含的信息(包括 YAML 清单)搜索结果和记录。

准备安装 Tekton Results

在安装 Tekton Results 之前,您必须完成几个准备步骤。

准备包含 SSL 证书的密钥

Tekton Results 使用 HTTPS 协议提供 REST API,这需要 SSL 证书。提供包含此证书的密钥。如果您有证书颁发机构 (CA) 提供的现有证书,请使用此证书,否则请创建自签名证书。

先决条件
  • 已安装openssl 命令行实用程序。

步骤
  1. 如果您没有 CA 提供的证书,请通过输入以下命令创建自签名证书

    $ openssl req -x509 \
    -newkey rsa:4096 \
    -keyout key.pem \
    -out cert.pem \
    -days 365 \
    -nodes \
    -subj "/CN=tekton-results-api-service.openshift-pipelines.svc.cluster.local" \
    -addext "subjectAltName = DNS:tekton-results-api-service.openshift-pipelines.svc.cluster.local"

    tekton-results-api-service.openshift-pipelines.svc.cluster.local替换为您计划用于 Tekton Results API 的路由端点。

  2. 通过输入以下命令从证书创建传输安全层 (TLS) 密钥

    $ oc create secret tls -n openshift-pipelines tekton-results-tls --cert=cert.pem --key=key.pem

    如果您想使用 CA 提供的现有证书,请将cert.pem替换为包含此证书的文件名。

准备包含数据库凭据的密钥

Tekton Results 使用 PostgreSQL 数据库来存储数据。您可以将安装配置为使用与 Tekton Results 自动安装的 PostgreSQL 服务器,或者使用部署中已存在的外部 PostgreSQL 服务器。在这两种情况下,都需要提供包含数据库凭据的密钥。

步骤

完成以下步骤之一

  • 如果您不需要使用外部 PostgreSQL 服务器,请通过输入以下命令在openshift-pipelines命名空间中创建一个名为result的数据库用户的密钥,并设置一个随机密码

    $ oc create secret generic tekton-results-postgres \
      --namespace=openshift-pipelines \
      --from-literal=POSTGRES_USER=result \
      --from-literal=POSTGRES_PASSWORD=$(openssl rand -base64 20)

    在此命令和后续命令中,如果您为 OpenShift Pipelines 配置了自定义目标命名空间,请使用此命名空间的名称代替openshift-pipelines

  • 如果您想使用外部 PostgreSQL 数据库服务器来存储 Tekton Results 数据,请通过输入以下命令创建一个包含此服务器凭据的密钥

    $ oc create secret generic tekton-results-postgres \
      --namespace=openshift-pipelines \
      --from-literal=POSTGRES_USER=<user> \ (1)
      --from-literal=POSTGRES_PASSWORD=<password> (2)
    

    <user>替换为 Tekton Results 必须使用的 PostgreSQL 用户的用户名。将<password>替换为同一帐户的密码。

准备用于日志信息的存储或 LokiStack 转发

Tekton Results 使用单独的存储来存储与管道运行和任务运行相关的日志信息。您可以配置以下任何一种类型的存储

  • Red Hat OpenShift Pipelines 集群上的持久卷声明 (PVC)

  • Google Cloud Storage

  • S3 存储桶存储

或者,您可以在 OpenShift Container Platform 集群上安装 LokiStack 和 OpenShift Logging,并将日志信息转发到 LokiStack。此选项为更高的负载提供了更好的可扩展性。

在 OpenShift Pipelines 1.16 中,Tekton Results 本地存储 PVC、Google Cloud Storage 和 S3 存储桶存储中的日志信息的功能已弃用,并计划在将来的版本中删除。

无论您配置哪种类型的日志信息存储或 LokiStack 转发,都可以使用 Tekton Results 命令行界面和 API 获取日志信息。

步骤

完成以下步骤之一

  • 要使用 PVC,请完成以下步骤

    1. 创建一个名为pvc.yaml的文件,其中包含 PVC 的以下定义

        apiVersion: v1
        kind: PersistentVolumeClaim
        metadata:
          name: tekton-logs
        spec:
          accessModes:
          - ReadWriteOnce
          resources:
            requests:
              storage: 1Gi
    2. 通过输入以下命令应用定义

      $ oc apply -n openshift-pipelines -f pvc.yaml
  • 要使用 Google Cloud Storage,请完成以下步骤

    1. 使用gcloud命令创建一个应用程序凭据文件。有关在文件中提供应用程序凭据的说明,请参阅 Google Cloud 文档中的使用 gcloud CLI 提供的用户凭据

    2. 通过输入以下命令从应用程序凭据文件创建一个密钥

      $ oc create secret generic gcs-credentials \
        --from-file=$HOME/.config/gcloud/application_default_credentials.json \
        -n openshift-pipelines

      根据需要调整应用程序凭据文件的路径和文件名。

  • 要使用 S3 存储桶存储,请完成以下步骤

    1. 创建一个名为s3_secret.yaml的文件,其中包含以下内容

        apiVersion: v1
        kind: Secret
        metadata:
          name: my_custom_secret
          namespace: tekton-pipelines
        type: Opaque
        stringData:
          S3_BUCKET_NAME: bucket1 (1)
          S3_ENDPOINT: https://example.localhost.com (2)
          S3_HOSTNAME_IMMUTABLE: "false"
          S3_REGION: region-1 (3)
          S3_ACCESS_KEY_ID: "1234" (4)
          S3_SECRET_ACCESS_KEY: secret_key (5)
          S3_MULTI_PART_SIZE: "5242880"
      1 S3 存储桶的名称
      2 S3 API 端点 URL
      3 S3 区域
      4 S3 访问密钥 ID
      5 S3 密钥访问密钥
    2. 通过输入以下命令从文件创建一个密钥

      $ oc create secret generic s3-credentials \
        --from-file=s3_secret.yaml -n openshift-pipelines
  • 要配置 LokiStack 转发,请完成以下步骤

    1. 在您的 OpenShift Container Platform 集群上,使用 Loki Operator 安装 LokiStack,并安装 OpenShift Logging Operator。

    2. 根据您安装的是 OpenShift Logging 版本 6 还是版本 5,为ClusterLogForwarder自定义资源 (CR) 创建一个ClusterLogForwarder.yaml清单文件,其中包含以下 YAML 清单之一

      如果您安装了 OpenShift Logging 版本 6,则为ClusterLogForwarder CR 的 YAML 清单
      apiVersion: observability.openshift.io/v1
      kind: ClusterLogForwarder
      metadata:
        name: collector
        namespace: openshift-logging
      spec:
        inputs:
        - application:
            selector:
              matchLabels:
                app.kubernetes.io/managed-by: tekton-pipelines
          name: only-tekton
          type: application
        managementState: Managed
        outputs:
        - lokiStack:
            labelKeys:
              application:
                ignoreGlobal: true
                labelKeys:
                - log_type
                - kubernetes.namespace_name
                - openshift_cluster_id
            authentication:
              token:
                from: serviceAccount
            target:
              name: logging-loki
              namespace: openshift-logging
          name: default-lokistack
          tls:
            ca:
              configMapName: openshift-service-ca.crt
              key: service-ca.crt
          type: lokiStack
        pipelines:
        - inputRefs:
          - only-tekton
          name: default-logstore
          outputRefs:
          - default-lokistack
        serviceAccount:
          name: collector
      如果您安装了 OpenShift Logging 版本 5,则为ClusterLogForwarder CR 的 YAML 清单
      apiVersion: "logging.openshift.io/v1"
      kind: ClusterLogForwarder
      metadata:
        name: instance
        namespace: openshift-logging
      spec:
        inputs:
        - name: only-tekton
          application:
            selector:
              matchLabels:
                app.kubernetes.io/managed-by: tekton-pipelines
        pipelines:
          - name: enable-default-log-store
            inputRefs: [ only-tekton ]
            outputRefs: [ default ]
    3. 要在openshift-logging命名空间中创建ClusterLogForwarder CR,请以集群管理员用户身份使用 OpenShift CLI (oc) 登录到您的 OpenShift Container Platform 集群,然后输入以下命令

      $ oc apply -n openshift-logging ClusterLogForwarder.yaml

安装 Tekton Results

要安装 Tekton Results,您必须提供所需资源,然后创建并应用TektonResult自定义资源 (CR)。当您应用TektonResult自定义资源时,OpenShift Pipelines Operator 将安装 Results 服务。

先决条件
  • 您已使用 Operator 安装 OpenShift Pipelines。

  • 您已准备了一个包含 SSL 证书的密钥。

  • 您已准备了用于日志信息的存储。

  • 您已准备了一个包含数据库凭据的密钥。

步骤
  1. 基于以下示例创建名为result.yaml的资源定义文件。您可以根据需要调整设置。

      apiVersion: operator.tekton.dev/v1alpha1
      kind: TektonResult
      metadata:
        name: result
      spec:
        targetNamespace: openshift-pipelines
        logs_api: true
        log_level: debug
        db_port: 5432
        db_host: tekton-results-postgres-service.openshift-pipelines.svc.cluster.local
        logs_path: /logs
        logs_type: File
        logs_buffer_size: 32768
        auth_disable: true
        tls_hostname_override: tekton-results-api-service.openshift-pipelines.svc.cluster.local
        db_enable_auto_migration: true
        server_port: 8080
        prometheus_port: 9090
  2. 将日志信息的存储或转发配置添加到此文件中

    • 如果您配置了持久卷声明 (PVC),请添加以下行以提供 PVC 的名称

          logging_pvc_name: tekton-logs
    • 如果您配置了 Google Cloud Storage,请添加以下几行以提供密钥名称、凭据文件名和 Google Cloud Storage 存储桶的名称

          gcs_creds_secret_name: gcs-credentials
          gcs_creds_secret_key: application_default_credentials.json (1)
          gcs_bucket_name: bucket-name (2)
      1 提供创建密钥时使用的应用程序凭据文件的名称(不含路径)。
      2 提供 Google Cloud Storage 中存储桶的名称。Tekton Chains 使用此存储桶存储管道运行和任务运行的日志信息。
    • 如果您配置了 S3 存储桶存储,请添加以下行以提供 S3 密钥的名称

          secret_name: s3-credentials
    • 如果您配置了 LokiStack 转发,请添加以下几行以启用将日志信息转发到 LokiStack

          loki_stack_name: logging-loki (1)
          loki_stack_namespace: openshift-logging (2)
      1 LokiStack CR 的名称,通常为 logging-loki
      2 部署 LokiStack 的命名空间名称,通常为 openshift-logging
  3. 可选:如果您想使用外部 PostgreSQL 数据库服务器来存储 Tekton Results 信息,请将以下几行添加到文件中

        db_host: postgres.internal.example.com (1)
        db_port: 5432 (2)
        is_external_db: true
    1 PostgreSQL 服务器的主机名。
    2 PostgreSQL 服务器的端口。
  4. 通过输入以下命令来应用资源定义

    $ oc apply -n openshift-pipelines -f result.yaml
  5. 通过输入以下命令来公开 Tekton Results 服务 API 的路由

    $ oc create route -n openshift-pipelines \
      passthrough tekton-results-api-service \
      --service=tekton-results-api-service --port=8080

配置 Tekton Results 的保留策略

默认情况下,Tekton Results 会无限期地存储管道运行、任务运行、事件和日志。这会导致不必要的存储资源使用,并可能影响数据库性能。

您可以配置集群级别的 Tekton Results 保留策略以删除较旧的结果及其关联的记录和日志。您可以通过编辑 TektonResult 自定义资源 (CR) 来实现此目的。

先决条件
  • 您已安装 Tekton Results。

步骤
  • TektonResult CR 中,配置 Tekton Results 的保留策略,如下例所示

    Tekton Results 的保留策略示例
    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonResult
    metadata:
      name: result
    spec:
      options:
        configMaps:
          config-results-retention-policy:
            data:
              runAt: "3 5 * * 0" (1)
              maxRetention: "30" (2)
    1 以 cron 格式指定何时在数据库中运行修剪作业。此示例在每周日凌晨 5:03 运行作业。
    2 指定在数据库中保留数据的天数。此示例保留数据 30 天。

使用 opc 命令行工具查询 Tekton Results

您可以使用 opc 命令行工具查询 Tekton Results 的结果和记录。要安装 opc 命令行工具,请安装 tkn 命令行工具的软件包。有关安装此软件包的说明,请参阅 安装 tkn

您可以使用记录和结果的名称来检索其中的数据。

您可以使用通用表达式语言 (CEL) 查询搜索结果和记录。这些搜索将显示结果或记录的 UUID。您可以使用提供的示例创建常见搜索类型的查询。您还可以使用参考信息创建其他查询。

准备 opc 工具环境以查询 Tekton Results

在您可以查询 Tekton Results 之前,必须为 opc 工具准备环境。

先决条件
  • 您已安装 Tekton Results。

  • 您已安装 opc 工具。

步骤
  1. 通过输入以下命令将 RESULTS_API 环境变量设置为 Tekton Results API 的路由

    $ export RESULTS_API=$(oc get route tekton-results-api-service -n openshift-pipelines --no-headers -o custom-columns=":spec.host"):443
  2. 通过输入以下命令为 Tekton Results API 创建身份验证令牌

    $ oc create token <service_account>

    保存此命令输出的字符串。

  3. 可选:创建 ~/.config/tkn/results.yaml 文件以使用 Tekton Results API 自动进行身份验证。该文件必须具有以下内容

    address: <tekton_results_route> (1)
    token: <authentication_token> (2)
    ssl:
       roots_file_path: /home/example/cert.pem (3)
       server_name_override: tekton-results-api-service.openshift-pipelines.svc.cluster.local (4)
     service_account:
       namespace: service_acc_1 (5)
       name: service_acc_1 (5)
    1 Tekton Results API 的路由。使用与您为 RESULTS_API 设置的值相同的值。
    2 oc create token 命令创建的身份验证令牌。如果您提供此令牌,它将覆盖 service_account 设置,并且 opc 将使用此令牌进行身份验证。
    3 包含您为 API 端点配置的 SSL 证书的文件的位置。
    4 如果您为 OpenShift Pipelines 配置了自定义目标命名空间,请将 openshift-pipelines 替换为此命名空间的名称。
    5 用于使用 Tekton Results API 进行身份验证的服务帐户的名称。如果您提供了身份验证令牌,则无需提供 service_account 参数。

    或者,如果您不创建 ~/.config/tkn/results.yaml 文件,则可以通过使用 --authtoken 选项将令牌传递到每个 opc 命令。

按名称查询结果和记录

您可以使用名称列出和查询结果和记录。

先决条件
  • 您已安装 Tekton Results。

  • 您已安装 opc 工具并准备了其环境以查询 Tekton Results。

  • 您已安装 jq 软件包。

步骤
  1. 列出与在命名空间中创建的管道运行和任务运行相对应的所有结果的名称。输入以下命令

    $ opc results list --addr ${RESULTS_API} <namespace_name>
    命令示例
    $ opc results list --addr ${RESULTS_API} results-testing
    输出示例
    Name                                                          Start                                   Update
    results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed  2023-06-29 02:49:53 +0530 IST           2023-06-29 02:50:05 +0530 IST
    results-testing/results/ad7eb937-90cc-4510-8380-defe51ad793f  2023-06-29 02:49:38 +0530 IST           2023-06-29 02:50:06 +0530 IST
    results-testing/results/d064ce6e-d851-4b4e-8db4-7605a23671e4  2023-06-29 02:49:45 +0530 IST           2023-06-29 02:49:56 +0530 IST
  2. 通过输入以下命令列出结果中所有记录的名称

    $ opc results records list --addr ${RESULTS_API} <result_name>
    命令示例
    $ opc results records list --addr ${RESULTS_API} results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed
    输出示例
    Name                                                                                                   Type                                    Start                                   Update
    results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/e9c736db-5665-441f-922f-7c1d65c9d621  tekton.dev/v1.TaskRun              2023-06-29 02:49:53 +0530 IST           2023-06-29 02:49:57 +0530 IST
    results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/5de23a76-a12b-3a72-8a6a-4f15a3110a3e  results.tekton.dev/v1alpha2.Log         2023-06-29 02:49:57 +0530 IST           2023-06-29 02:49:57 +0530 IST
    results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/57ce92f9-9bf8-3a0a-aefb-dc20c3e2862d  results.tekton.dev/v1alpha2.Log         2023-06-29 02:50:05 +0530 IST           2023-06-29 02:50:05 +0530 IST
    results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/e9a0c21a-f826-42ab-a9d7-a03bcefed4fd  tekton.dev/v1.TaskRun              2023-06-29 02:49:57 +0530 IST           2023-06-29 02:50:05 +0530 IST
    results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/04e2fbf2-8653-405f-bc42-a262bcf02bed  tekton.dev/v1.PipelineRun          2023-06-29 02:49:53 +0530 IST           2023-06-29 02:50:05 +0530 IST
    results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/e6eea2f9-ec80-388c-9982-74a018a548e4  results.tekton.dev/v1alpha2.Log         2023-06-29 02:50:05 +0530 IST           2023-06-29 02:50:05 +0530 IST
  3. 通过输入以下命令从记录中检索管道运行或任务运行的 YAML 清单

    $ opc results records get --addr ${RESULTS_API} <record_name> \
      | jq -r .data.value | base64 -d | \
      xargs -0 python3 -c 'import sys, yaml, json; j=json.loads(sys.argv[1]); print(yaml.safe_dump(j))'
    命令示例
    $ opc results records get --addr ${RESULTS_API} \
      results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/e9c736db-5665-441f-922f-7c1d65c9d621 | \
      jq -r .data.value | base64 -d | \
      xargs -0 python3 -c 'import sys, yaml, json; j=json.loads(sys.argv[1]); print(yaml.safe_dump(j))'
  4. 可选:使用日志记录名称从记录中检索任务运行的日志信息。要获取日志记录名称,请将记录名称中的 records 替换为 logs。输入以下命令

    $ opc results logs get --addr ${RESULTS_API} <log_record_name> | jq -r .data | base64 -d
    命令示例
    $ opc results logs get --addr ${RESULTS_API} \
      results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/logs/e9c736db-5665-441f-922f-7c1d65c9d621 | \
      jq -r .data | base64 -d

搜索结果

您可以使用通用表达式语言 (CEL) 查询搜索结果。例如,您可以查找未成功的管道运行的结果。但是,大多数相关信息不包含在结果对象中;要按名称、完成时间和其他数据进行搜索,请搜索记录。

先决条件
  • 您已安装 Tekton Results。

  • 您已安装 opc 工具并准备了其环境以查询 Tekton Results。

步骤
  • 通过输入以下命令使用 CEL 查询搜索结果

    $ opc results list --addr ${RESULTS_API} --filter="<cel_query>" <namespace-name>

<namespace_name> 替换为创建管道运行或任务运行的命名空间。

表 1. 结果的 CEL 查询示例
目的 CEL 查询

所有失败运行的结果

!(summary.status == SUCCESS)

包含注释 ann1ann2 的所有管道运行的结果

summary.annotations.contains('ann1') && summary.annotations.contains('ann2') && summary.type=='PIPELINE_RUN'

搜索记录

您可以使用通用表达式语言 (CEL) 查询搜索记录。由于每个记录都包含管道运行或任务运行的完整 YAML 信息,因此您可以根据许多不同的条件查找记录。

先决条件
  • 您已安装 Tekton Results。

  • 您已安装 opc 工具并准备了其环境以查询 Tekton Results。

步骤
  • 通过输入以下命令使用 CEL 查询搜索记录

    $ opc results records list --addr ${RESULTS_API} --filter="<cel_query>" <namespace_name>/result/-

    <namespace_name> 替换为创建管道运行或任务运行的命名空间。或者,通过输入以下命令在一个结果中搜索记录

    $ opc results records list --addr ${RESULTS_API} --filter="<cel_query>" <result_name>

    <result_name> 替换为结果的全名。

表 2. 记录的 CEL 查询示例
目的 CEL 查询

所有失败的任务运行或流水线运行记录

!(data.status.conditions[0].status == 'True')

TaskRunPipelineRun 自定义资源 (CR) 的名称为 run1 的记录

data.metadata.name == 'run1'

所有由名为 run1PipelineRun CR 启动的任务运行记录

data_type == 'TASK_RUN' && data.metadata.labels['tekton.dev/pipelineRun'] == 'run1'

所有由名为 pipeline1Pipeline CR 创建的流水线运行和任务运行记录

data.metadata.labels['tekton.dev/pipeline'] == 'pipeline1'

所有由名为 pipeline1Pipeline CR 创建的流水线运行记录

data.metadata.labels['tekton.dev/pipeline'] == 'pipeline1' && data_type == 'PIPELINE_RUN'

所有TaskRun CR 名称以 hello 开头的任务运行记录

data.metadata.name.startsWith('hello') && data_type=='TASK_RUN'

所有完成时间超过五分钟的流水线运行记录

data.status.completionTime - data.status.startTime > duration('5m') && data_type == 'PIPELINE_RUN'

2023年10月7日完成的所有流水线运行和任务运行记录

data.status.completionTime.getDate() == 7 && data.status.completionTime.getMonth() == 10 && data.status.completionTime.getFullYear() == 2023

包含三个或更多任务的所有流水线运行记录

size(data.status.pipelineSpec.tasks) >= 3 && data_type == 'PIPELINE_RUN'

包含包含 ann1 的注释的所有流水线运行记录

data.metadata.annotations.contains('ann1') && data_type == 'PIPELINE_RUN'

包含包含 ann1 的注释并且 PipelineRun CR 名称以 hello 开头的所有流水线运行记录

data.metadata.annotations.contains('ann1') && data.metadata.name.startsWith('hello') && data_type == 'PIPELINE_RUN'

搜索结果的参考信息

您可以在结果的通用表达式语言 (CEL) 查询中使用以下字段

表 3. 可用于结果 CEL 查询的字段
CEL 字段 描述

parent

创建 PipelineRunTaskRun 自定义资源 (CR) 的命名空间。

uid

结果的唯一标识符。

annotations

添加到 PipelineRunTaskRun CR 的注释。

summary

结果的摘要。

create_time

结果的创建时间。

update_time

结果的最后更新时间。

您可以使用 summary.status 字段来确定流水线运行是否成功。此字段可以具有以下值:

  • UNKNOWN

  • SUCCESS

  • FAILURE

  • TIMEOUT

  • CANCELLED

不要使用引号字符,例如 "' 来为此字段提供值。

搜索记录的参考信息

您可以在记录的通用表达式语言 (CEL) 查询中使用以下字段

表 4. 可用于记录 CEL 查询的字段
CEL 字段 描述

name

记录名称

data_type

记录类型标识符

tekton.dev/v1.TaskRunTASK_RUN tekton.dev/v1.PipelineRunPIPELINE_RUN results.tekton.dev/v1alpha2.Log

data

任务运行或流水线运行的 YAML 数据。在日志记录中,此字段包含日志输出。

由于 data 字段包含任务运行或流水线运行的完整 YAML 数据,因此您可以在 CEL 查询中使用此数据的全部元素。例如,data.status.completionTime 包含任务运行或流水线运行的完成时间。