自定义 Red Hat Trusted Application Pipeline


Red Hat Trusted Application Pipeline 1.5

了解如何自定义默认软件模板和构建管道配置。

Red Hat Trusted Application Pipeline Documentation Team

摘要

本文档为集群管理员提供了自定义 RHTAP 的软件模板、构建管道和集成的说明,以更好地与您的之前环境的唯一要求保持一致。

前言

RHTAP 包含用于自动化 CI/CD 工作流的内置管道模板,但它们可能并不总是符合您的确切需求。您可能需要添加额外的安全检查,修改部署工作方式或集成 Jenkins。集群管理员可以自定义这些管道,以匹配其 on-prem 环境的唯一要求。

第 1 章 自定义示例软件模板

了解如何根据您的现场环境自定义随时可用的软件模板。作为集群管理员,您可以完全控制修改元数据和规格,以符合您的部署需求。

先决条件

在进行更改前,请确保以下内容:

  • 您已在 RHTAP 安装过程中从 tssc-sample-templates 中使用了分叉的存储库 URL。
  • 您已分叉并克隆 tssc-sample-jenkins 管道模板。
  • 您分叉的存储库最新,并与上游存储库同步。

流程

  1. 克隆 fork 的 tssc-sample-templates 存储库,然后在您首选的文本编辑器中打开它,如 Visual Studio Code。
  2. 在项目目录中查找 属性文件。此文件存储您可以自定义的默认值。打开它以编辑,并根据您的环境更新以下键值对。

    Expand
    描述

    export GITHUB_DEFAULT_HOST

    把它设置为您的 on-prem GitHub 主机完全限定域名。也就是说,没有 HTTP 协议的 URL,没有 .git 扩展。例如 github-github.apps.cluster-ljg9z.sandbox219.opentlc.com。默认为 github.com

    export GITLAB_DEFAULT_HOST

    把它设置为您的 on-prem GitLab 主机完全限定域名。也就是说,没有 HTTP 协议的 URL,没有 .git 扩展。例如 gitlab-gitlab.apps.cluster-ljg9z.sandbox219.opentlc.com。默认为 gitlab.com

    export QUAY_DEFAULT_HOST

    默认 Quay URL 对应于没有 HTTP 协议的特定 on-prem 镜像 registry URL。例如: quay-tv2pb.apps.cluster-tv2pb.sandbox1194.opentlc.com。默认的 quay 主机为 quay.io

    导出 DEFAULT_DEPLOYMENT_NAMESPACE_PREFIX

    RHTAP 中部署的命名空间前缀。默认为 rhtap-app

    注意

    如果您在 RHTAP 安装过程中修改了默认的 trusted-application-pipeline: 命名空间,请更新此项。

    导出 PIPELINE_REPO_URL

    分叉管道存储库的 URL。例如: https://github.com/redhat-appstudio/tssc-sample-pipelines

    导出 PIPELINE_REPO_BRANCH

    您要指向的已分叉管道存储库的分支。例如,main

    export GITHUB_DEFAULT_ORG

    要设置为默认的 GitHub 机构名称。

    export QUAY_DEFAULT_ORG

    要设置为默认的 Quay 组织的名称。

    图 1.1. 属性文件

  3. 在终端中运行 generate.sh 脚本。此操作调整软件模板,使用您指定的输入替换默认主机值。

    ./generate.sh
    Copy to Clipboard Toggle word wrap

    图 1.2. generate.sh 脚本

  4. 仅限 Jenkins:要自定义 Jenkins 库,请导航到 skeleton > ci > gitops-template > jenkins,并打开 Jenkinsfile将远程 URL 替换为您的已分叉存储库的 URL。例如,remote: 'https://github.com/<username>/tssc-sample-jenkins.git'。

    另外,如果您的 Jenkins 位于非本地 OpenShift 实例,并且您的 Rekor 和 TUF 服务位于不同的集群中,请更新 REKOR_HOSTTUF_MIRROR 环境变量。您可以在组件存储库的 env.sh 文件中配置 这些变量,或者将其设置为 Jenkins 中的环境变量或机密。此配置可确保您的外部 Jenkins 服务器可以与通过 RHTAP 安装的 Rekor 和 TUF 通信。如果没有此,RHTAP 可能无法在 Jenkins 管道中正确签署容器镜像。

    更新 REKOR_HOSTTUF_MIRROR 变量:

    1. 通过 skeleton > ci > gitops-template > jenkins > rhtap 以打开 env.sh 文件。

      第二个 env.sh 文件位于 skeleton > ci > source-repo > jenkins > rhtap。选出适合您需要或更新两者的那一个。

      env.sh 中,查看 REKOR_HOSTTUF_MIRROR 的默认值:

      REKOR_HOST=http://rekor-server.rhtap-tas.svc
      TUF_MIRROR=http://tuf.rhtap-tas.svc
      Copy to Clipboard Toggle word wrap
    2. .svc 替换为您的 OpenShift 集群 URL。.svc 域指的是本地集群,内部服务可以在其路由中使用 .svc 访问其他服务,但外部 Jenkins 无法访问。

      Rekor 和 TUF 服务的正确路由作为 RHTAP 的安装过程的一部分打印。如果这些数据不适用于您,请在 CLI 中运行这个命令,并在输出中选择 Rekor 和 TUF 路由:

      $ oc get routes -n rhtap-tas
      Copy to Clipboard Toggle word wrap

      一个 Rekor 服务器 URL 示例: http://rekor-server.rhtap-tas.apps.rosa.j6ufg-t3htv-ts6.z797.p3.openshiftapps.com。

    注意
  5. 仅限 RHACS: 要在 env.sh 文件中启用 RHACS 扫描,将 export DISABLE_ACS 设置为 false
  6. 提交更改并将其推送到您的存储库。这会自动更新 RHDH 中的模板。或者,您可以在 RHDH 中直接导入和刷新单个或所有自定义模板。

    1. 进入 Git 供应商上的 fork 示例模板存储库。
    2. 对于单个模板,从 templates 目录中选择 template.yaml。从浏览器地址栏中复制其 URL。例如: https://github.com/<username>/tssc-sample-templates/blob/main/templates/devfile-sample-code-with-quarkus-dance/template.yaml。否则,对于所有模板,请选择 all.yaml 并从浏览器地址栏中复制其 URL。例如: https://github.com/<username>/tssc-sample-templates/blob/main/all.yaml。
    3. 切回到 RHDH 平台。
    4. 选择 Create > Register Existing Component
    5. Select URL 字段中,粘贴在第 4b 步中复制的适当 URL。
    6. 选择 Analyze,然后选择 Import 以更新 RHDH 中的模板。

