第 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 应用程序,请执行以下步骤:
- 登录您的 GitHub 帐户。
-
进入 Settings
Developer settings GitHub Apps,然后点 New GitHub App。 在 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
-
GitHub 应用程序名称:
选择以下仓库权限 :
-
Checks:
Read & Write
-
Contents:
Read & Write
-
Issues:
Read & Write
-
Metadata:
Read-only
-
Pull request:
Read & Write
-
Checks:
选择以下机构权限 :
-
Members:
Readonly
-
Plan:
Readonly
-
Members:
选择以下用户权限 :
- Check run
- Issue comment
- Pull request
- push
- 点 Create GitHub App。
- 在新创建的 GitHub App 的 Details 页面中,记录顶部显示的 App ID。
- 在 Private key 部分,点 Generate Private key 自动生成并下载 GitHub 应用的私钥。安全地存储私钥,以备将来参考和使用。
- 在您要与 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
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。
流程
- 在 Administrator 视角中,使用导航窗格进入到 Pipelines。
- 在 Pipelines 页面中点 Setup GitHub App。
-
输入您的 GitHub 应用程序名称。例如,
pipelines-ci-clustername-testui
。 - 点 Setup。
- 在浏览器中提示时输入您的 Git 密码。
-
点 Create GitHub App for <username>,其中
<username>
是您的 GitHub 的用户名。
验证
成功创建 GitHub 应用程序后,OpenShift Container Platform Web 控制台会打开并显示应用程序的详情。
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 令牌扩展到与原始存储库相同的命名空间中的存储库列表。您不需要管理权限来设置此配置。
流程
-
在
TektonConfig
自定义资源 (CR) 中,在pipelinesAsCode.settings
spec 中,将secret-github-app-token-scoped
参数设置为false
。此设置允许将 GitHub 令牌范围到全局和存储库级别配置中列出的私有和公共存储库。 要在
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"
要为 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/project
和owner1/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
仓库。