如何在私有网络中使用本地部署的Jenkins控制GKE CICD

122次阅读
没有评论

问题描述

在测试目的下,希望使用本地部署的Jenkins(使用Vagrant)连接到GKE并使用Pod进行构建。用户想知道是否可能,因为根据他的了解,Kubernetes也需要访问Jenkins。用户想知道如何实现这一点。
用户目前遇到的问题是访问权限的问题:

o.fabric8.kubernetes.client.KubernetesClientException: Failure executing: GET at: https://xxxxxx/api/v1/namespaces/cicd/pods?labelSelector=jenkins%3Dslave. Message: pods is forbidden: User "system:anonymous" cannot list resource "pods" in API group "" in the namespace "cicd". Received status: Status(apiVersion=v1, code=403, details=StatusDetails(causes=[], group=null, kind=pods, name=null, retryAfterSeconds=null, uid=null, additionalProperties={}), kind=Status, message=pods is forbidden: User "system:anonymous" cannot list resource "pods" in API group "" in the namespace "cicd", metadata=ListMeta(_continue=null, resourceVersion=null, selfLink=null, additionalProperties={}), reason=Forbidden, status=Failure, additionalProperties={}).

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

通过使用集群信息中的URL,并创建一个包含Jenkins配置的配置文件,并将其作为密钥传递,可以解决连接问题。但是,用户仍然想知道如何使用Bearer令牌进行身份验证。用户尝试使用现有的托管Jenkins密钥,但失败了。
更新:身份验证成功,但在创建Pod后,作业从未运行。
更新:看起来使用jenkinsci Docker镜像作为硬编码的Pod模板可以工作,我尝试使用Groovy生成的yaml模板调用GCR,在那里我遇到了之前提到的错误。

方案2

使用Kubernetes插件可以更方便地与GKE集成,可以通过配置插件来实现与GKE的连接和控制。

以下是在Jenkins中使用Kubernetes插件的步骤:
1. 在Jenkins中安装Kubernetes插件。
2. 在Jenkins的全局配置中,配置Kubernetes插件的连接信息。这包括GKE集群的URL、凭据和其他相关信息。
3. 在Jenkins的作业配置中,选择使用Kubernetes代理运行作业。
4. 配置Kubernetes代理的相关参数,如Pod模板、容器镜像、环境变量等。
5. 保存并运行作业,Jenkins将使用Kubernetes插件连接到GKE并在Pod中运行作业。

使用Kubernetes插件可以更方便地管理与GKE的连接和控制,同时提供了更多的配置选项和灵活性。

方案3

如果您希望手动控制与GKE的连接和控制,可以使用kubectl命令行工具。

以下是使用kubectl命令行工具连接到GKE并在Pod中运行作业的步骤:
1. 安装kubectl命令行工具并配置与GKE集群的连接信息。
2. 使用kubectl命令创建一个Pod,其中包含您要运行的作业的容器镜像和其他相关配置。
3. 监视Pod的状态,直到作业完成。
4. 根据需要,使用kubectl命令管理Pod和其他相关资源。

使用kubectl命令行工具可以直接与GKE进行交互,提供了更多的灵活性和控制能力,但需要更多的手动操作和配置。

请根据您的需求选择适合您的解决方案,并根据相应的步骤进行操作。

正文完