验证

  • 考虑创建应用以探索模板自定义的影响。

第 2 章 自定义示例管道

了解如何在示例模板存储库中更新 Pipeline as Code (pac) URL,并自定义示例管道存储库以匹配您的工作流。通过自定义 pac URL,机构可以根据 CI/CD 要求集成自定义管道。

先决条件

在进行更改前,请确保:

  • 您已分叉并克隆了以下软件仓库:

  • 您的已分叉的存储库是最新的,并与上游存储库同步。

自定义示例模板存储库以更新 pac URL*

流程

  1. 访问 fork 中的示例管道存储库 URL:

    1. 打开 fork 的示例管道存储库。
    2. 从地址栏中复制完整的 URL。例如: https://github.com/<username>/tssc-sample-pipelines
  2. 更新示例模板存储库中的 pac URL:

    1. 使用您的终端导航到您的本地克隆示例模板存储库。
    2. 运行以下命令,将 {fork_url} 替换为步骤 1 中复制的 URL,使用您需要的分支名称(如 main)替换 {branch_name}:
    ./scripts/update-tekton-definition {fork_url} {branch_name}
    
    # For example, .scripts/update-tekton-definition https://github.com/<username>/tssc-sample-pipelines main
    Copy to Clipboard Toggle word wrap
  3. 检查、提交和推送更改:

    1. 查看示例模板存储库中的更新文件。
    2. 使用适当的消息提交更改。
    3. 将提交的更改推送到您的已分叉的存储库。

在您的工作流中自定义示例管道存储库

