在 Kubernetes 上使用 GoCD 入门
样例流水线的解释
在本节中,我们将详细说明上一节中导入的每个流水线的细节。
1. 构建并发布镜像
此流水线构建应用程序工件并将其发布到工件存储中。
材料
GoCD 流水线的材料是触发流水线的因素。通常是源代码仓库。也可能是另一个 GoCD 存储库。材料中的更改会触发流水线运行。
流水线的build_and_publish_image
流水线材料是一个 Git 仓库。
导入流水线时,材料被呈现为触发器在价值流图页面上的build_and_publish_image
流水线。
阶段和作业
在 GoCD 中,阶段和作业是允许顺序或并行执行构建任务的工作流结构。
The build_and_publish_image
流水线有一个名为build_and_publish_image
的阶段,包含一个名为build_image
.
点击 GoCD 用户界面中的阶段或作业即可查看该阶段及其组成部分的执行结果。
作业详情
The build_image
作业构建 Docker 镜像工件用于示例应用程序,并将 Docker 镜像发布到配置在Admin -> Artifact Stores
.
弹性配置文件
The elastic_profile_id
将此作业分配到弹性配置文件。当触发此作业时,基于弹性配置文件配置了一个弹性代理,并将其分配给此作业。
外部工件
作业定义中的外部工件配置使用了Docker 注册表工件插件来将 Docker 镜像推送到构建后配置的 Docker 注册表。
控制台选项卡显示了build_image
作业的交互过程。
2. 测试应用程序
该流水线获取先前构建的 Docker 镜像并对其进行测试。build_and_publish_image
pipeline and runs tests against it.
材料
流水线的test_application
材料是前一个build_and_publish_image
流水线。通过指定流水线材料,test_pipeline
将在前一个build_and_publish_image
流水线成功完成时被触发。
The test_application
流水线还可以访问并获取build_and_publish_image
流水线生成并存储在 GoCD 服务器上的任何工件。
注意:构建工件可以存储在 GoCD 服务器上或如 Docker 注册表之类的外部工件存储中。
阶段和作业
The test_application
流水线有一个名为test_app_image
的阶段,包含一个名为test_app_image
.
的作业。阶段详细信息页面显示了阶段及其组成部分的执行结果。
作业详情
GoCD 构建代理以 Docker In Docker 容器形式运行。该作业获取应用程序的 Docker 镜像并在应用程序容器上运行测试命令。它通过执行test_app_image
job fetches the application’s Docker image and runs the application’s test command on an application container. It does so by executing the docker run
命令。
弹性配置文件
The elastic_profile_id
将此作业分配到弹性配置文件。当触发此作业时,基于弹性配置文件配置了一个弹性代理,并将其分配给此作业。
获取构件
The fetch
任务配置为从配置在Admin -> Artifact Stores
.
这种交互关系可以通过test_app_image
作业的控制台选项卡查看。
3. 部署到集群
该流水线将应用程序工件部署到 Kubernetes 集群。
材料
The deploy_to_cluster
流水线有两个材料。
第一个材料是前一个test_application
流水线。第二个材料是一个存储部署脚本的 Git 仓库。
The deploy_to_cluster
流水线将在上游test_application
流水线成功完成后或者对 Git 仓库材料提交时被触发。
阶段和作业
The deploy_to_cluster
流水线有一个名为deploy_to_cluster
的阶段,包含一个名为Deploy
.
的作业。阶段详细信息页面显示了阶段及其组成部分的执行结果。
作业详情
The Deploy
作业获取应用程序的 Docker 镜像元数据,并使其在环境中可用。然后调用部署脚本将应用程序部署到 Kubernetes。
弹性配置文件
The elastic_profile_id
将此作业分配到弹性配置文件。当触发此作业时,基于弹性配置文件配置了一个弹性代理,并将其分配给此作业。
获取镜像元数据
由于部署到 Kubernetes 不需要将应用程序镜像拉取到构建代理,因此fetch
任务配置为获取应用程序镜像元数据。然后将元数据提供给作业中的其他任务使用。
这种交互关系可以通过deploy
作业的控制台选项卡查看。
访问您的应用程序
当流水线成功运行后,前往http://<ingress-ip>/bulletin-board
查看您已部署的示例应用程序。
获取已部署应用程序的新入口 IP 地址:
-
对于 Minikube:
minikube ip
-
对于其他 Kubernetes 实现:
echo "http://$(kubectl get ingress bulletin-board-ingress --namespace $NAMESPACE -o jsonpath="{.status.loadBalancer.ingress[0]['ip']}")"
使用代理状态报告检查代理状态
当流水线运行时(由黄色条表示),您可以查看分配来运行流水线中作业的代理的状态。在这里可以找到以下信息:
-
Pod 详细信息和配置
-
Pod 事件
-
代理日志
这对于排查代理不拾取作业的情况非常有帮助。
要访问代理状态报告:
-
当流水线正在构建时,点击任意一个阶段。
-
您会看到带有作业列表的阶段详细信息页面。点击您希望查看代理的作业。
-
这是具有控制台日志的作业详细信息页面。点击标题为“检查代理状态”的按钮。
-
点击此按钮将带您进入代理状态报告。
Events
和Logs
选项卡显示 GoCD 弹性代理 Pod 的事件和日志。注意:当作业运行时,代理状态报告才可见。一旦作业完成,此状态将不再可见。