我想整合我们的Jenkins和Kubernetes集群,它们在不同的服务器上运行。每个stage
和production
有2个集群。我已经在舞台集群上创建了2个名称空间来划分development
和stage
。我将我的values.yaml划分如下。
因此根据GIT_BRANCH值;我想设置名称空间变量并通过helm install
命令进行部署。在这种情况下,
我的问题是,在这种情况下,在Jenkinsfile中连接2个群集的最佳方法是什么,这是导致我需要将开发和测试命名空间连接到一个群集的原因,对于生产,我需要部署另一个群集。
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}"
}
您将需要创建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}"
"""
}
}
}
}
}