【问题标题】:How to connect Jenkins with Google Cloud Shell particularly for GKE如何将 Jenkins 与 Google Cloud Shell 连接起来,尤其是针对 GKE
【发布时间】:2019-12-16 12:28:39
【问题描述】:

我正在努力在 Google Kubernetes 上集成 jenkins。想要一个用于我的项目的管道,它将执行以下步骤:

  • 从 maven 构建 JAR
  • 构建 docker 镜像并推送到谷歌注册表
  • kubectl apply -f 命令或 Helm 命令 运行重新部署、升级、降级等

我熟悉上述命令,但我对这种类型的管道很陌生,我可以在其中运行它们,但每次詹金斯试图教我你在容器中,而不是在 kubernetes 上大声笑

我有一个谷歌云外壳,我不能直接安装在那台机器上。所以我必须以某种方式找到一种方法来集成 jenkins 以将这些命令直接传递给 GKE 环境。

我只想为不熟悉如何实现以下几点的人提供适当的分步指南:

  • 有 GKE
  • 上面有詹金斯吊舱
  • 了解所有要执行的命令(docker、gcloud、kubectl、helm 等)
  • 只需要在 jenkins 和 GKE 之间集成即可利用上述所有内容

如果我无法解释那么多,请多多包涵。询问您需要解决的其他任何问题。谢谢

【问题讨论】:

    标签: jenkins kubernetes continuous-integration google-kubernetes-engine


    【解决方案1】:

    如果您的 Jenkins pod 在 GKE 中运行,只需选择 accessing the api from a pod 并将您的最后一步封装到小型 python/go 脚本中。

    如果您更喜欢使用kubectl,您可以: 设置正确的 rbac,例如(这个允许列出 pod 和服务):

    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: list
    rules:
    - apiGroups: [""]
      resources: ["services", "pods"]
      verbs: ["get", "list"]
    
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: list
    subjects:
    - kind: ServiceAccount
      name: default
      namespace: default
    roleRef:
      kind: ClusterRole
      name: svc-list
      apiGroup: rbac.authorization.k8s.io
    

    然后

    kubectl run --restart=Never --rm -it ubuntu --image ubuntu:18.04
    
    {
       apt-get update
       apt-get install -y apt-transport-https curl gnupg
       curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg |  apt-key add -
    
      cat <<EOF | tee /etc/apt/sources.list.d/kubernetes.list
    deb https://apt.kubernetes.io/ kubernetes-xenial main
    EOF
    
       apt-get update
       apt-get install -y kubectl
    }
    

    kubectl get po,svc

    NAME         READY   STATUS    RESTARTS   AGE
    pod/ubuntu   1/1     Running   0          16m
    
    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   122d
    

    【讨论】:

    • 感谢您的及时回复。顺便说一句,这不是开销吗?我的意思是为什么我去那个脚本或休息 API?我不能以某种方式与 GKE 建立连接并直接运行那些我习惯的简单 kubectl 命令并挽救我的生命吗?有什么我想念的吗?我的想法是不是有错误的方法?
    • 对不起,我的知识少。我已经这样做了,它制作了一个 pod,并通过 kubectl 告诉了我需要的所有信息。很公平。现在我将在这个 ubuntu 映像上安装 jenkins,我很适合创建管道吗?然后所有的 shell 脚本都有简单的 kubectl 命令,它们会完美运行,对吧?
    • 不,你必须在你的 jenkins pod 中安装 kubectl。
    • 此时当我运行简单命令时,它显示以下错误。 kubectl get pods 服务器出错(禁止):pods 被禁止:用户“system:serviceaccount:default:default”无法在命名空间“default”中列出 API 组“”中的资源“pods”跨度>
    • 查看我的答案set up correct rbac, for example (this one allow to list pods and servies):
    猜你喜欢
    • 2019-02-26
    • 2021-05-28
    • 1970-01-01
    • 2015-09-21
    • 2021-05-03
    • 2021-09-03
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多