示例管道存储库提供了一个基础,您可以在其上构建机构的特定 CI/CD 工作流。管道存储库示例在 pac 目录中包括几个关键的管道模板:

  • GITOPS-repo 此目录包含用于在 GitOps 仓库中验证拉取请求的管道定义。它触发位于 pipelines 目录中的 gitops-pull-request 管道,验证镜像更新是否符合机构标准。这个设置对于提升工作流至关重要,其中应用程序的部署状态通过环境按顺序进行,如从开发到暂存或从 staging 到生产环境。有关 gitops-repo 中的管道定义的更多信息,请参阅 Gitops Pipelines
  • Pipelines 此目录包含构建和验证管道的实现,这些管道由 gitops-reposource-repo 中事件处理程序引用。通过检查此目录的内容,您可以了解管道执行的特定操作,包括它们如何贡献应用程序的安全提升和部署。
  • source-repo :此目录侧重于基于 Dockerfile 的安全供应链软件构建。它包括用于克隆源的管道定义、生成和签名工件(如 .sig 用于镜像签名、.att 用于测试,以及 .sbom 用于软件 Bill of Materials),并将它们推送到用户的镜像 registry。有关 source-repo 中的管道定义的更多信息,请参阅 共享管道和任务的共享 Git 解析器模型
  • 任务 此目录包含一组可以添加或修改的任务,并与机构的需求保持一致。例如,高级 Cluster Security (ACS)任务可以使用替代的检查替换,或者完全新的任务可以集成到管道中,以增强其功能和合规性。

验证

  • 考虑创建应用程序来探索模板和管道自定义的影响。

第 3 章 自定义 GitLab 管道并重建容器镜像

在 GitLab 中自定义管道时,重建容器镜像是一个关键步骤,可确保您的更改包含在更新的工作流中。

GitLab 中的管道依赖于特定的容器镜像,如 GitLab 运行程序镜像,以执行 CI/CD 工作流中定义的任务。GitLab 运行程序镜像提供运行管道所需的必要工具、配置和脚本。如果修改管道中的任务,您必须更新并重建容器镜像,使其包含这些更改。这样可确保在触发管道时正确执行管道任务。

重建容器镜像涉及以下步骤:

  • 运行 podman 以提取现有的管道文件。
  • 根据您的要求自定义管道任务。
  • 重建容器镜像。
  • 将更新的镜像推送到容器 registry。

先决条件

在进行更改前,请确保:

  • 在您的系统上已安装了 podman
  • 您有 Quay.io 的登录凭证,用于推送更新的镜像。
  • 您已分叉并克隆了 Sample templates 存储库。
  • 您的已分叉的存储库是最新的,并与上游存储库同步。

