【问题标题】:Jenkins and Kubernetes Integration using with HelmJenkins 和 Kubernetes 集成使用 Helm
【发布时间】:2020-01-16 21:49:12
【问题描述】:

我想集成我们的 Jenkins 和 Kubernetes 集群,它们可以在不同的服务器上工作。我每个 stageproduction 有 2 个集群。我已经在舞台集群上创建了 2 个名称空间来划分 developmentstage。我划分我的 values.yaml,如下所示。

  • valeus.dev.yaml
  • values.stage.yaml
  • values.prod.yaml

所以根据 GIT_BRANCH 的值;我想设置命名空间变量并通过helm install 命令进行部署。在这种情况下,

我的问题是,在 Jenkinsfile 中连接两个集群的最佳方式是什么

 stage('deploy') {
   steps {
      script {
        if (env.GIT_BRANCH == "origin/master") {
            def namepsace="dev"
            sh "helm upgrade --install -f values.dev.yaml --namespace ${namespace}"
        } else if (env.GIT_BRANCH =="origin/test"){
            def namepsace="stage"
            sh "helm upgrade --install -f values.stage.yaml --namespace ${namespace}"

        } else { 
            def namepsace="prod"
            sh "helm upgrade --install -f values.prod.yaml --namespace ${namespace}"
        }

【问题讨论】:

  • 更改helm k8s连接上下文有点痛苦,helm只是使用与kubectl相同的上下文。你可以在github.com/helm/helm/issues/4195找到一些讨论。
  • 我也在努力集成 Jenkins 和 k8s。在更改上下文之前,我还需要在 Jenkins 和 Kubernetes 之间进行集成。做这个 Jenkinsfile 的最佳方法是什么?
  • 您使用的是 Helm 版本 2 还是 3? Helm 3 在这方面有一些改进(--kube-context)
  • Helm 3.. 你有什么我参考的例子我找不到任何

标签: jenkins kubernetes jenkins-pipeline kubernetes-helm


【解决方案1】:

您将需要创建 Jenkins 机密来为您的 k8s 集群添加两个 kubeconfig 文件,并在 if 语句中为您的环境加载 kubeconfig

例如使用上面的代码

stage('deploy') {
  steps {
    script {
      if (env.GIT_BRANCH == "origin/master") {
        def namepsace="dev"
        withCredentials([file(credentialsId: 'kubeconfig-dev', variable: 'config')]) {
          sh """
          export KUBECONFIG=\${config}
          helm upgrade --install -f values.dev.yaml --namespace ${namespace}"
          """
        }
      } else if (env.GIT_BRANCH =="origin/test"){
        def namepsace="stage"
        withCredentials([file(credentialsId: 'kubeconfig-stage', variable: 'config')]) {
          sh """
          export KUBECONFIG=\${config}
          helm upgrade --install -f values.dev.yaml --namespace ${namespace}"
          """
        }
      } else {
        def namepsace="prod"
        withCredentials([file(credentialsId: 'kubeconfig-prod', variable: 'config')]) {
          sh """
          export KUBECONFIG=\${config}
          helm upgrade --install -f values.dev.yaml --namespace ${namespace}"
          """
        }
      }
    }
  }
}

【讨论】:

  • 实际上我将我的 kubeconfig 文件合并到可以正常工作的本地 pc 的单个配置文件中。如果我上传这个配置仍然有效吗?我想我可以在没有任何插件的情况下为 Kubernetes 创建一个秘密,对吗?
  • 似乎是重复的,但由于这个原因,我想我也需要使用命名空间更改上下文,您能否也检查此链接上下文。stackoverflow.com/questions/59769890/…
猜你喜欢
  • 2018-07-27
  • 2018-09-28
  • 2020-05-01
  • 1970-01-01
  • 2023-01-12
  • 2018-04-15
  • 1970-01-01
  • 2019-09-10
  • 2022-08-23
相关资源
最近更新 更多