在 Google Kubernetes Engine 上设置 Jenkins

Last reviewed 2019-02-27 UTC

本教程介绍如何在 Google Kubernetes Engine (GKE) 上设置 Jenkins 以帮助编排您的软件交付流水线。

目标

  • 使用 GKE 创建 Kubernetes 集群。
  • 使用 Helm 安装 Jenkins。
  • 连接到 Jenkins。

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

  • Google Kubernetes Engine

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 启用 GKE API。

    启用 API

  5. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  6. 确保您的 Google Cloud 项目已启用结算功能

  7. 启用 GKE API。

    启用 API

准备环境

首先,准备部署环境。

  1. 激活 Cloud Shell。Cloud Shell 让您能够使用 Google Cloud 控制台中的命令行,并且还包含进行 Google Cloud 开发所需的 gcloud CLI 及其他工具。Cloud Shell 可能需要几分钟才能完成预配。

    激活 Cloud Shell

    完成此过程后,您将看到以下输出:

    Welcome to Cloud Shell! Type "help" to get started.
    
  2. 克隆示例代码:

    git clone https://github.com/GoogleCloudPlatform/continuous-deployment-on-kubernetes.git
    

    Git 代码库包含要用于部署 Jenkins 的 Kubernetes 清单。要了解这些清单及其设置,请参阅为 GKE 配置 Jenkins

  3. 导航到示例代码目录:

    cd continuous-deployment-on-kubernetes
    

创建 GKE 集群

  1. 预配 GKE 集群。此步骤可能需要几分钟才能完成。

    gcloud container clusters create jenkins-cd \
      --zone us-east1-d --scopes cloud-platform
    

    cloud-platform 范围使 Jenkins 能够访问 Cloud Source Repositories 和 Container Registry。

  2. 确认您可以连接到集群。

    kubectl cluster-info
    

    如果能够成功连接到集群,则输出类似以下内容:

    Kubernetes control plane is running at https://35.196.84.95
    GLBCDefaultBackend is running at https://35.196.84.95/api/v1/namespaces/kube-system/services/default-http-backend:http/proxy
    KubeDNS is running at https://35.196.84.95/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    Metrics-server is running at https://35.196.84.95/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
    
  3. 将自己添加为集群的 RBAC 集群管理员,以便能在集群中授予 Jenkins 权限:

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin --user=$(gcloud config get-value account)
    

安装 Jenkins

使用 Helm 通过代码库部署 Jenkins。

  1. 添加 Jenkins Helm 图表代码库:

    helm repo add jenkinsci https://charts.jenkins.io
    helm repo update
    

您使用自定义值文件来配置 Jenkins 安装。如需详细了解配置,请查看 jenkins/values.yaml 文件。

  1. 使用 Helm CLI 通过您的配置集来部署图表:

    helm install cd-jenkins -f jenkins/values.yaml jenkinsci/jenkins --wait
    

    如需详细了解如何配置 Jenkins 安装,请参阅 Jenkins 图表的文档页面

  2. 确保 Jenkins pod 变为 Running 状态且容器处于 READY 状态:

    kubectl get pods
    

    您将在 READY 列中看到 2/2,在 STATUS 列中看到 Running。Jenkins 可能需要几分钟才能完成初始化。

    NAME           READY   STATUS    RESTARTS   AGE
    cd-jenkins-0   2/2     Running   0          6m30s
    
  3. 检查已正确创建 Kubernetes 服务。

    kubectl get svc
    

    输出类似以下内容:

    NAME               CLUSTER-IP     EXTERNAL-IP   PORT(S)     AGE
    cd-jenkins         10.35.249.67   <none>        8080/TCP    3h
    cd-jenkins-agent   10.35.248.1    <none>        50000/TCP   3h
    kubernetes         10.35.240.1    <none>        443/TCP     9h
    

Jenkins 安装项要使用 Kubernetes 插件来创建构建器代理。当 Jenkins 主节点需要运行构建项时,系统将根据需要自动启动这些代理。操作完成后,它们将自动终止且其资源将重新添加到集群的资源池。

连接到 Jenkins

  1. 通过 Cloud Shell 设置转发到 Jenkins 界面的端口:

    export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/component=jenkins-master" -l "app.kubernetes.io/instance=cd-jenkins" -o jsonpath="{.items[0].metadata.name}")
    kubectl port-forward $POD_NAME 8080:8080 >> /dev/null 2>&1 &
    
  2. 要打开 Jenkins 用户界面,请点击 Cloud Shell 中的网页预览,然后点击在端口 8080 上预览 (Preview on port 8080)。

    port8080

您现在可以访问 Jenkins 和 GKE。如需更进一步使用此解决方案,您可以在持续交付流水线中使用这些组件。

清除数据

完成本教程后,请清理在 GCP 上创建的资源,避免日后再为这些资源付费。

删除项目

为了避免产生费用,最简单的方法是删除您为本教程创建的项目。

如需删除项目,请执行以下操作:

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

删除 GKE 集群

  1. 删除 GKE 集群:
    gcloud container clusters delete jenkins-cd --zone us-east1-d
    

后续步骤