第 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,作为代码事件监听器路由(或入口端点)用于侦听 GitHub 事件。

注意

当使用 Import from Git 导入应用程序时,Git 存储库有一个 .tekton 目录,您可以为应用程序配置 pipelines-as-code

3.1.1. 配置 GitHub 应用程序

集群管理员可以通过运行以下命令来创建 GitHub 应用程序:

$ tkn pac bootstrap github-app

如果没有安装 tkn pac CLI 插件,您可以手动创建 GitHub App。

流程

要手动为 Pipelines 作为代码创建和配置 GitHub 应用程序,请执行以下步骤:

  1. 登录您的 GitHub 帐户。
  2. 进入 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}')
    • Webhook secret :一个任意的机密。您可以运行以下命令来生成 secret:

      $ openssl rand -hex 20
  4. 选择以下仓库权限

    • Checks: Read & Write
    • Contents: Read & Write
    • Issues: Read & Write
    • Metadata: Read-only
    • Pull request: Read & Write
  5. 选择以下机构权限

    • Members: Readonly
    • Plan: Readonly
  6. 选择以下用户权限

    • Check run
    • 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 一起使用的软件仓库上安装创建的应用程序。

3.1.2. 配置 Pipelines as Code 来访问一个 GitHub 应用程序

要将 Pipelines as Code 配置为访问新创建的 GitHub 应用程序,请执行以下命令:

$ oc -n openshift-pipelines create secret generic pipelines-as-code-secret \
        --from-literal github-private-key="$(cat <PATH_PRIVATE_KEY>)" \ 1
        --from-literal github-application-id="<APP_ID>" \ 2
        --from-literal webhook.secret="<WEBHOOK_SECRET>" 3
1
配置 GitHub 应用程序时下载的私钥的路径。
2
GitHub 应用程序的 App ID
3
创建 GitHub 应用程序时提供的 webhook secret。
注意

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

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

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

先决条件

您已从 Operator Hub 安装了 Red Hat OpenShift Pipelines pipelines-1.13 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.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.