3.3. 在 GitLab 中使用 Pipelines as Code
如果您的机构或项目使用 GitLab 作为首选平台,您可以在 GitLab 上使用带有 webhook 的仓库的 Pipelines as Code。
先决条件
- 确保在集群中安装了 Pipelines as Code。
为授权,请生成个人访问令牌作为 GitLab 上项目或机构的管理器。
注意-
如果要使用
tkn pac
CLI 配置 webhook,请将admin:repo_hook
范围添加到令牌中。 - 使用范围被设置为针对特定项目的令牌无法提供对从已分叉存储库发送的合并请求 (MR) 的 API 访问。在这种情况下,Pipelines as Code 会以一条 MR 评论的方式显示结果。
-
如果要使用
流程
配置 Webhook 并创建一个
Repository
自定义资源 (CR)。要配置 webhook 并使用
tkn pac
CLI 工具自动创建一个Repository
CR,请使用以下命令:tkn pac create repo
$ tkn pac create repo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 互动输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要配置 webhook 并 手动创建
Repository
CR,请执行以下步骤:在 OpenShift 集群中,提取 Pipelines as Code 控制器的公共 URL。
echo https://$(oc get route -n openshift-pipelines pipelines-as-code-controller -o jsonpath='{.spec.host}')
$ echo https://$(oc get route -n openshift-pipelines pipelines-as-code-controller -o jsonpath='{.spec.host}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 GitLab 项目中,执行以下步骤:
- 使用左侧边栏进入 Settings -> Webhooks。
- 将 URL 设置为 Pipelines as Code 控制器公共 URL。
添加 webhook secret 并在另一个位置记录它。在本地机器上安装
openssl
后,生成一个随机 secret。openssl rand -hex 20
$ openssl rand -hex 20
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Let me select individual events 并选择这些事件:Commit comments, Issue comments, Pull request, 和 Pushes.
- 点 Save Changes。
在 OpenShift 集群中,使用个人访问令牌和 webhook secret 创建一个
Secret
对象。oc -n target-namespace create secret generic gitlab-webhook-config \ --from-literal provider.token="<GITLAB_PERSONAL_ACCESS_TOKEN>" \ --from-literal webhook.secret="<WEBHOOK_SECRET>"
$ oc -n target-namespace create secret generic gitlab-webhook-config \ --from-literal provider.token="<GITLAB_PERSONAL_ACCESS_TOKEN>" \ --from-literal webhook.secret="<WEBHOOK_SECRET>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
Repository
CR。示例:
Repository
CRCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果您使用 GitLab 的私有实例而不是 GitLab.com,请取消注释此字段并将其设置为 GitLab API 的 URL。GitLab API 与存储库相同。例如,如果仓库是
https://gitlab.example.com/owner/repo
,API URL 为https://gitlab.example.com/。
注意-
Pipelines as Code 假设 OpenShift
Secret
对象和Repository
CR 位于同一命名空间中。
可选: 对于现有的
Repository
CR,请添加多个 GitLab Webhook secret 或为已删除的 secret 提供替换。使用
tkn pac
CLI 工具添加 webhook。示例:使用
tkn pac
CLI 添加额外的 Webhooktkn pac webhook add -n repo-pipelines
$ tkn pac webhook add -n repo-pipelines
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 互动输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
更新现有 OpenShift
Secret
对象中的webhook.secret
密钥。
可选: 对于现有的
Repository
CR,更新个人访问令牌。使用
tkn pac
CLI 工具更新个人访问令牌。示例:使用
tkn pac
CLI 更新个人访问令牌tkn pac webhook update-token -n repo-pipelines
$ tkn pac webhook update-token -n repo-pipelines
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 互动输出示例
? Please enter your personal access token: **************************************** 🔑 Secret owner-repo has been updated with new personal access token in the repo-pipelines namespace.
? Please enter your personal access token: **************************************** 🔑 Secret owner-repo has been updated with new personal access token in the repo-pipelines namespace.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,通过修改
Repository
CR 来更新个人访问令牌。在
Repository
CR 中查找 secret 的名称。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
oc patch
命令更新$target_namespace
命名空间中的$NEW_TOKEN
的值。oc -n $target_namespace patch secret gitlab-webhook-config -p "{\"data\": {\"provider.token\": \"$(echo -n $NEW_TOKEN|base64 -w0)\"}}"
$ oc -n $target_namespace patch secret gitlab-webhook-config -p "{\"data\": {\"provider.token\": \"$(echo -n $NEW_TOKEN|base64 -w0)\"}}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow