This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.4.5. 为使用 OpenShift Pipelines 的应用程序创建 CI/CD 解决方案
使用 Red Hat OpenShift Pipelines,您可以创建一个自定义的 CI/CD 解决方案来构建、测试和部署应用程序。
要为应用程序创建一个完整的自助 CI/CD 管道,请执行以下任务:
- 创建自定义任务,或安装现有的可重复使用的任务。
- 为应用程序创建并定义交付管道。
使用以下方法之一提供附加到管道执行的工作区中的存储卷或文件系统:
- 指定创建持久性卷声明的卷声明模板
- 指定一个持久性卷声明
-
创建一个
PipelineRun
对象来实例化并调用管道。 - 添加触发器以捕获源仓库中的事件。
本节使用 pipelines-tutorial
示例来演示前面的任务。这个示例使用一个简单的应用程序,它由以下部分组成:
-
一个前端接口,
pipelines-vote-ui
,它的源代码在pipelines-vote-ui
Git 存储库中。 -
一个后端接口
pipelines-vote-api
,它的源代码在pipelines-vote-api
Git 存储库中。 -
apply-manifests
和update-deployment
任务在pipelines-tutorial
Git 存储库中。
4.5.1. 先决条件 复制链接链接已复制到粘贴板!
- 有访问 OpenShift Container Platform 集群的权限。
- 已使用在 OpenShift OperatorHub 中列出的 Red Hat OpenShift Pipelines Operator 安装了 OpenShift Pipelines。在安装后,它可用于整个集群。
- 已安装 OpenShift Pipelines CLI。
-
使用您的 GitHub ID fork 前端
pipelines-vote-ui
和后端pipelines-vote-api
Git 存储库,并具有对这些存储库的管理员访问权限。 -
可选:已克隆了
pipelines-tutorial
Git 存储库。
4.5.2. 创建项目并检查管道服务帐户 复制链接链接已复制到粘贴板!
流程
登录您的 OpenShift Container Platform 集群:
oc login -u <login> -p <password> https://openshift.example.com:6443
$ oc login -u <login> -p <password> https://openshift.example.com:6443
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为示例应用程序创建一个项目。在本例中,创建
pipelines-tutorial
项目:oc new-project pipelines-tutorial
$ oc new-project pipelines-tutorial
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您使用其他名称创建项目,请确定使用您的项目名称更新示例中使用的资源 URL。
查看
pipeline
服务帐户:Red Hat OpenShift Pipelines Operator 添加并配置一个名为
pipeline
的服务帐户,该帐户有足够的权限来构建和推送镜像。PipelineRun
对象使用此服务帐户。oc get serviceaccount pipeline
$ oc get serviceaccount pipeline
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5.3. 创建管道任务 复制链接链接已复制到粘贴板!
流程
从
pipelines-tutorial
存储库安装apply-manifests
和update-deployment
任务资源,其中包含可为管道重复使用的任务列表:oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.5/01_pipeline/01_apply_manifest_task.yaml oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.5/01_pipeline/02_update_deployment_task.yaml
$ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.5/01_pipeline/01_apply_manifest_task.yaml $ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.5/01_pipeline/02_update_deployment_task.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
tkn task list
命令列出您创建的任务:tkn task list
$ tkn task list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出会确认创建了
apply-manifests
和update-deployment
任务:NAME DESCRIPTION AGE apply-manifests 1 minute ago update-deployment 48 seconds ago
NAME DESCRIPTION AGE apply-manifests 1 minute ago update-deployment 48 seconds ago
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
tkn clustertasks list
命令列出由 Operator 安装的额外集群任务,如buildah
和s2i-python
:注意要在受限环境中使用
buildah
集群任务,您必须确保 Dockerfile 使用内部镜像流作为基础镜像。tkn clustertasks list
$ tkn clustertasks list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出列出了 Operator 安装的
ClusterTask
资源:NAME DESCRIPTION AGE buildah 1 day ago git-clone 1 day ago s2i-python 1 day ago tkn 1 day ago
NAME DESCRIPTION AGE buildah 1 day ago git-clone 1 day ago s2i-python 1 day ago tkn 1 day ago
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5.4. 组装管道 复制链接链接已复制到粘贴板!
管道(pipeline)代表一个 CI/CD 流,由要执行的任务定义。它被设计为在多个应用程序和环境中通用且可重复使用。
管道指定任务如何使用 from
和 runAfter
参数相互交互以及它们执行的顺序。它使用 workspaces
字段指定管道中每个任务在执行过程中所需的一个或多个卷。
在本小节中,您将创建一个管道,从 GitHub 获取应用程序的源代码,然后在 OpenShift Container Platform 上构建和部署应用程序。
管道为后端应用程序 pipelines-vote-api
和前端应用程序 pipelines-vote-ui
执行以下任务:
-
通过引用
git-url
和git-revision
参数,从 Git 存储库中克隆应用程序的源代码。 -
使用
buildah
集群任务构建容器镜像。 -
通过引用
image
参数将镜像推送到内部 镜像 registry。 -
通过使用
apply-manifests
和update-deployment
任务在 OpenShift Container Platform 上部署新镜像。
流程
复制以下管道 YAML 文件示例内容并保存:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pipeline 定义提取 Git 源存储库和镜像 registry 的特定内容。当一个管道被触发并执行时,这些详细信息会作为
params
添加。创建管道:
oc create -f <pipeline-yaml-file-name.yaml>
$ oc create -f <pipeline-yaml-file-name.yaml>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,还可以从 Git 存储库直接执行 YAML 文件:
oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.5/01_pipeline/04_pipeline.yaml
$ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.5/01_pipeline/04_pipeline.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
tkn pipeline list
命令来验证管道是否已添加到应用程序中:tkn pipeline list
$ tkn pipeline list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查输出来验证创建了
build-and-deploy
pipeline:NAME AGE LAST RUN STARTED DURATION STATUS build-and-deploy 1 minute ago --- --- --- ---
NAME AGE LAST RUN STARTED DURATION STATUS build-and-deploy 1 minute ago --- --- --- ---
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5.5. 镜像以在受限环境中运行管道 复制链接链接已复制到粘贴板!
要在断开连接的集群或受限环境中置备的集群中运行 OpenShift Pipelines,请确保为受限网络配置了 Samples Operator,或者集群管理员创建了带有镜像 registry 的集群。
以下流程使用 pipelines-tutorial
示例,使用带有镜像 registry 的集群在受限环境中为应用程序创建管道。为确保 pipelines-tutorial
示例在受限环境中工作,您必须为前端接口(pipelines-vote-ui
)后端接口(pipelines-vote-api
)和 cli
从 mirror registry 中镜像相应的构建器镜像。
流程
为前端接口
pipelines-vote-ui
从 mirror registry 中镜像构建器镜像。验证所需镜像标签没有导入:
oc describe imagestream python -n openshift
$ oc describe imagestream python -n openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将支持的镜像标签镜像到私有 registry:
oc image mirror registry.redhat.io/ubi8/python-38:latest <mirror-registry>:<port>/ubi8/python-38
$ oc image mirror registry.redhat.io/ubi8/python-38:latest <mirror-registry>:<port>/ubi8/python-38
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导入镜像:
oc tag <mirror-registry>:<port>/ubi8/python-38 python:latest --scheduled -n openshift
$ oc tag <mirror-registry>:<port>/ubi8/python-38 python:latest --scheduled -n openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您必须定期重新导入镜像。
--scheduled
标志启用镜像自动重新导入。验证带有指定标签的镜像已被导入:
oc describe imagestream python -n openshift
$ oc describe imagestream python -n openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为后端接口
pipelines-vote-api
从 mirror registry 中镜像构建器镜像。验证所需镜像标签没有导入:
oc describe imagestream golang -n openshift
$ oc describe imagestream golang -n openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将支持的镜像标签镜像到私有 registry:
oc image mirror registry.redhat.io/ubi8/go-toolset:1.14.7 <mirror-registry>:<port>/ubi8/go-toolset
$ oc image mirror registry.redhat.io/ubi8/go-toolset:1.14.7 <mirror-registry>:<port>/ubi8/go-toolset
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导入镜像:
oc tag <mirror-registry>:<port>/ubi8/go-toolset golang:latest --scheduled -n openshift
$ oc tag <mirror-registry>:<port>/ubi8/go-toolset golang:latest --scheduled -n openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您必须定期重新导入镜像。
--scheduled
标志启用镜像自动重新导入。验证带有指定标签的镜像已被导入:
oc describe imagestream golang -n openshift
$ oc describe imagestream golang -n openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
从
cli
的镜像 registry 中镜像构建器镜像。验证所需镜像标签没有导入:
oc describe imagestream cli -n openshift
$ oc describe imagestream cli -n openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将支持的镜像标签镜像到私有 registry:
oc image mirror quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:65c68e8c22487375c4c6ce6f18ed5485915f2bf612e41fef6d41cbfcdb143551 <mirror-registry>:<port>/openshift-release-dev/ocp-v4.0-art-dev:latest
$ oc image mirror quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:65c68e8c22487375c4c6ce6f18ed5485915f2bf612e41fef6d41cbfcdb143551 <mirror-registry>:<port>/openshift-release-dev/ocp-v4.0-art-dev:latest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导入镜像:
oc tag <mirror-registry>:<port>/openshift-release-dev/ocp-v4.0-art-dev cli:latest --scheduled -n openshift
$ oc tag <mirror-registry>:<port>/openshift-release-dev/ocp-v4.0-art-dev cli:latest --scheduled -n openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您必须定期重新导入镜像。
--scheduled
标志启用镜像自动重新导入。验证带有指定标签的镜像已被导入:
oc describe imagestream cli -n openshift
$ oc describe imagestream cli -n openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5.6. 运行管道 复制链接链接已复制到粘贴板!
PipelineRun
资源启动管道,并将其与 Git 和用于特定调用的镜像资源相关联。它为管道中的每个任务自动创建并启动 TaskRun
资源。
流程
启动后端应用程序的管道:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上一命令使用卷声明模板,该模板为管道执行创建持久性卷声明。
要跟踪管道运行的进度,请输入以下命令:
$ tkn pipelinerun logs <pipelinerun_id> -f
$ tkn pipelinerun logs <pipelinerun_id> -f
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上述命令中的 <pipelinerun_id> 是上一命令输出返回的
PipelineRun
的 ID。启动前端应用程序的管道:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要跟踪管道运行的进度,请输入以下命令:
$ tkn pipelinerun logs <pipelinerun_id> -f
$ tkn pipelinerun logs <pipelinerun_id> -f
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上述命令中的 <pipelinerun_id> 是上一命令输出返回的
PipelineRun
的 ID。几分钟后,使用
tkn pipelinerun list
命令列出所有管道运行来验证管道是否成功运行:$ tkn pipelinerun list
$ tkn pipelinerun list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出列出了管道运行:
NAME STARTED DURATION STATUS build-and-deploy-run-xy7rw 1 hour ago 2 minutes Succeeded build-and-deploy-run-z2rz8 1 hour ago 19 minutes Succeeded
NAME STARTED DURATION STATUS build-and-deploy-run-xy7rw 1 hour ago 2 minutes Succeeded build-and-deploy-run-z2rz8 1 hour ago 19 minutes Succeeded
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取应用程序路由:
$ oc get route pipelines-vote-ui --template='http://{{.spec.host}}'
$ oc get route pipelines-vote-ui --template='http://{{.spec.host}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 记录上一个命令的输出。您可以使用此路由来访问应用程序。
要重新运行最后的管道运行,请使用上一管道的管道资源和服务帐户运行:
$ tkn pipeline start build-and-deploy --last
$ tkn pipeline start build-and-deploy --last
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5.7. 在管道中添加触发器 复制链接链接已复制到粘贴板!
触发器(Trigger)使 Pipelines 可以响应外部 GitHub 事件,如推送事件和拉取请求。在为应用程序组装并启动管道后,添加 TriggerBinding
、TriggerTemplate
、Trigger
和 EventListener
资源来捕获 GitHub 事件。
流程
复制以下
TriggerBinding
YAML 示例文件的内容并保存:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
TriggerBinding
资源:oc create -f <triggerbinding-yaml-file-name.yaml>
$ oc create -f <triggerbinding-yaml-file-name.yaml>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,您可以直接从
pipelines-tutorial
Git 仓库创建TriggerBinding
资源:oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.5/03_triggers/01_binding.yaml
$ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.5/03_triggers/01_binding.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制以下
TriggerTemplate
YAML 示例文件的内容并保存:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 模板指定一个卷声明模板,用于创建用于为工作空间定义存储卷的持久性卷声明。因此,您不需要创建持久性卷声明来提供数据存储。
创建
TriggerTemplate
资源:oc create -f <triggertemplate-yaml-file-name.yaml>
$ oc create -f <triggertemplate-yaml-file-name.yaml>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,您还可以从
pipelines-tutorial
Git 仓库直接创建TriggerTemplate
资源:oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.5/03_triggers/02_template.yaml
$ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.5/03_triggers/02_template.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制以下
Trigger
YAML 示例文件的内容并保存:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
Trigger
资源:oc create -f <trigger-yaml-file-name.yaml>
$ oc create -f <trigger-yaml-file-name.yaml>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,您还可以直接从
pipelines-tutorial
Git 仓库创建Trigger
资源:oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.5/03_triggers/03_trigger.yaml
$ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.5/03_triggers/03_trigger.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制以下
EventListener
YAML 示例文件的内容并保存:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,如果您还没有定义触发器自定义资源,将绑定和模板规格添加到
EventListener
YAML 文件中,而不是引用触发器的名称:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过执行以下步骤来创建
EventListener
资源:使用安全 HTTPS 连接创建
EventListener
资源:添加一个标签,在 Eventlistener 资源中启用安全
HTTPS
连接:oc label namespace <ns-name> operator.tekton.dev/enable-annotation=enabled
$ oc label namespace <ns-name> operator.tekton.dev/enable-annotation=enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
EventListener
资源:oc create -f <eventlistener-yaml-file-name.yaml>
$ oc create -f <eventlistener-yaml-file-name.yaml>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,您可以直接从
pipelines-tutorial
Git 仓库创建EvenListener
资源:oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.5/03_triggers/04_event_listener.yaml
$ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.5/03_triggers/04_event_listener.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用重新加密 TLS 终止创建路由:
oc create route reencrypt --service=<svc-name> --cert=tls.crt --key=tls.key --ca-cert=ca.crt --hostname=<hostname>
$ oc create route reencrypt --service=<svc-name> --cert=tls.crt --key=tls.key --ca-cert=ca.crt --hostname=<hostname>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,您可以创建一个重新加密 TLS 终止 YAML 文件,以创建安全路由。
安全路由重新加密 TLS 终止 YAML 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如需了解更多选项,请参阅
oc create route reencrypt --help
。
使用不安全的 HTTP 连接创建
EventListener
资源:-
创建
EventListener
资源。 将
EventListener
服务公开为 OpenShift Container Platform 路由,使其可以被公开访问:oc expose svc el-vote-app
$ oc expose svc el-vote-app
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
创建
4.5.8. 创建 Webhook 复制链接链接已复制到粘贴板!
Webhook 是事件监听程序在存储库中配置事件时接收到的 HTTP POST 信息。然后,事件有效负载映射到触发器绑定,并由触发器模板处理。触发器模板最终启动一个或多个管道运行,从而创建并部署 Kubernetes 资源。
在本小节中,您将在 Git 存储库 pipelines-vote-ui
和 pipelines-vote-api
的副本中配置 webhook URL。这个 URL 指向公开访问的 EventListener
服务路由。
添加 Webhook 需要对该存储库有管理特权。如果您没有对库的管理权限,请联络您的系统管理员来添加 webhook。
流程
获取 Webhook URL:
对于安全 HTTPS 连接:
echo "URL: $(oc get route el-vote-app --template='https://{{.spec.host}}')"
$ echo "URL: $(oc get route el-vote-app --template='https://{{.spec.host}}')"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 HTTP(不安全)连接:
echo "URL: $(oc get route el-vote-app --template='http://{{.spec.host}}')"
$ echo "URL: $(oc get route el-vote-app --template='http://{{.spec.host}}')"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 记录下输出中的 URL。
在前端存储库中手动配置 Webhook:
-
在浏览器中打开前端 Git 存储库
pipelines-vote-ui
。 -
点 Settings
Webhooks Add Webhook 在 Webhooks/Add Webhook 页面中:
- 在 Payload URL 字段中输入第 1 步中的 webhook URL
- 为 Content type 选择 application/json
- 在 Secret 字段中指定 secret
- 确定选择了 Just the push event
- 选择 Active
- 点击 Add webhook。
-
在浏览器中打开前端 Git 存储库
-
重复步骤 2 来使用后端存储库
pipelines-vote-api
。
4.5.9. 触发一个管道运行 复制链接链接已复制到粘贴板!
每当 Git 仓库中发生 push
事件时,配置的 Webhook 会将事件有效负载发送到公开的 EventListener
服务路由。应用程序的 EventListener
服务处理有效负载,并将其传递给相关的 TriggerBinding
和 TriggerTemplate
资源对。TriggerBinding
资源提取参数,TriggerTemplate
资源使用这些参数并指定必须创建资源的方式。这可能会重建并重新部署应用程序。
在本小节中,您将把一个空的提交推送到前端 pipelines-vote-ui
存储库,该存储库将触发管道运行。
流程
在终端中,克隆 fork 的 Git 存储库
pipelines-vote-ui
:git clone git@github.com:<your GitHub ID>/pipelines-vote-ui.git -b pipelines-1.5
$ git clone git@github.com:<your GitHub ID>/pipelines-vote-ui.git -b pipelines-1.5
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 推送空提交:
git commit -m "empty-commit" --allow-empty && git push origin pipelines-1.5
$ git commit -m "empty-commit" --allow-empty && git push origin pipelines-1.5
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查管道运行是否已触发:
tkn pipelinerun list
$ tkn pipelinerun list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,一个新的管道运行被启动。