第 3 章 使用带有 Git 存储库托管服务提供商的 Pipelines as Code。


安装 Pipelines 作为代码后,集群管理员可以配置 Git 存储库托管服务提供商。目前,支持以下服务:

  • GitHub 应用程序
  • GitHub Webhook
  • GitLab
  • Bitbucket 服务器
  • Bitbucket 云
注意

GitHub App 是与 Pipelines as Code 搭配使用的建议服务。

3.1. 使用带有 GitHub 应用程序的 Pipelines as Code

GitHub Apps 充当 Red Hat OpenShift Pipelines 的集点,并为 OpenShift Pipelines 提供了基于 Git 的工作流的优势。集群管理员可以为所有集群用户配置单个 GitHub 应用程序。对于 GitHub Apps 使用 Pipelines 作为代码,请确保 GitHub App 的 Webhook 指向 Pipelines as Code controller route (或入口端点),用于侦听 GitHub 事件。

有三种方法为 Pipelines 设置 GitHub 应用程序作为代码:

  • 使用 tkn 命令行工具。
  • 使用 Web 控制台的 Administrator 视角。
  • 在 GitHub 中手动设置应用程序,然后为 Pipelines 作为代码创建一个 secret。

默认情况下,Pipelines as Code 可以和一个 GitHub 应用程序通信。如果您将额外的 Pipelines 配置为与额外的 GitHub 应用程序通信,请单独配置每个 GitHub 应用程序。您必须为任何其他控制器手动设置 GitHub 应用程序。

3.1.1. 使用命令行界面配置 GitHub 应用程序

您可以使用 tkn 命令行工具创建 GitHub 应用程序,并为 GitHub 应用程序配置 Pipelines 作为代码控制器。

重要

如果您创建了额外的 Pipelines as Code 控制器来支持额外的 GitHub 应用程序,则只能对主控制器使用此流程。要为其他控制器创建 GitHub 应用程序,请使用手动过程。

先决条件

  • 以集群管理员身份登录到 OpenShift Container Platform 集群。
  • 已使用 tkn pac 插件安装了 tkn 命令行工具。

流程

  • 输入以下命令:

    $ tkn pac bootstrap github-app

    此命令假设您的帐户使用标准 github.com API 端点。如果您使用不同的 GitHub API 端点,例如,如果使用 GitHub Enterprise,请使用 --github-api-url 选项指定端点,如下例所示:

    示例命令

    $ tkn pac bootstrap github-app --github-api-url https://github.com/enterprises/example-enterprise

3.1.2. 在管理员视角中创建 GitHub 应用程序

作为集群管理员,您可以使用 OpenShift Container Platform 集群配置 GitHub 应用程序,以使用 Pipelines as Code。此配置允许您执行构建部署所需的一组任务。

重要

如果您创建了额外的 Pipelines as Code 控制器来支持额外的 GitHub 应用程序,则只能对主控制器使用此流程。要为其他控制器创建 GitHub 应用程序,请使用手动过程。

先决条件

您已从 Operator Hub 安装了 Red Hat OpenShift Pipelines pipelines-1.15 operator。

流程

  1. 在 Administrator 视角中,使用导航窗格进入到 Pipelines
  2. Pipelines 页面中点 Setup GitHub App
  3. 输入您的 GitHub 应用程序名称。例如,pipelines-ci-clustername-testui
  4. Setup
  5. 在浏览器中提示时输入您的 Git 密码。
  6. Create GitHub App for <username>,其中 <username> 是您的 GitHub 的用户名。

验证

成功创建 GitHub 应用程序后,OpenShift Container Platform Web 控制台会打开并显示应用程序的详情。

GitHub 应用程序详情

GitHub App 的详细信息保存为 openShift-pipelines 命名空间中的 secret。

要查看与 GitHub 应用程序关联的名称、链接和 secret 等详情,请进入到 Pipelines 并点 View GitHub App

3.1.3. 手动配置 GitHub 应用程序并为 Pipelines 作为代码创建 secret

您可以使用 GitHub 用户界面创建 GitHub 应用程序。然后,您必须创建一个 secret 将 Pipelines as Code 配置为连接到 GitHub 应用程序。

如果您创建了额外的 Pipelines as Code 控制器来支持额外的 GitHub 应用程序,则必须对其他控制器使用此流程。

流程

  1. 登录您的 GitHub 帐户。
  2. 在 GitHub 菜单中,选择 Settings Developer settings GitHub Apps,然后点 New GitHub App
  3. 在 GitHub App 表单中提供以下信息:

    • GitHub 应用程序名称OpenShift Pipelines
    • 主页 URL :OpenShift 控制台 URL
    • Webhook URL :作为代码路由或入口 URL 的 Pipelines。您可以运行以下命令来找到它:

      $ echo https://$(oc get route -n openshift-pipelines pipelines-as-code-controller -o jsonpath='{.spec.host}')

      另外,要为额外的 Pipelines 作为代码控制器配置 GitHub 应用程序,请将 pipelines-as-code-controller 替换为您配置的控制器的名称,如下例所示:

      示例命令

      $ echo https://$(oc get route -n openshift-pipelines pac_controller_2 -o jsonpath='{.spec.host}')

    • Webhook secret :一个任意的机密。您可以运行以下命令来生成 secret:

      $ openssl rand -hex 20
  4. Repository permissions 部分中选择以下项目:

    • Checks: Read & Write
    • Contents: Read & Write
    • Issues: Read & Write
    • Metadata: Read-only
    • Pull request: Read & Write
  5. Organization permissions 部分中选择以下项目:

    • Members:Read-only
    • 计划 : 只读
  6. 订阅以下事件:

    • Check run
    • 检查套件
    • Commit comment
    • Issue comment
    • Pull request
    • push
  7. Create GitHub App
  8. 在新创建的 GitHub App 的 Details 页面中,记录顶部显示的 App ID
  9. Private key 部分,点 Generate Private key 自动生成并下载 GitHub 应用的私钥。安全地存储私钥,以备将来参考和使用。
  10. 在您要与 Pipelines as Code 一起使用的软件仓库上安装创建的应用程序。
  11. 输入以下命令将 Pipelines as Code 配置为访问新创建的 GitHub 应用程序:

    $ oc -n openshift-pipelines create secret generic pipelines-as-code-secret \ 1
            --from-literal github-private-key="$(cat <PATH_PRIVATE_KEY>)" \ 2
            --from-literal github-application-id="<APP_ID>" \ 3
            --from-literal webhook.secret="<WEBHOOK_SECRET>" 4
    1
    如果您创建了额外的 Pipelines as Code 控制器来支持额外的 GitHub 应用程序,并且您要为其他控制器配置应用程序,请将 pipelines-as-code-secret 替换为您在控制器的 secretName 参数中配置的名称。
    2
    配置 GitHub 应用程序时下载的私钥的路径。
    3
    GitHub 应用程序的 App ID
    4
    创建 GitHub 应用程序时提供的 webhook secret。
注意

Pipelines as Code 通过检测从 GitHub Enterprise 集的标头集并将其用于 GitHub Enterprise API 授权 URL 来自动工作。

3.1.4. 将 GitHub 令牌限定到额外的存储库

Pipelines as Code 使用 GitHub 应用程序来生成 GitHub 访问令牌。Pipelines as Code 使用这个令牌从存储库检索管道有效负载,并启用 CI/CD 进程与 GitHub 存储库交互。

默认情况下,访问令牌仅限于 Pipelines as Code 检索管道定义的存储库。在某些情况下,您可能希望令牌有权访问其他存储库。例如,可能会出现 CI 存储库,其中 .tekton/pr.yaml 文件和源有效负载位于,但 pr.yaml 中定义的构建过程从单独的私有 CD 存储库获取任务。

您可以通过两种方式扩展 GitHub 令牌的范围:

  • 全局配置 :您可以将 GitHub 令牌扩展到不同命名空间中的存储库列表。您必须具有管理权限来设置此配置。
  • 仓库级别配置:您可以将 GitHub 令牌扩展到与原始存储库相同的命名空间中的存储库列表。您不需要管理权限来设置此配置。

流程

  1. TektonConfig 自定义资源 (CR) 中,在 pipelinesAsCode.settings spec 中,将 secret-github-app-token-scoped 参数设置为 false。此设置允许将 GitHub 令牌范围到全局和存储库级别配置中列出的私有和公共存储库。
  2. 要在 TektonConfig CR 中为 scoping GitHub 令牌设置全局配置,在 pipelinesAsCode.settings spec 中指定 secret-github-app-scope-extra-repos 参数中的额外软件仓库,如下例所示:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      platforms:
        openshift:
          pipelinesAsCode:
            enable: true
            settings:
              secret-github-app-token-scoped: false
              secret-github-app-scope-extra-repos: "owner2/project2, owner3/project3"
  3. 要为 GitHub 令牌设置存储库级别配置,请在 Repository CR 的 github_app_token_scope_repos 参数中指定附加存储库,如下例所示:

    apiVersion: "pipelinesascode.tekton.dev/v1alpha1"
    kind: Repository
    metadata:
      name: test
      namespace: test-repo
    spec:
      url: "https://github.com/linda/project"
      settings:
        github_app_token_scope_repos:
        - "owner/project"
        - "owner1/project1"

    在本例中,Repository 自定义资源与 test-repo 命名空间中的 linda/project 存储库关联。生成的 GitHub 令牌的范围已扩展到 owner/projectowner1/project1 存储库,以及 linda/project 存储库。这些存储库必须存在于 test-repo 命名空间下。

    注意

    其他存储库可以是公共或私有存储库,但必须位于与 Repository 资源关联的存储库相同的命名空间中。

    如果命名空间中不存在任何存储库,则 GitHub 令牌的范围会失败,并显示出错信息:

    failed to scope GitHub token as repo owner1/project1 does not exist in namespace test-repo

结果

生成的 GitHub 令牌可让您访问您在全局和存储库级别配置的额外软件仓库,以及 Pipelines as Code 有效负载文件所在的原始存储库。

如果您同时提供全局配置和存储库级别配置,则令牌将限定为来自这两个配置的所有存储库,如下例所示。

TektonConfig 自定义资源

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  platforms:
    openshift:
      pipelinesAsCode:
        enable: true
        settings:
          secret-github-app-token-scoped: false
          secret-github-app-scope-extra-repos: "owner2/project2, owner3/project3"

Repository 自定义资源

apiVersion: "pipelinesascode.tekton.dev/v1alpha1"
kind: Repository
metadata:
 name: test
 namespace: test-repo
spec:
 url: "https://github.com/linda/project"
 settings:
   github_app_token_scope_repos:
   - "owner/project"
   - "owner1/project1"

GitHub 令牌的范围仅限于 owner/project, owner1/project1, owner2/project2, owner3/project3, 和 linda/project 仓库。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.