自定义 Red Hat Trusted Application Pipeline
了解如何自定义默认软件模板和构建管道配置。
摘要
前言 复制链接链接已复制到粘贴板!
RHTAP 包含用于自动化 CI/CD 工作流的内置管道模板,但它们可能并不总是符合您的确切需求。您可能需要添加额外的安全检查,修改部署工作方式或集成 Jenkins。集群管理员可以自定义这些管道,以匹配其 on-prem 环境的唯一要求。
第 1 章 自定义示例软件模板 复制链接链接已复制到粘贴板!
了解如何根据您的现场环境自定义随时可用的软件模板。作为集群管理员,您可以完全控制修改元数据和规格,以符合您的部署需求。
先决条件
在进行更改前,请确保以下内容:
- 您已在 RHTAP 安装过程中从 tssc-sample-templates 中使用了分叉的存储库 URL。
- 您已分叉并克隆 tssc-sample-jenkins 管道模板。
- 您分叉的存储库最新,并与上游存储库同步。
流程
-
克隆 fork 的
tssc-sample-templates存储库,然后在您首选的文本编辑器中打开它,如 Visual Studio Code。 在项目目录中查找 属性文件。此文件存储您可以自定义的默认值。打开它以编辑,并根据您的环境更新以下键值对。
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. 属性文件
在终端中运行 generate.sh 脚本。此操作调整软件模板,使用您指定的输入替换默认主机值。
./generate.sh
./generate.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 图 1.2. generate.sh 脚本
仅限 Jenkins:要自定义 Jenkins 库,请导航到 skeleton > ci > gitops-template > jenkins,并打开 Jenkinsfile。
将远程URL 替换为您的已分叉存储库的 URL。例如,remote: 'https://github.com/<username>/tssc-sample-jenkins.git'。另外,如果您的 Jenkins 位于非本地 OpenShift 实例,并且您的 Rekor 和 TUF 服务位于不同的集群中,请更新
REKOR_HOST和TUF_MIRROR环境变量。您可以在组件存储库的 env.sh 文件中配置 这些变量,或者将其设置为 Jenkins 中的环境变量或机密。此配置可确保您的外部 Jenkins 服务器可以与通过 RHTAP 安装的 Rekor 和 TUF 通信。如果没有此,RHTAP 可能无法在 Jenkins 管道中正确签署容器镜像。更新
REKOR_HOST和TUF_MIRROR变量:通过 skeleton > ci > gitops-template > jenkins > rhtap 以打开 env.sh 文件。
第二个 env.sh 文件位于 skeleton > ci > source-repo > jenkins > rhtap。选出适合您需要或更新两者的那一个。
在 env.sh 中,查看
REKOR_HOST和TUF_MIRROR的默认值:REKOR_HOST=http://rekor-server.rhtap-tas.svc TUF_MIRROR=http://tuf.rhtap-tas.svc
REKOR_HOST=http://rekor-server.rhtap-tas.svc TUF_MIRROR=http://tuf.rhtap-tas.svcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
.svc替换为您的 OpenShift 集群 URL。.svc域指的是本地集群,内部服务可以在其路由中使用.svc访问其他服务,但外部 Jenkins 无法访问。Rekor 和 TUF 服务的正确路由作为 RHTAP 的安装过程的一部分打印。如果这些数据不适用于您,请在 CLI 中运行这个命令,并在输出中选择 Rekor 和 TUF 路由:
oc get routes -n rhtap-tas
$ oc get routes -n rhtap-tasCopy to Clipboard Copied! Toggle word wrap Toggle overflow 一个 Rekor 服务器 URL 示例: http://rekor-server.rhtap-tas.apps.rosa.j6ufg-t3htv-ts6.z797.p3.openshiftapps.com。
注意- 要在 Jenkins 中配置环境变量或机密,请参阅 Adding secrets to Jenkins 以便与外部工具集成。
- 默认情况下,RHTAP 使用动态加载的 Jenkins 库。如果需要将 RHTAP 配置为使用内置 Jenkins 库而不是动态加载,您必须修改 Jenkins 置备设置。此更改可以在测试时提高可追溯性和红帽企业合同(企业合同)。具体步骤,请参阅配置 RHTAP 以使用内置 Jenkins 库。
-
仅限 RHACS: 要在 env.sh 文件中启用 RHACS 扫描,将
export DISABLE_ACS设置为false。 提交更改并将其推送到您的存储库。这会自动更新 RHDH 中的模板。或者,您可以在 RHDH 中直接导入和刷新单个或所有自定义模板。
- 进入 Git 供应商上的 fork 示例模板存储库。
-
对于单个模板,从
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。 - 切回到 RHDH 平台。
- 选择 Create > Register Existing Component。
- 在 Select URL 字段中,粘贴在第 4b 步中复制的适当 URL。
- 选择 Analyze,然后选择 Import 以更新 RHDH 中的模板。
验证
- 考虑创建应用以探索模板自定义的影响。
第 2 章 自定义示例管道 复制链接链接已复制到粘贴板!
了解如何在示例模板存储库中更新 Pipeline as Code (pac) URL,并自定义示例管道存储库以匹配您的工作流。通过自定义 pac URL,机构可以根据 CI/CD 要求集成自定义管道。
先决条件
在进行更改前,请确保:
自定义示例模板存储库以更新 pac URL*
流程
访问 fork 中的示例管道存储库 URL:
- 打开 fork 的示例管道存储库。
- 从地址栏中复制完整的 URL。例如: https://github.com/<username>/tssc-sample-pipelines。
更新示例模板存储库中的
pacURL:- 使用您的终端导航到您的本地克隆示例模板存储库。
- 运行以下命令,将 {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./scripts/update-tekton-definition {fork_url} {branch_name} # For example, .scripts/update-tekton-definition https://github.com/<username>/tssc-sample-pipelines mainCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查、提交和推送更改:
- 查看示例模板存储库中的更新文件。
- 使用适当的消息提交更改。
- 将提交的更改推送到您的已分叉的存储库。
在您的工作流中自定义示例管道存储库
示例管道存储库提供了一个基础,您可以在其上构建机构的特定 CI/CD 工作流。管道存储库示例在 pac 目录中包括几个关键的管道模板:
-
GITOPS-repo: 此目录包含用于在 GitOps 仓库中验证拉取请求的管道定义。它触发位于pipelines目录中的gitops-pull-request管道,验证镜像更新是否符合机构标准。这个设置对于提升工作流至关重要,其中应用程序的部署状态通过环境按顺序进行,如从开发到暂存或从 staging 到生产环境。有关gitops-repo中的管道定义的更多信息,请参阅 Gitops Pipelines。 -
Pipelines: 此目录包含构建和验证管道的实现,这些管道由gitops-repo和source-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 存储库。
- 您的已分叉的存储库是最新的,并与上游存储库同步。
流程
为构建资源创建一个目录。目录的位置取决于您的角色:
-
平台工程师: 如果您要重建镜像以更新机构的默认管道,您可以在 fork
tssc-sample-templates存储库的位置创建该目录。例如,重新构建。 -
开发人员: 如果您要为自己的使用或特定项目重建镜像,请在
tssc-sample-templates机构范围内分叉之外的位置创建一个目录以避免冲突。
mkdir rebuild-image
mkdir rebuild-imageCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
平台工程师: 如果您要重建镜像以更新机构的默认管道,您可以在 fork
运行以下命令并复制
容器镜像URL:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令在本地复制现有管道内容:
podman run -v $(pwd):/pwd:z <The_url_you_copied_in_step_2> cp -r /work/rhtap /pwd
podman run -v $(pwd):/pwd:z <The_url_you_copied_in_step_2> cp -r /work/rhtap /pwd1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 此命令使用 <
the_url_you_copied_in_step_2>镜像启动容器。然后,它会将容器内的 /work/rhtap 中的管道文件复制到工作目录中($(pwd)。另外,如果您不在启用了 SELinux 的系统上(如 Fedora、RHEL、pr CentOS),请删除命令中的:z选项以确保兼容性。
-
导航到
rhtap目录,并根据需要自定义管道任务。 在
rebuild-image目录中创建Dockerfile,并添加以下内容来在容器中包含您的更改:另外,基础镜像registry.access.redhat.com/rhtap-task-runner/rhtap-task-runner-rhel9:1.5基于ubi/ubi-minimal构建,它提供轻量级通用基础镜像(UBI)。如果您需要安装其他软件和依赖项,请使用microdnf。一个命令示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令构建新容器镜像:
podman build -f Dockerfile -t quay.io/<namespace>/<new_image_name>
podman build -f Dockerfile -t quay.io/<namespace>/<new_image_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
-f Dockerfile指定用于构建容器镜像的 Dockerfile。如果 Dockerfile 没有被命名或位于其他目录中,可以使用-f标志明确指向Dockerfile。-T quay.io/<namespace>/<new_image_name> 为容器镜像分配一个标签(名称)以便轻松识别。
登录到 Quay.io 并推送更新的镜像:
podman login quay.io # Enter username and password podman push quay.io/<namespace>/<new_image_name>
podman login quay.io # Enter username and password podman push quay.io/<namespace>/<new_image_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 这会将自定义容器镜像上传到 Quay.io,使它可用于 GitLab 管道。
仅限平台工程师:导航到 tssc-sample-templates > skeleton > ci > source-repo > gitlabci >
.gitlab-ci.yml文件,并将容器镜像 URL 替换为您刚才创建的镜像 URL。这使得新容器镜像成为默认值。image: quay.io/<namespace>/<new_image_name>
image: quay.io/<namespace>/<new_image_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 仅限开发人员:为 GitLab 中的单个存储库更新容器镜像:
-
导航到源存储库 >
.gitlab-ci.yaml,并将容器镜像 URL 替换为您刚才创建的镜像 URL。
image: quay.io/<namespace>/<new_image_name>
image: quay.io/<namespace>/<new_image_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
导航到源存储库 >
- 提交并推送更改以应用更新的管道配置。
第 4 章 将 RHTAP 配置为使用内置 Jenkins 库 复制链接链接已复制到粘贴板!
默认情况下,{ProductLongName}(RHTAP)使用动态加载的 Jenkins 库。虽然动态加载提供了灵活性,但使用内置 Jenkins 库在构建期间提高了稳定性、安全性和可追溯性。将 RHTAP 配置为使用内置库而不是动态加载的库可以在测试时更好地获得 Red Hat Enterprise Contract (企业合同),并增强了构建验证。
先决条件
在进行更改前,请确保:
- 您有访问 RHTAP 中的 Jenkins 实例的管理员访问权限。
-
您有 Jenkins 库 git repo URL。例如:
https://github.com/redhat-appstudio/tssc-sample-jenkins。您可以在默认的 RHTAP Jenkins CI 源存储库 中找到 Git 存储库 URL。 -
您有修改
Jenkinsfile的权限。
4.1. 在 Jenkins 中定义内置库 复制链接链接已复制到粘贴板!
流程
- 登录 Jenkins 并前往 Manage Jenkins > System。
- 找到 Global Trusted Pipeline Libraries 部分。
点 Add,并使用以下参数定义新库:
- Name: <your-library-name>
- 默认版本 :设置为特定分支或提交引用。例如,v1.5。
- 允许覆盖默认版本 :(可选)选择此选项,将用户限制为 Jenkins 库的特定版本。这样可确保用户无法选择不同的版本。
- 在最近的更改中包含 @Library 更改 :选择此选项以跟踪对共享库进行的修改。此功能可帮助用户了解可能会影响其构建的更改。
检索方法 :选择 Modern SCM。
- 从 Source Code Management 下拉列表中,选择 Git。
-
在 Project Repository 字段中,输入 Jenkins 库 URL。例如:
https://github.com/redhat-appstudio/tssc-sample-jenkins。 - 选择 Fresh clone per build,以确保每个构建获取库的干净副本。
- 选择 Save。
4.2. 修改 Jenkins 管道以使用内置库 复制链接链接已复制到粘贴板!
流程
- 导航到 Jenkins CI 源存储库,例如 https://github.com/redhat-appstudio/tssc-sample-templates/blob/main/skeleton/ci/source-repo/jenkins。
-
在编辑模式中选择
Jenkinsfile。 将动态库加载替换为
@Library注释。Expand 替换它 使用这个 库标识符: 'RHTAP_Jenkins@main', retriever: modernSCM ([$class: 'GitSCMSource', remote: 'https://github.com/redhat-appstudio/tssc-sample-jenkins.git'])
@Library('RHTAP_Jenkins@v1.5') _
- 保存并提交更新的 Jenkinsfile。
4.3. 使用配置的 Jenkins 库 复制链接链接已复制到粘贴板!
流程
- 在 Jenkins 实例中,导航到您的项目。
- 选择 Build Now 以触发新构建。
验证
- 检查 Jenkins 构建日志,以确认是否加载了内置库,而不是动态检索依赖项。
- 验证企业合同现在是否反映出一个内置库。
- 如果发生错误,请验证库名称、检索方法和管道脚本。
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 个选项:
- 启用单个现有组件的选项卡。
- 修改 registry 检测脚本,并将正确标注所有新组件。
选项 1:为现有组件启用 Image Registry 选项卡
为每个受影响的组件重复此步骤。
流程
- 在 Git 存储库中,导航到 skeleton > source-repo 并打开 catalog-info.yaml 文件。
添加与您的问题单相关的注解:
metadata: annotations: 'quay.io/repository-slug': `<ORGANIZATION>/<REPOSITORY>'metadata: annotations: 'quay.io/repository-slug': `<ORGANIZATION>/<REPOSITORY>'Copy to Clipboard Copied! Toggle word wrap Toggle overflow metadata: annotations: 'jfrog-artifactory/image-name': '<IMAGE-NAME>'metadata: annotations: 'jfrog-artifactory/image-name': '<IMAGE-NAME>'Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 提交更改并推送到存储库。
RHDH 将检测您的 registry 类型并启用 Image Registry 选项卡。
验证
选择缺少 Image Registry 选项卡的 RHTAP 组件。选项卡菜单现在应当会显示。
图 5.1. 显示的镜像 Registry 选项卡
选项 2:启用所有未来组件的 Image Registry 选项卡
RHTAP 软件模板使用特定的模式来识别注册表类型 Quay 或 JFrog Artifactory。如果您的 registry 不匹配这些模式,您可以更新模板中的 catalog-info.yaml 文件,RHTAP 将自动检测到所有将来的组件的 registry 类型,并为 RHDH 正确注解它们。
先决条件
- 您已分叉并克隆了 tssc-sample-templates,如 Forking the RHTAP 目录存储库 中所述。
流程
- 在带有模板的 GitHub 存储库中,导航到 skeleton > source-repo 并打开 catalog-info.yaml 文件。
查找与 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 }}{%- 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 Copied! Toggle word wrap Toggle overflow 将 "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