流程

  1. 为构建资源创建一个目录。目录的位置取决于您的角色:

    • 平台工程师: 如果您要重建镜像以更新机构的默认管道,您可以在 fork tssc-sample-templates 存储库的位置创建该目录。例如,重新构建
    • 开发人员: 如果您要为自己的使用或特定项目重建镜像,请在 tssc-sample-templates 机构范围内分叉之外的位置创建一个目录以避免冲突。
    mkdir rebuild-image
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令并复制 容器镜像 URL:

    more ../tssc-sample-templates/skeleton/ci/source-repo/gitlabci/.gitlab-ci.yml
    
    # Example:
    ...
    image: registry.access.redhat.com/rhtap-task-runner/rhtap-task-runner-rhel9:1.5
    ...
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令在本地复制现有管道内容:

    podman run -v $(pwd):/pwd:z <The_url_you_copied_in_step_2> cp -r /work/rhtap /pwd 
    1
    Copy to Clipboard Toggle word wrap
    1
    此命令使用 < the_url_you_copied_in_step_2> 镜像启动容器。然后,它会将容器内的 /work/rhtap 中的管道文件复制到工作目录中($(pwd)。另外,如果您不在启用了 SELinux 的系统上(如 Fedora、RHEL、pr CentOS),请删除命令中的 :z 选项以确保兼容性。
  4. 导航到 rhtap 目录,并根据需要自定义管道任务。
  5. rebuild-image 目录中创建 Dockerfile,并添加以下内容来在容器中包含您的更改:另外,基础镜像 registry.access.redhat.com/rhtap-task-runner/rhtap-task-runner-rhel9:1.5 基于 ubi/ubi-minimal 构建,它提供轻量级通用基础镜像(UBI)。如果您需要安装其他软件和依赖项,请使用 microdnf。一个命令示例:

    FROM registry.access.redhat.com/rhtap-task-runner/rhtap-task-runner-rhel9:1.5 
    1
    
    
    #Copy the updated pipeline tasks
    
    COPY ./rhtap /work/rhtap 
    2
    
    
    # Example: Install additional software (for example, git)
    RUN microdnf -y install make 
    3
    Copy to Clipboard Toggle word wrap
    1
    使用现有的 rhtap-runner 容器作为起点。
    2
    将本地 rhtap 文件夹中的更新的管道任务复制到容器内的 /work/rhtap 目录中。
    3
    演示使用 microdnf 来安装其他软件或依赖项。
  6. 使用以下命令构建新容器镜像:

    podman build -f Dockerfile -t quay.io/<namespace>/<new_image_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    -f Dockerfile 指定用于构建容器镜像的 Dockerfile。如果 Dockerfile 没有被命名或位于其他目录中,可以使用 -f 标志明确指向 Dockerfile-T quay.io/<namespace>/<new_image_name > 为容器镜像分配一个标签(名称)以便轻松识别。
  7. 登录到 Quay.io 并推送更新的镜像:

    podman login quay.io
    
    # Enter username and password
    
    podman push quay.io/<namespace>/<new_image_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    这会将自定义容器镜像上传到 Quay.io,使它可用于 GitLab 管道。
  8. 仅限平台工程师:导航到 tssc-sample-templates > skeleton > ci > source-repo > gitlabci > .gitlab-ci.yml 文件,并将容器镜像 URL 替换为您刚才创建的镜像 URL。这使得新容器镜像成为默认值。

    image: quay.io/<namespace>/<new_image_name>
    Copy to Clipboard Toggle word wrap
  9. 仅限开发人员:为 GitLab 中的单个存储库更新容器镜像:

    1. 导航到源存储库 > .gitlab-ci.yaml,并将容器镜像 URL 替换为您刚才创建的镜像 URL。
    image: quay.io/<namespace>/<new_image_name>
    Copy to Clipboard Toggle word wrap
  10. 提交并推送更改以应用更新的管道配置。

第 4 章 将 RHTAP 配置为使用内置 Jenkins 库

默认情况下,{ProductLongName}(RHTAP)使用动态加载的 Jenkins 库。虽然动态加载提供了灵活性,但使用内置 Jenkins 库在构建期间提高了稳定性、安全性和可追溯性。将 RHTAP 配置为使用内置库而不是动态加载的库可以在测试时更好地获得 Red Hat Enterprise Contract (企业合同),并增强了构建验证。

先决条件

在进行更改前,请确保:

4.1. 在 Jenkins 中定义内置库

流程

  1. 登录 Jenkins 并前往 Manage Jenkins > System
  2. 找到 Global Trusted Pipeline Libraries 部分。
  3. 点 Add,并使用以下参数定义新库:

    1. Name: <your-library-name>
    2. 默认版本 :设置为特定分支或提交引用。例如,v1.5。
    3. 允许覆盖默认版本 :(可选)选择此选项,将用户限制为 Jenkins 库的特定版本。这样可确保用户无法选择不同的版本。
    4. 在最近的更改中包含 @Library 更改 :选择此选项以跟踪对共享库进行的修改。此功能可帮助用户了解可能会影响其构建的更改。
    5. 检索方法 :选择 Modern SCM

      1. Source Code Management 下拉列表中,选择 Git
      2. 在 Project Repository 字段中,输入 Jenkins 库 URL。例如: https://github.com/redhat-appstudio/tssc-sample-jenkins
      3. 选择 Fresh clone per build,以确保每个构建获取库的干净副本。
      4. 选择 Save

4.2. 修改 Jenkins 管道以使用内置库

流程

  1. 导航到 Jenkins CI 源存储库,例如 https://github.com/redhat-appstudio/tssc-sample-templates/blob/main/skeleton/ci/source-repo/jenkins
  2. 在编辑模式中选择 Jenkinsfile
  3. 将动态库加载替换为 @Library 注释。

    Expand
    替换它使用这个

    库标识符: 'RHTAP_Jenkins@main', retriever: modernSCM ([$class: 'GitSCMSource', remote: 'https://github.com/redhat-appstudio/tssc-sample-jenkins.git'])

    @Library('RHTAP_Jenkins@v1.5') _

  4. 保存并提交更新的 Jenkinsfile。

4.3. 使用配置的 Jenkins 库

流程

  1. 在 Jenkins 实例中,导航到您的项目。
  2. 选择 Build Now 以触发新构建。

验证

  1. 检查 Jenkins 构建日志,以确认是否加载了内置库,而不是动态检索依赖项。
  2. 验证企业合同现在是否反映出一个内置库。
  3. 如果发生错误,请验证库名称、检索方法和管道脚本。

4.4. 将更改应用到一个或多个 RHTAP 模板

根据您的用例,您可以将此配置应用到 Red Hat Developer Hub (RHDH)中的一个 RHTAP 模板或所有 RHTAP 模板。

  • 要将此更改应用到单个模板: 仅修改项目中使用的特定管道模板。这样可确保只有此管道使用内置的 Jenkins 库,而其他管道则继续使用动态加载。
  • 要将此更改应用到 RHDH 中的所有 RHTAP 模板: 更新全局 RHTAP 模板配置,以引用内置库而不是动态加载的库。这样可确保所有 RHTAP 管道的一致性。
重要

在全局范围内应用此更改可能会影响所有使用 RHTAP 的构建。在对所有模板进行此更改之前,请确保正确定义和测试内置库。

第 5 章 启用 Image Registry 标签页

创建应用程序时,Red Hat Developer Hub 应在组件页面中显示 Image Registry 选项卡。此选项卡提供有关存储在工件 registry 中的容器镜像的有用信息。然而,在某些情况下,标签不会显示以及此处的原因。

RHTAP 尝试通过分析 URL 来检测您的工件 registry 类型。如果 URL 包含 "quay", "jfrog" 或 "artifactory",RHTAP 会将对应的注解添加到 Git 存储库中的 catalog-info.yaml 文件中。RHDH 使用此信息来注解目录条目,然后正确显示 Image Registry 选项卡

但是,如果您的 registry URL 不包含 "quay", "jfrog" 或 "artifactory",RHTAP 无法检测您的 registry 类型并正确注解您的组件。因此,Image Registry 选项卡不会在 RHDH 中启用。

如果 RHDH UI 中缺少 Image Registry 选项卡,您可以手动启用它。您有 2 个选项:

  1. 启用单个现有组件的选项卡。
  2. 修改 registry 检测脚本,并将正确标注所有新组件。

选项 1:为现有组件启用 Image Registry 选项卡

为每个受影响的组件重复此步骤。

流程

  1. 在 Git 存储库中,导航到 skeleton > source-repo 并打开 catalog-info.yaml 文件。
  2. 添加与您的问题单相关的注解:

    metadata:
        annotations:
            'quay.io/repository-slug': `<ORGANIZATION>/<REPOSITORY>'
    Copy to Clipboard Toggle word wrap
    metadata:
        annotations:
            'jfrog-artifactory/image-name': '<IMAGE-NAME>'
    Copy to Clipboard Toggle word wrap
  3. 提交更改并推送到存储库。

RHDH 将检测您的 registry 类型并启用 Image Registry 选项卡。

验证

选择缺少 Image Registry 选项卡的 RHTAP 组件。选项卡菜单现在应当会显示。

图 5.1. 显示的镜像 Registry 选项卡

选项 2:启用所有未来组件的 Image Registry 选项卡

RHTAP 软件模板使用特定的模式来识别注册表类型 Quay 或 JFrog Artifactory。如果您的 registry 不匹配这些模式,您可以更新模板中的 catalog-info.yaml 文件,RHTAP 将自动检测到所有将来的组件的 registry 类型,并为 RHDH 正确注解它们。

先决条件

流程

  1. 在带有模板的 GitHub 存储库中,导航到 skeleton > source-repo 并打开 catalog-info.yaml 文件。
  2. 查找与 registry 检测相关的代码:

      {%- if "quay" in values.image %}
        quay.io/repository-slug: ${{ values.repoSlug }}
    
      {%- elif "jfrog" in values.image or "artifactory" in values.image %}
        jfrog-artifactory/image-name: ${{ values.imageName }}
    Copy to Clipboard Toggle word wrap
  3. 将 "quay", "jfrog" 或 "artifactory" 替换为 registry 的 URL 的一部分。

    例如,如果您的 Artifactory registry 名为 my-registry.mycompany.com,则您的镜像名称可以是 my-registry.mycompany.com/username/my-image。您可以将 my-registry.mycompany 添加到 catalog-info.yaml 中。

更新的模板将自动触发正确的注解,Image Registry 选项卡将显示在 RHDH 中。





更新于 2025-05-31

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat