在 Google Kubernetes Engine 上设置 Jenkins

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

目标

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

费用

本教程使用 Google Cloud 的计费组件,包括:

  • Compute Engine
  • Google Kubernetes Engine
  • Cloud Build

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

准备工作

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册一个新帐号

  2. 在 Cloud Console 的项目选择器页面上,选择或创建 Cloud 项目。

    转到项目选择器页面

  3. 确保您的 Google Cloud 项目已启用结算功能。 了解如何确认您的项目已启用结算功能

  4. 启用 Compute Engine, GKE, and Cloud Build API。

    启用 API

准备环境

首先,准备部署环境。

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

    激活 Cloud Shell

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

    Welcome to Cloud Shell! For help, visit https://cloud.google.com/cloud-shell/help.
    
  2. 将默认 Compute Engine 区域设置为 us-east1-d

    gcloud config set compute/zone us-east1-d
    
  3. 克隆示例代码或下载 zip 文件

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

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

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

    cd continuous-deployment-on-kubernetes
    

创建 Kubernetes 集群

您可以使用 GKE 来创建和管理 Kubernetes 集群。

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

    gcloud container clusters create jenkins-cd \
      --machine-type n1-standard-2 --num-nodes 2 \
      --scopes "https://www.googleapis.com/auth/source.read_write,cloud-platform" \
      --cluster-version 1.15
    

    新增范围使 Jenkins 能够访问 Cloud Source Repositories 和 Container Registry。

  2. 确认您的集群正在运行。

    gcloud container clusters list
    

    STATUS 列中查找 RUNNING

    NAME        LOCATION    MASTER_VERSION  MASTER_IP    MACHINE_TYPE   NODE_VERSION  NUM_NODES  STATUS
    jenkins-cd  us-east1-d  1.15.11-gke.15     35.231.8.57  n1-standard-2  1.15.11-gke.15   2          RUNNING
    
  3. 确认您可以连接到集群。

    kubectl cluster-info
    

    如果能够成功连接到集群,则会显示 Kubernetes 组件网址。

    Kubernetes master is running at https://130.211.178.38
    GLBCDefaultBackend is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/default-http-backend
    Heapster is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/heapster
    KubeDNS is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/kube-dns
    Metrics-server is running at https://130.211.178.38/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
    

安装 Helm

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

  1. 下载并安装 Helm 二进制文件:

    wget https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz
    
  2. 将文件解压缩到本地系统:

    tar zxfv helm-v3.2.1-linux-amd64.tar.gz
    cp linux-amd64/helm .
    
  3. 将自己添加为集群的 RBAC 集群管理员,以便能在集群中授予 Jenkins 权限:

    kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin \
            --user=$(gcloud config get-value account)
    
  4. 添加官方稳定版代码库:

    ./helm repo add jenkinsci https://charts.jenkins.io
    ./helm repo update
    
  5. 通过运行以下命令验证 Helm 是否正确安装:

    ./helm version
    

    您将看到客户端版本显示为 v3.2.1

    version.BuildInfo{Version:"v3.2.1", GitCommit:"fe51cd1e31e6a202cba7dead9552a6d418ded79a", GitTreeState:"clean", GoVersion:"go1.13.10"}
    

安装 Jenkins

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

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

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

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

  2. 该命令完成后,确保 Jenkins pod 变为 Running 状态且容器处于 READY 状态:

    kubectl get pods
    

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

    NAME                          READY     STATUS    RESTARTS   AGE
    cd-jenkins-7c786475dd-vbhg4   1/1       Running   0          1m
    
  3. 通过 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 &
    
  4. 检查是否已正确创建 Jenkins 服务。

    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. 检索 Jenkins Helm 图表自动创建的管理员密码:

    printf $(kubectl get secret cd-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
    
  2. 如需打开 Jenkins 界面,请点击 Cloud Shell 中的 Web 预览,然后点击在端口 8080 上预览 (Preview on port 8080)。

    port8080

  3. 点击窗口右上角的登录。在用户字段中输入 admin,在密码字段中输入上一步中的密码值。

  4. 点击登录按钮。

您现即可访问 Jenkins 以及由 GKE 托管的 Kubernetes 集群。要更进一步使用此解决方案,您可以在持续交付流水线中使用这些组件。

清理

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

删除项目

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

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

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”页面

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

删除磁盘

  1. 在 Cloud Console 中,转到磁盘页面。

    转到“磁盘”页面

  2. 点击您的 jenkins-home 磁盘对应的复选框。
  3. 点击删除 以删除磁盘。

删除实例

如需删除 Compute Engine 实例,请执行以下操作:

  1. 在 Cloud Console 中,转到虚拟机实例页面。

    转到“虚拟机实例”页面

  2. 点击您要删除的实例对应的复选框。
  3. 点击删除 以删除实例。

后续步骤